永发信息网

求教一个关于java GC的问题:怎么判断GC Roots到这个对象不可达?

答案:1  悬赏:30  手机版
解决时间 2021-03-26 08:41
求教一个关于java GC的问题:怎么判断GC Roots到这个对象不可达?
最佳答案
GC的基本原理 Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。 对于程序员来说,分配对象使用new关键字;释放对象时,只要将对象所有引用赋值为null,让程序不能够再访问到这个对象,我们称该对象为\"不可达的\".GC将负责回收所有\"不可达\"对象的内存空间。 对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象(详见 参考资料1 )。通过这种方式确定哪些对象是\"可达的\",哪些对象是\"不可达的\".当GC确定一些对象为\"不可达\"时,GC就有责任回收这些内存空间。但是,为了保证GC能够在不同平台实现的问题,Java规范对GC的很多行为都没有进行严格的规定。例如,对于采用什么类型的回收算法、什么时候进行回收等重要问题都没有明确的规定。因此,不同的JVM的实现者往往有不同的实现算法。这也给Java程序员的开发带来行多不确定性。本文研究了几个与GC工作相关的问题,努力减少这种不确定性给Java程序带来的负面影响。 增量式GC( Incremental GC ) GC在JVM中通常是由一个或一组进程来实现的,它本身也和用户程序一样占用heap空间,运行时也占用CPU.当GC进程运行时,应用程序停止运行。因此,当GC运行时间较长时,用户能够感到Java程序的停顿,另外一方面,如果GC运行时间太短,则可能对象回收率太低,这意味着还有很多应该回收的对象没有被回收,仍然占用大量内存。因此,在设计GC的时候,就必须在停顿时间和回收率之间进行权衡。一个好的GC实现允许用户定义自己所需要的设置,例如有些内存有限有设备,对内存的使用量非常敏感,希望GC能够准确的回收内存,它并不在意程序速度的放慢。另外一些实时网络游戏,就不能够允许程序有长时间的中断。增量式GC就是通过一定的回收算法,把一个长时间的中断,划分为很多个小的中断,通过这种方式减少GC对用户程序的影响。虽然,增量式GC在整体性能上可能不如普通GC的效率高,但是它能够减少程序的最长停顿时间。 Sun JDK提供的HotSpot JVM就能支持增量式GC.HotSpot JVM缺省GC方式为不使用增量GC,为了启动增量GC,我们必须在运行Java程序时增加-Xincgc的参数。HotSpot JVM增量式GC的实现是采用Train GC算法。它的基本想法就是,将堆中的所有对象按照创建和使用情况进行分组(分层),将使用频繁高和具有相关性的对象放在一队中,随着程序的运行,不断对组进行调整。当GC运行时,它总是先回收最老的(最近很少访问的)的对象,如果整组都为可回收对象,GC将整组回收。这样,每次GC运行只回收一定比例的不可达对象,保证程序的顺畅运行。追问如果我不把p置为空,是不是就一直不会被回收,即使后面都不再用到
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我收到一张银行汇票,应该怎样处理
有个电影里有个叫麻衣的叫什么电影啊,是有两
苍耳子的叶子是什么样
国考备注写着经常加班,较适合男性,女生可以报
黄景瑜是什么学历
线椒的别名是什么
魔兽世界祥和之灵怎么得有什么用祥和之灵速刷
买戒指到哪个网站买好
损坏的财物说要物价局评估请问规谁去物价局
100吨相当于多少个成年人
中旅国际地址在哪,我要去那里办事
海底 菊花是什么
陆良北辰2017年104班76组成绩单
“期颐之年”和“古稀之年”指的是多少岁?
贷款买车能拿到汽车合格证吗?
推荐资讯
摩挲人是什么人 ?
广交不如择友,投师不如妨友的意思
百变大侦探 恶果 凶手是谁
房产继承咨询
y=2sin3x,x∈[-π/6,π/6]求出反函数
本人姓冯,想请人帮忙给儿子想个名字。儿子是
把5/7平均分成6份,求每份是多少?就是求5&
求KTV必点的嗨曲
容县财源驾校地址在什么地方,想过去办事
烧鸡二十元一只能吃吗
那就是只要钢筋是同一批的,就可以将基础梁和
菲林吧地址在什么地方,我要处理点事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?