java之垃圾回收和引用类型

来源:互联网 发布:测试网络ping 编辑:程序博客网 时间:2024/05/22 04:49

仅站在应用开发角度简单阐述整体概念

java中谁来回收垃圾?

java虚拟机启动后会自动启动一个有垃圾回收作用的线程,根据需要不定期进行垃圾回收

如何判断一个实例应该被回收?

简单来说通过一个引用计数器

回想String和StringBuffer的区别,其中说过改变一个String对象的实际过程是另创建一个String对象,再将引用指向新创建的实例上。注意,这时原来的实例引用数为0成为垃圾回收的对象。

即当垃圾回收线程发现一个引用数为0的对象时就会回收它

而因为人类现有计算机体系的复杂,引用又分为很多类型

不同类型的引用有何区别?

强引用(StrongReference):显式的把一个引用指向一个对象

某个对象只有强引用时,它就永远不会被回收。

软引用(SoftReference):可看做一种JVM的加速机制,比如达到当加载一个图片后避免重复加载,将引用暂存在缓存中

某个对象只有软引用时,当内存不够时,会回收这个对象。

弱引用(WeakReference):指一些规范化映射,映射存在时当key和value实例不存在是引用自动被回收

某个对象只有弱引用时,当gc线程回收的时候,它一定会被回收。

虚引用(PlantomReference):提供更灵活的垃圾处理方式,和引用队列一起使用

0 0
原创粉丝点击