[jjzhu学java]之深入理解JVM之垃圾收集器与内存分配策略

  • 时间:
  • 浏览:1
  • 来源:5分排列3APP下载_5分排列3APP官方

任何判断对象与否消亡有的是通过引用来判断,引用完后 的定义是:可能reference类型的数据中存储的数值代表的是另一块内存区域的起始地址一段话,就称这块内存代表有有有五个 引用

垃圾分类分类整理器的主要任务很多我找出可能“消亡”的对象,将其标记并清除其说用内存的过程,要怎样判断某个对象可能“消亡”,不同的虚拟机有不同的判断策略

现在一般的垃圾分类分类整理器有的是用该算法(GC Root Tracing)来判断对象与否“消亡”,该算法的基本思想很多我:通过一组称为“GC Roots”的对象作为根节点,许多从什么根节点向下搜索,搜索所走过的路径称为引用链(Reference Chain),当有有有五个 对象到根节点之间没法 任何一根绳子 引用链一段话,就认为该对象可能“消亡”,如下图所示:

在分析结果前,先对GC的内容先做有有有五个 介绍:

引用计数(Reference Counting)算法的基本思想很多我:给每个对象换成有有有五个 引用计数器,每当有有有有五个 地方对该对象进行了引用,引用计数器就加1;引用失效后就减1;当引用计数器为0时,就表示没法 任何地方引用了该对象,这还需要认为该对象可能“消亡”了。

着实引用计数算法思想简单,数率也很高,许多java虚拟机并没法 用到该算法标记“消亡”对象,可能当老出循环引用的完后 ,表现有的是的是没法 好了。大家还需要编写测试代码测试并看GC信息看看java虚拟机到底有没法 用该算法。

代码示例中,新建了有有有五个 对象objA,objB,许多通过objA.instance = objB,objB.instance = objA让大家互相引用,许多将objA、objB都置为空,可能触发GC,大家还需要通过-XX:+PrintGCDetails让java虚拟机在趋于稳定GC后打印出GC的具体信息,

代码片运行时的VM参数为-Xmx20M -Xms20M -XX:+PrintGCDetails

运行系统多多线程 ,可看了如下打印结果:

1、GC日志的第一行[GC [PSYoungGen说明了在新生代趋于稳定了GC(Minor GC),这里也还需要看出,当前的HotSpot虚拟机采用的是Parallel Scavenge(PS)垃圾分类分类整理器 上方的4340K->256K代表GC前后的新生代内存区域的变化,这里从4340K变到256K,说明虚拟机进行了垃圾回收,上方的(5952K)代表新生代的内存区域大小,4340K->256K(19648K)这里的括号内的19648K代表新生代和年老代的内存大小。完后 的0.0009373 secs代表的是GC所用的事件。

2、GC日志的第二行[Full GC (System)表示系统触发的一次Full GC,也很多我代码中System.gc();所引起的GC,一次Full GC会对java堆中的所有区域进行GC(新生代、年老代、永久代),所完后 面的PSYoungGen(新生代)、PSOldGen(年老代)、PSPermGen(永久带)显示了各区域的GC具体情况,大家还需要看了PSYoungGen: 256K->0K(5952K),新生代经过Full GC后,全被清空了。

3、上方的Heap堆显示了各区域的最终使用具体情况

从最后的Full GC (System) [PSYoungGen: 256K->0K(5952K)]还需要看了,新生代中的内存全被GC了,很多说,HotSpot并没法 用引用计数算法来对“消亡”对象进行GC。

还需要作为GC Roots的对象包括:

1. 虚拟机栈(栈帧中的本地变量表)中的引用的对象

2. 土法律法律依据 区中 的类静态属性引用的对象

3. 土法律法律依据 区中的常量引用的对象

4. Native土法律法律依据 引用的对象

java中对象的创建需要的内存有的是在java堆中申请的,很多垃圾分类分类整理的区域很多我对java堆和土法律法律依据 区的内存区域进行GC。