作者:沉睡森林 | 来源:互联网 | 2023-09-16 15:01
引导目录:Hibernate系列教程目录Java对象通过new命令进行创建,Java虚拟机(JavaVirtualMachine,JVM)会为新的Java对象
引导目录:
Hibernate 系列教程 目录
Java对象通过new命令进行创建,Java虚拟机(Java Virtual Machine,JVM)会为新的Java对象在内存中开辟一个新空间以存放次对象。
只要此对象被引用变量引用,它就一直在内存中存在。
当然,对象不被任何引用对象引用时,JVM就会通过垃圾回收机制消除次对象以释放内存。
例如以下代码:
1 Object o = new Object(); // 一个Object对象实例被变量o引用,JVM将为它开辟空间
引用的效果如图所示:
然后将变量o的引用设为null,代码如下:
1 o = null; // 变量o不再引用Object对象实例,此时对象实例将被Java虚拟机清除
引用的效果如图所示:
集合对象(如Set、List和Map)中存放的是对象的引用。
在集合中添加一个对象时,只是添加了此对象的引用;反之,如果在集合中删除对象,也只是删除此对象的引用。
如果把某个对象的引用设为null,则此对象也会被JVM清除。
下面来看看集合对象的引用:
1 Set set = new HashSet(); // 创建一个HashSet对象实例,初始化的集合大小为3
2 Object o1 = new Object(); // 新建o1对象
3 Object o2 = new Object(); // 新建o2对象
4 Object o3 = new Object(); // 新建o3对象
5 set.add(o1); // 把o1加入set集合
6 set.add(o2); // 把o2加入set集合
7 set.add(o3); // 把o3加入set集合
Set集合的引用效果如图所示:
如果从set集合中吧o1对象删除,只是取消了o1对象的引用,而o1对象仍被变量o1所引用。
所以,JVM并不会把o1对象清除,除非设置o1=null之后,o1对象才变得孤立,JVM才会将其清除。
如图所示: