JVM架构(009)_什么是新生代的复制算法

转载 2016年08月29日 16:49:43

1、什么是新生代的复制算法

了解堆内存看这里:java堆内存是什么样的 
了解java垃圾回收看这里:java垃圾回收机制是什么 
所谓复制算法(Copying),即将内存平均分成A区、B区两块,进行复制+清除垃圾的操作,算法图解如下:

这里写图片描述

算法过程:

  1. 新生对象被分配到A块中未使用的内存当中。当A块的内存用完了, 把A块的存活对象复制到B块
  2. 清理A块所有对象
  3. 新生对象被分配到B块中未使用的内存当中。当B块的内存用完了, 把B块的存活对象复制到A块
  4. 清理B块所有对象
  5. 循环1。

这种算法简单高效,但是内存代价极高,有效内存只为总内存的一半,会浪费掉50%的空间。所以这种算法只是纸面算法,不具备可用性,一般来说都会使用优化的复制算法

2、什么是优化的复制算法

所谓优化的复制算法,即在复制算法的基础上,使用三个分区(Eden/S0/S1)进行处理,算法图解如下:

这里写图片描述

Eden/S0/S1默认空间比例Eden:S0:S1为8:1:1,有效内存(即可分配新生对象的内存)是总内存的90%

算法过程:

  1. Eden+S0可分配新生对象;
  2. 对Eden+S0进行垃圾收集,存活对象复制到S1清理Eden+S0。一次新生代GC结束。
  3. Eden+S1可分配新生对象;
  4. 对Eden+S1进行垃圾收集,存活对象复制到S0清理Eden+S1。二次新生代GC结束。
  5. 循环1。

我们可以看出,如果Eden/S0/S1三个空间的比例为8:1:1,则可能会出现Eden+S0中存活对象超过了总空间的10%(S1、S0的空间都是总空间的10%),在这种情况下,新生代GC会将存活周期长的对象直接放入老生代,而无需达到我们设置的阈值(转入老生代的存活次数,-XX:MaxTenuringThreshold)。

当然,这种情况在正常情况下不会出现(除非特殊场景,或者程序设计问题)。IBM的专门研究表明,新生代中的对象98%是朝生夕死的,所以8:1:1的比例是十分合理的。(每次新生代中可用内存空间为整个新生代容量的90%(80%+10%),只有10%的内存是会被浪费的)。

JVM垃圾收集算法(复制算法)----关于 新生代老年代

转:http://www.cnblogs.com/E-star/p/5556188.html 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可...
  • zp357252539
  • zp357252539
  • 2016年08月13日 09:44
  • 1321

Java千百问_07JVM架构(009)_什么是新生代的复制算法

所谓复制算法(Copying),即将内存平均分成A区、B区两块,进行复制+清除垃圾的操作,算法图解如下:算法过程: 新生对象被分配到A块中未使用的内存当中。当A块的内存用完了, 把A块的存活对象复制到...
  • ooppookid
  • ooppookid
  • 2016年05月28日 10:23
  • 2111

JVM的GC机制<一>新生代GC

JVM的GC机制面试后有空再写。做好一件事不容易。 Ref: 官方gc collector说明:http://www.oracle.com/webfolder/technetwork/tu...
  • wuqiuping695
  • wuqiuping695
  • 2015年05月03日 11:29
  • 977

JVM 实用参数-5 新生代垃圾回收

本部分,我们将关注堆(heap) 中一个主要区域,新生代(young generation)。首先我们会讨论为什么调整新生代的参数会对应用的性能如此重要,接着我们将学习新生代相关的JVM参数。 ...
  • xiaolang85
  • xiaolang85
  • 2016年07月26日 15:43
  • 488

根据应用程序设置JVM参数(二)-优化新生代大小

一、 还是接着上一篇的讲: 继续贴上一次运行的日志数据 分析: 1.看频率,可以发现基本上是4秒进行一次Gc 2.看耗时,可以发现基本上是需要0.037秒 当前的虚拟机...
  • q291611265
  • q291611265
  • 2015年08月28日 14:22
  • 2505

jvm java虚拟机 新生代的配置

1.1.1.1. -Xmn参数 参数-Xmn1m可以用于设置新生代的大小。设置一个较大的新生代会影响老生代的大小,因为这两者的总和是一定的,这个系统参数对于系统性能以及GC行为有很大的影响,新生代一般...
  • qq_30739519
  • qq_30739519
  • 2016年04月04日 10:31
  • 15546

JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代

如果大家想深入的了解JVM,可以读读周志明《深入理解Java虚拟机:JVM高级特性与最佳实践》     需要掌握的东西,包括以下内容、判断对象存活还是死亡的算法(引用计数算法、可达性分析算法)、常见的...
  • zp522123428
  • zp522123428
  • 2016年12月14日 10:22
  • 5830

JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代

你对JVM内存组成结构和JVM垃圾回收机制是否熟悉,这里和大家简单分享一下,希望对你的学习有所帮助,首先来看一下JVM内存结构,它是由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示。 JV...
  • zhb123GGGGGG
  • zhb123GGGGGG
  • 2014年11月07日 22:18
  • 14675

在JVM中,新生代和旧生代有何区别?GC的回收方式有几种?server和client有和区别?

一.概述 java的最大好处是自动垃圾回收,这样就无需我们手动的释放对象空间了,但是也产生了相应的负效果,gc是需要时间和资源的,不好的gc会严重影响系统的系能,因此良好的gc是JVM的高性能的...
  • developerFBI
  • developerFBI
  • 2014年04月12日 12:09
  • 7926

jvm:停止复制、标记清除、标记整理算法(垃圾回收)

jvm:停止复制、标记清除、标记整理算法(垃圾回收)
  • u010841296
  • u010841296
  • 2016年03月21日 12:24
  • 3055
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JVM架构(009)_什么是新生代的复制算法
举报原因:
原因补充:

(最多只允许输入30个字)