摘要 当前商业虚拟机的垃圾收集都采用"分代收集"(Generational Collection) 算法,这种算法并没有什么新的思想,只是根据对象的存活周期的不同将内存划分为几块。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用适当的收集算法。在新生代中,每次垃圾收集时都发现有... ...
分类:
编程语言 时间:
2018-09-22 22:25:15
阅读次数:
197
一,jvm堆总览 这里我们先不展开说,只是从总体上来看一下这个堆内存的情况,我们知道堆内存一般都是存放对象的内存区域,也就是new出来的对象的地方,所以这一块区区域最大的地方,所以这一块也是GC垃圾回收最经常光顾的区域。 至于新生代老年代和伊甸园我们后面再来看,按照教程走。 ...
分类:
其他好文 时间:
2018-09-22 21:54:20
阅读次数:
195
Minor GC触发条件:当Eden区满时,触发Minor GC。 Full GC触发条件: (1)调用System.gc时,系统建议执行Full GC,但是不必然执行 (2)老年代空间不足 (3)方法去空间不足 (4)通过Minor GC后进入老年代的平均大小大于老年代的可用内存 (5)由Eden ...
分类:
其他好文 时间:
2018-09-21 10:54:52
阅读次数:
273
相比CMS收集器有两个显著的改进: (1)、 G1收集器是基于“标记-整理”算法实现的收集器,不会产生空间碎片 (2)、 它可以精确地控制停顿,能让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒。 原理:G1将整个Java堆(包括新生代、老年代)划分为多个大小固定 ...
分类:
其他好文 时间:
2018-09-19 22:00:22
阅读次数:
152
一、堆(Heap) 1.1.什么是堆 堆是用于存放对象的内存区域。因此,它是垃圾收集器(GC)管理的主要目标。其具有以下特点: 堆在逻辑上划分为“新生代”和“老年代”。由于JAVA中的对象大部分是朝生夕灭,还有一小部分能够长期的驻留在内存中,为了对这两种对象进行最有效的回收,将堆划分为新生代和老年代 ...
分类:
其他好文 时间:
2018-09-15 17:32:07
阅读次数:
127
目录 GC的概念 回收算法 引用计数算法:(老牌垃圾回收算法。无法处理循环引用,没有被Java采纳) 1、引用计数算法的概念: 根搜索算法 标记-清除算法 复制算法:(新生代的GC) 标记-整理算法:(老年代的GC) 分代收集算法:(新生代的GC+老年代的GC) Minor GC和Full GC 可 ...
分类:
其他好文 时间:
2018-09-11 21:17:02
阅读次数:
157
三、内存分配与回收策略 三、内存分配与回收策略 1.1 Minor GC 和 Full GC 1.1 Minor GC 和 Full GC Minor GC:发生在新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行,执行的速度一般也会比较快。 Full GC:发生在老年代上,老 ...
分类:
编程语言 时间:
2018-09-09 11:37:27
阅读次数:
164
1.内存分配与回收策略 2.对象优先在Eden 分配 Full GC 是整个堆的GC,会清理老年代和新生代。 3.大对象直接进入老年代 4.长期存活的对象进入老年代 5.动态年龄判断。 6.空间分配担保 ...
分类:
其他好文 时间:
2018-09-08 11:52:03
阅读次数:
193
Java堆是垃圾收集器管理的主要区域。因为基本采用分代收集算法,所以Java堆可以细分为新生代和老年代,更细致是Eden、From Survivor和To Survivor。划分的目的是更好地回收内存或更快地分配内存。根据JVM规范,Java堆可以处于物理上不连续的内存空间中,要求逻辑上连续。 1 ...
分类:
其他好文 时间:
2018-09-05 12:10:18
阅读次数:
126
jmap JDK自带了一些工具可以帮助我们查看JVM运行的堆内存情况,常用的是jmap命令 jmap -heap <pid> 打印堆的使用情况 那么,从这个输出中我们也可以大致看出堆的结构,分为Young Generation (年轻代) 和 Old Generation (老年代) Young G ...
分类:
其他好文 时间:
2018-08-30 18:28:56
阅读次数:
178