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

  • 时间:
  • 浏览:0
  • 来源:uu快3开奖历史_uu快3玩法_注册

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 Root Tracing)来判断对象是否“消亡”,该算法的基本思想却说 :通过一组称为“GC Roots”的对象作为根节点,却说 从哪些地方地方根节点向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一一八个多对象到根节点之间越来越 任何第四根引用链得话,就认为该对象却说 “消亡”,如下图所示:

引用计数(Reference Counting)算法的基本思想却说 :给每个对象加在一一八个多引用计数器,每当有一一八个多地方对该对象进行了引用,引用计数器就加1;引用失效后就减1;当引用计数器为0时,就表示越来越 任何地方引用了该对象,这还还都可不可以认为该对象却说 “消亡”了。

我嘴笨 引用计数算法思想简单,带宽也很高,却说 java虚拟机并越来越 用到该算法标记“消亡”对象,却说 当突然出先循环引用的如果,表现就都有 越来越 好了。亲们 还还都可不可以编写测试代码测试并看GC信息看看java虚拟机到底有越来越 用该算法。

java中对象的创建还还都可不可以的内存都有 在java堆中申请的,却说 垃圾下发的区域却说 对java堆和土妙招区的内存区域进行GC。

任何判断对象是否消亡都有 通过引用来判断,引用如果的定义是:却说 reference类型的数据中存储的数值代表的是另一块内存区域的起始地址得话,就称这块内存代表一一八个多引用

代码示例中,新建了一一八个多对象objA,objB,却说 通过objA.instance = objB,objB.instance = objA让亲们 互相引用,却说 将objA、objB都置为空,却说 触发GC,亲们 还还都可不可以通过-XX:+PrintGCDetails让java虚拟机在处于GC后打印出GC的具体信息,

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

运行系统应用应用程序,可看了如下打印结果:

还还都可不可以作为GC Roots的对象包括:

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

2. 土妙招区中 的类静态属性引用的对象

3. 土妙招区中的常量引用的对象

4. Native土妙招引用的对象

在分析结果前,先对GC的内容先做一一八个多介绍:

垃圾下发器的主要任务却说 找出却说 “消亡”的对象,将其标记并清除其说用内存的过程,怎么才能 才能 判断某个对象却说 “消亡”,不同的虚拟机有不同的判断策略