java 内存回收(GC)的方式

java内存的管理其实就是对象内存的管理,其中包括对象的分配和释放

对应程序员来说分配对象使用new关键字,而释放一个对象只需要让它等于null,让程序不能再访问这个对象,这时对象是不可达的,GC负责回收不可达的对象。

当程序员创建一个对象时,GC就开始监控对象的大小、地址、使用情况。程序一般通过有向图的方式管理堆中的所有对象,通过这种方式确定哪些对象是可达的,哪些对象是不可达的。

 

由于在程序GC时程序会停止运行,用户可以感知,所以当GC运行时间过长的时候用户感知到程序停止运行,但是当GC运行时间过短,内存回收率会变低,表示大量内存没有被回收,程序仍然占用着大量内存,所以在设计GC的时候必须在停顿时间和回收率上做一个权衡。

1、增量式GC

通过一定的算法把一个长的中断划分为多个小的中断,减少GC对用户程序的影响;将堆中的所有对象按照创建和使用进行分组,将使用频率较高和相关的对象分在一组,随着程序的运行不断对分组进行调整,当GC运行时它总是回收最近最少访问的对象,如果整组都为可回收对象,那么整组回收

posted on 2016-12-28 23:28  _故乡的原风景  阅读(187)  评论(0编辑  收藏  举报