最近在看《疯狂Java讲义》巩固基础,学到了一些之前没有掌握的知识,写成读书笔记,分享给大家,希望可以和大家一起学习进步😃


Java中的垃圾回收机制有哪些特点?
1.只回收堆内存的对象,不回收其他物理资源(数据库连接等)。
2.无法精准控制内存回收的时机,系统会在合适的时候进行内存回收。
3.在回收对象之前会调用对象的finalize()方法清理资源,这个方法有可能会让其他变量重新引用对象导致对象复活。

对象在内存的状态有哪些?
1.可达状态
有一个及以上的变量引用着对象。
2.可恢复状态
已经没有变量引用对象了,但是还没有被调用finalize()方法。系统在回收前会调用finalize()方法,如果在执行finalize()方法时,重新让一个变量引用了对象,那么对象会变成可达状态,否则会变成不可达状态。
3.不可达状态
执行finalize()方法后,对象还是被变量引用,那么对象就变成了不可达状态。

对象的强,软,弱和虚引用的区别是什么?
强引用
就是普通的变量对对象的引用,强引用的对象不会被系统回收。
软引用
当内存空间足够时,软引用的对象不会被系统回收。当内存空间不足时,软引用的对象可能被系统回收。通常用于内存敏感的程序中。
弱引用
引用级别比软引用低,对于只有软引用的对象,不管内存是否足够, 都可能会被系统回收。
虚引用
虚引用主要用于跟踪对象被垃圾回收的状态,不能单独使用,必须和引用队列联合使用。
展开
评论