今天在装VS2008,实在是太墨迹了,顺便看了下JAVA基础,想到了几种JAVA创建对象的方式,对于其中内存的分配方式感到疑惑,于是就百度了下,下面做下总结:
a)首先,我们应该要知道,在创建一个对象的时候,JAVA会用到内存里面的3个东西,
堆:存放所用new出来的对象
栈:存放对象的引用(也就是地址),基本数据类型产生的变量
常量池:(这个比较特殊)是用来存放String常量,如“abc”
注意:堆比栈的速度要慢很多,
b)下面,分析下下面几种创建对象的方式:
String a = "123";
这是声明一个字符串常量,首先在常量池(如果是int或者其他基本类型,则是在堆中)
中查找有没有这个“abcdef”,如果没有,在池中产生一个“123”,然后把引用赋值给栈中的a
String a = new String("123");
因为有new,调用了String类的构造,在堆中产生了一个对象,值为“abcdef”,然后
在栈中声明一个引用a,把产生的对象的引用赋值给a
c)还有一个疑问:
SomeClass a=new SomeClass();
a=new SomeClass();
new SomeClass();
他们三者之间有什么区别和联系呢?
SomeClass a=new SomeClass();
1,SomeClass:栈中产生一个a对象,
2,new SomeClass() 堆中产生一个对象
3."="将new出来的对象地址赋给a
a=new SomeClass();
1.new SomeClass();重新开辟一个对象
2,“=”,将新对象地址赋给a
new SomeClass();
直接在堆中产生一个对象,但是没有传给栈中的一个引用(根据JAVA的垃圾回收机制,长时间不用,JVM会调用
System.gc()方法析构掉这个对象)。
很多都是网上拜读出来的,感觉很有用,就发出来了
分享到:
相关推荐
在Java中我们有几种方式可以创建一个新的对象呢?总共有以下几种方式: new关键字 反射 clone 反序列化 Unsafe.allocateInstance 为了便于说明和理解,下文仅针对new出来的对象进行讨论。
这500M内存中的一部分必须用于系统dll的加载,那么真正剩下的也许只有400M,现在关键的地方出现了:当你使用Java创建一个线程,在JVM的内存里也会创建一个Thread对象,但是同时也会在操作系统里创建一个真正的物理...
开发者不需要手动进行内存分配和释放,通过“对象生命周期”的概念,垃圾收集器会自动回收不再使用的内存。 4. 异常处理:Java提供了异常处理机制,可以在出现异常情况时捕获、处理并恢复程序的运行。通过try-catch...
开发者不需要手动进行内存分配和释放,通过“对象生命周期”的概念,垃圾收集器会自动回收不再使用的内存。 4. 异常处理:Java提供了异常处理机制,可以在出现异常情况时捕获、处理并恢复程序的运行。通过try-catch...
内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
其它对象对它的访问,访问权限所以有以下几种:private, protected, public, friendly。 1.8.2 对象 把类实例化,我们可以生成多个对象,这些对象通过消息传递来进行交互(消息 传递即激活指定的某个对象的方法以改变...
内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...
6.8 复习题 6.9 编程练习 第7章 对象和内存 7.1 内存结构 7.2 将内存分配给变量 7.3 原始类型与对象 7.4 链接对象 7.5 小结 7.6 复习题 7.7 编程练习 第8章 字符串和字符 8.1 枚举的原则 8.2 字符 8.3 作为抽象概念...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
那么在java语言中,有几种方式可以创建对象呢? 1 使用new操作符创建一个对象 2 使用clone方法复制一个对象 那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操作符时, 首先...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
7.2 将内存分配给变量 7.3 原始类型与对象 7.4 链接对象 7.5 小结 7.6 复习题 7.7 编程练习 第8章 字符串和字符 8.1 枚举的原则 8.2 字符 8.3 作为抽象概念的字符串 8.4 使用String类中的方法 ...