JVM的新生代、老年代、MinorGC、MajorGC

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

参考:

http://blog.csdn.net/flamezyg/article/details/44673951

http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html

http://www.360doc.com/content/12/1023/16/9615799_243296263.shtml

   

    JVM中的堆,一般分为三大部分:新生代、老年代、永久代:

    一:新生代:主要是用来存放新生的对象。一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。

         新生代又分为 Eden区、ServivorFrom、ServivorTo三个区。

         Eden区:Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当Eden区内存不够的时候就会触发MinorGC,对新生代区进行一次垃圾回收。

         ServivorTo:保留了一次MinorGC过程中的幸存者。

         ServivorFrom:上一次GC的幸存者,作为这一次GC的被扫描者。

         MinorGC的过程:MinorGC采用复制算法。首先,把Eden和ServivorFrom区域中存活的对象复制到ServicorTo区域(如果有对象的年龄以及达到了老年的标准,则赋值到老年代区),同时把这些对象的年龄+1(如果ServicorTo不够位置了就放到老年区);然后,清空Eden和ServicorFrom中的对象;最后,ServicorTo和ServicorFrom互换,原ServicorTo成为下一次GC时的ServicorFrom区。

    

 

 

    二:老年代:主要存放应用程序中生命周期长的内存对象。

    老年代的对象比较稳定,所以MajorGC不会频繁执行。在进行MajorGC前一般都先进行了一次MinorGC,使得有新生代的对象晋身入老年代,导致空间不够用时才触发。当无法找到足够大的连续空间分配给新创建的较大对象时也会提前触发一次MajorGC进行垃圾回收腾出空间。

    MajorGC采用标记—清除算法:首先扫描一次所有老年代,标记出存活的对象,然后回收没有标记的对象。MajorGC的耗时比较长,因为要扫描再回收。MajorGC会产生内存碎片,为了减少内存损耗,我们一般需要进行合并或者标记出来方便下次直接分配。

     当老年代也满了装不下的时候,就会抛出OOM(Out of Memory)异常。

 

 

    三:永久代

    指内存的永久保存区域,主要存放Class和Meta(元数据)的信息,Class在被加载的时候被放入永久区域. 它和和存放实例的区域不同,GC不会在主程序运行期对永久区域进行清理。所以这也导致了永久代的区域会随着加载的Class的增多而胀满,最终抛出OOM异常。

    在Java8中,永久代已经被移除,被一个称为“元数据区”(元空间)的区域所取代。

    元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。类的元数据放入 native memory, 字符串池和类的静态变量放入java堆中. 这样可以加载多少类的元数据就不再由MaxPermSize控制, 而由系统的实际可用空间来控制.

    采用元空间而不用永久代的几点原因:(参考:http://www.cnblogs.com/paddix/p/5309550.html)

  1、为了解决永久代的OOM问题,元数据和class对象存在永久代中,容易出现性能问题和内存溢出。

  2、类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出(因为堆空间有限,此消彼长)。

  3、永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。

  4、Oracle 可能会将HotSpot 与 JRockit 合二为一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决:无法获取实体类com.xxx.xx.xx.xx.dto.XxxDTO对应的表名

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.报错如题: 无法获取实体类com.xxx.xx.xx.xx.dto.XxxDTO对应的表名 2. 报错原因,如下图红框中部分&#xff0c…

IDEA 查看最近修改、已提交文件

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 如图:点击 Version Control --> Repository --> 最左边蓝色圆圈 --> 选择一条提交日志:右边就…

程序员赚钱致富的6种方法

我认识一个朋友,也是程序员出身,他在一家还不错的外企上班,每个月工资收入也就差不多15K,五年的工作经验了,在他面前,我算是小弟。那天我们几个朋友一起打完球就去附近的饭馆吃饭,环境还不错&am…

解决:Changes not staged for commit:

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. git push 报错: 2. 提交时加上参数:-a ,表示新增。 git commit -am "提交说明" 提交成…

java8 注解: @FunctionalInterface (函数式接口)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Java8提倡函数式编程,因而新增了一个函数式接口。函数式接口保证了函数式编程,同时也保证了能够兼容以前的java版…

写给年轻程序员的一封信

很多年轻的程序员发emails给我,说希望能够得到一些如何尽快跻身优秀程序员行列的建议和方法。关于这个问题,我已经有提到过很多次,现在已经没什么可以补充的了。不过 为了满足大家的要求,在这里我再详细地归纳总结一下&#xff1a…

Docker中RocketMQ的安装与使用

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 搜索RocketMQ的镜像,可以通过docker的hub.docker.com上进行搜索,也可以在Linux下通过docker的search命令进行搜索…

大浪淘沙:不是所有的IT公司都以成功收场

本文列举了50家创业公司没有什么先后顺序,最后显示,其中21家是独立公司,19家被收购了,4家正在走下坡路,6家已倒闭。但是我希望有更多的公司彻底倒闭,留下实力最强大的公司。公司倒闭也许是重新开始的标志。…

解决:阿里云ECS服务器 远程连接不上、极慢 (主机监控的实现)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 个人低配版的阿里云ECS服务器,突然发现用 Xshell 或者 git-bash 都连接不上... 第一反应发工单去问下为什么,然…

TIOBE 2014年7月编程语言排行榜:仅发布1月,Swift进Top 20!

摘要:TIOBE7月编程语言排行榜发布,本月最值得关注的是,苹果公司在WWDC 2014上推出新的编程语言Swift,发布至今仅一月有余,Swift竟挤进TIOBE排行榜的Top 20,排名第16位。Swift能取得如此骄人的成绩&#xff…

Math对象方法总结(向上取整、向下取整、四舍五入、取随机数,取最大值、取最小值)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

Docker 方式安装 gitlab ( 阿里云ECS )

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.查找镜像: docker search gitlab 2. 拉取镜像: docker pull 镜像名 我选择的是搜索出来的第一个镜像&…

生成多个 SSH-Key 、生成多个公钥和私钥

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 当有多个仓库要同时使用时,需要配置多个公钥、私钥。于是就要先生成多个。 PS:初次生成参见文章:查…

使用Lucid Virtu在有独立显卡的情况下使用Intel硬件加速H.264编码

在硬编码领域,大家都知道CUDA技术对于H.264视频编码速度的提升。然而实际上常见的高清H.264视频压缩都不是用CUDA技术进行硬编码,而是用传统的x264进行软编码,因为通过CUDA硬编码的视频效果远远差于x264软编码压缩出的视频效果。随着Intel Sa…

Intel硬件加速 VS CUDA完胜 视频转码感受

对比试用平台介绍 在体验了酷睿 I5 2300 在3D游戏和多任务、高清播放等方面的突出性能后,今天我利用空闲时间针对酷睿 I5 2300在高清转码方面上与本人的旧平台上对比了一下.,其结果也让人感到震撼。好了闲话不多说了,先来给自己新旧PC做个介绍…

解决 : Shell 脚本 $‘\r‘: command not found 问题

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.经查证,只是 Windows 的空行在 linux 中不识别,故需要用 dos2unix 来转换。 2. 安装 dos2unix,2 …

H.264 软/硬编码器 画质量化分析评测

第1页:前言——视频压缩无处不在H.264 或者说 MPEG-4 AVC 是目前使用最广泛的高清视频编码标准,和上一代 MPEG-2、h.263/MPEG-4 Part4 相比,它的压缩率大为提高,例如和 MPEG-2 相比,同样的压缩后画面品质,h…

解决:Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 执行 mvn clean deploy ... 想把 jar 包更新到私服仓库,报错: Failed to execute goal org.apache.maven.pl…

YV12 and NV12异同,

用videoCapture和IAMStreamConfig拿到的支持的格式列表。发现支持2中图像格式,YV12和NV12。具体是怎么样的内存分布不知道。查了些文档。自己修改了几个图。看出了点端倪YV12先看看 http://www.fourcc.org/yuv.php 上比较标准的定义:YV12 This is the f…

上传 jar 包到 nexus3、上传本地 jar 包到 maven 私服

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.登陆进入 nexus3,打开要上传的仓库目录:maven-releases 2. 选择要上传的本地 jar 包,并填写好对应…