准备找工作,所以各种看书了,对于java开发岗来说垃圾回收机制的份量很重的说。看了以下几本书中对垃圾回收机制的描述:《深入理解java虚拟机》、《java编程思想》、《疯狂Java讲义》、《Java程序员面试宝典》,真的都看了,然后也晕了。但是如果面试官问我请你简单介绍一下java中的垃圾回收机制,我应该会这么说。
1、回收的内容是new出来的对象所占内存;
2、垃圾回收只与内存有关,清理内存外的资源依靠finalize()方法。垃圾回收机制在回收某个对象的内存前会调用该对象的finalize()方法。
3、强制系统垃圾回收的方式(通过程序通知系统进行垃圾回收,但系统还不一定进行垃圾回收):
- System.gc();
- Runtime.getRuntime().gc();
5、对象在内存中的状态有可达状态、可恢复状态、不可达状态,当处于可恢复状态时可能会进行垃圾回收。
上图来自《疯狂java讲义》,对象状态变化过程一目了然。finalize()方法可能会使对象重新获得引用回到可达状态,如果运行完所有对象的finalize()方法后该对象仍无引用,则进入不可达状态,正式进行垃圾回收。
附:
1、什么是Java中的内存泄漏? (摘自Java面试宝典)
- 对象是可达的;
- 对象是无用的。