简单理解了下java中的垃圾回收机制

来源:互联网 发布:php 压缩图片 编辑:程序博客网 时间:2024/06/07 00:51

准备找工作,所以各种看书了,对于java开发岗来说垃圾回收机制的份量很重的说。看了以下几本书中对垃圾回收机制的描述:《深入理解java虚拟机》、《java编程思想》、《疯狂Java讲义》、《Java程序员面试宝典》,真的都看了,然后也晕了。但是如果面试官问我请你简单介绍一下java中的垃圾回收机制,我应该会这么说。


1、回收的内容是new出来的对象所占内存;

2、垃圾回收只与内存有关,清理内存外的资源依靠finalize()方法。垃圾回收机制在回收某个对象的内存前会调用该对象的finalize()方法。
3、强制系统垃圾回收的方式(通过程序通知系统进行垃圾回收,但系统还不一定进行垃圾回收):

  • System.gc();
  • Runtime.getRuntime().gc();
4、垃圾回收以单独的线程在后台运行,为减少虚拟机额外消耗,一般在内存不足时会进行垃圾回收,所以就算强制系统垃圾回收,垃圾回收也不一定发生;

5、对象在内存中的状态有可达状态、可恢复状态、不可达状态,当处于可恢复状态时可能会进行垃圾回收。


上图来自《疯狂java讲义》,对象状态变化过程一目了然。finalize()方法可能会使对象重新获得引用回到可达状态,如果运行完所有对象的finalize()方法后该对象仍无引用,则进入不可达状态,正式进行垃圾回收。



附:

1、什么是Java中的内存泄漏?   (摘自Java面试宝典)

  • 对象是可达的;
  • 对象是无用的。

1 0
原创粉丝点击