jvm 02

20 阅读2分钟

垃圾回收的优点和原理,两种回收机制

优点:

  • 它使得编写程序不用考虑内存管理的问题
    
  • java中的对象不再有“作用域”概念,只有引用对象才有作用域
    
  • 有效的防止了内存泄漏,可以有效使用可使用的内存
    

原理: - 垃圾回收器通常作为一个单独的低级别的线程运行,在不可预知的情况下对内存堆中已经死亡的或很长时间没有使用的对象进行清除和回收。

回收机制:

  • 分代复制垃圾回收、标记清除垃圾回收、增量垃圾回收
    

垃圾回收器的基本原理?垃圾回收器可以马上回收垃圾?有什么办法主动通知虚拟机进行垃圾回收?

垃圾回收器:对于GC来说,当程序创建对象时,GC就开始监控这个对象的地址、大小、使用情况。通常GC采用有向图的方式记录和管理堆中的所有对象,通过这种方式确定哪些对象是可达的,哪些对象是不可达的。当GC确定一些对象为不可达时,GC就有责任回收这些内存空间。

可以的

程序可以手动执行system.gc(),通知GC运行,但java语言规范并不保证GC一定会执行

如何判断对象是否可以被回收

垃圾收集器在做垃圾回收时,首先需要判定哪些内存是需要被回收的,哪些对象是存活的,是不可被回收的;哪些对象已经死掉了,需要被回收的。

一般有两种方法来判断:

  1. 引用计数法:为每个对象创建一个引用计数,有对象引用时计数器+1,引用释放时计数-1,当计数器为0时就可以被回收,它有个缺点不能解决循环引用的问题。
  2. 可达性分析:从GC Roots开始向下搜素,搜索所走过的路径被称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是可以被回收

java中,对象什么时候可以被垃圾回收

当对象对当前使用这个对象的应用程序变得不可触及的时候,这个对象就可以被回收了 垃圾回收会发生在永久代,如果永久代满了或者超过了临界值,会触发完全垃圾回收(Full GC)。

JVM 运行时堆内存如何分代