jvm中的年轻代 老年代 持久代 gc

虚拟机中的共划分为三个代:年轻代(Young Generation)、老年代(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。

年轻代:

所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分三个区。一个Eden区,两个Survivor区(一般而言)。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来 对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor去过来的对象。而且,Survivor区总有一个是空的。同时,根据程序需要,Survivor区是可以配置为多个的(多于两个),这样可以增加对象在年轻代中的存在时间,减少被放到年老代的可能。

年老代:

在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。

持久代:

用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=<N>进行设置。

Scavenge GC

一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,对Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。这种方式的GC是对年轻代的Eden区进行,不会影响到年老代。因为大部分对象都是从Eden区开始的,同时Eden区不会分配的很大,所以Eden区的GC会频繁进行。因而,一般在这里需要使用速度快、效率高的算法,使Eden去能尽快空闲出来。

Full GC

对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个对进行回收,所以比Scavenge GC要慢,因此应该尽可能减少Full GC的次数。在对JVM调优的过程中,很大一部分工作就是对于FullGC的调节。有如下原因可能导致Full GC:

· 年老代(Tenured)被写满

· 持久代(Perm)被写满

· System.gc()被显示调用

·上一次GC之后Heap的各域分配策略动态变化

java内存模型 年轻代/年老代 持久区相关推荐

  1. Java内存模型中的三个代

    http://developer.51cto.com/art/200909/153154.htm 本文介绍Java内存模型中的三个代:年轻代,终身代以及永久代.文中图示了各个代的默认排列.本文适用于J ...

  2. java 内存模型堆和本地方法

    文章目录 一.java内存模型堆 1.堆特点 2.堆异常 3.堆的性能调优参数 二.本地方方法 一.java内存模型堆 1.堆特点 堆是用于存放对象的内存区域.因此,它是垃圾收集器(GC)管理的主要目 ...

  3. java虚拟机jvm与Java内存模型(JMM)

    Java内存模型(JMM) Java 内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存.Java 内存模型(JMM) 抽象了线程和主内存之间的关系,就比如说线程之间的共享变量必须存 ...

  4. Java内存模型与GC

    Java内存模型 JVM Spec中的Runtime Data Area分为5个区域:pc register(PC寄存器).java stack(JVM方法栈).native stack(本地方法栈) ...

  5. Java内存模型JMM简单分析

    参考博文:http://blog.csdn.net/suifeng3051/article/details/52611310 http://www.cnblogs.com/nexiyi/p/java_ ...

  6. Java面试题十二:Java内存模型

    前言 Java开发人员并不需要像C/C++开发人员,需要时刻注意内存的分配和释放,而是全权交给虚拟机(JVM)去管理,自然关于内存管理或是内存的模型.结构对Java开发来说就是一个"黑箱&q ...

  7. JAVA内存模型及垃圾回收自我总结

    本文为原创,根据<深入理解java虚拟机>和自己的一些理解进行整理,单纯和看其他人的博客感觉不如自己一点点的画和记录来的印象深刻. JAVA内存模型: 上图中:局部变量表所需的内存在编译期 ...

  8. jvm内存参数配置_JVM内存结构和Java内存模型

    一.JVM 首先看一张JVM结构图(某度找的) 主要看运行时数据区,里边有方法区,堆,java虚拟机栈,本地方法栈,程序计数器.其中方法区和堆是线程共享的,也是JVM进行垃圾收集的区域,java虚拟机 ...

  9. java内存模型浅析_浅谈java内存模型

    不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的.其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改.总结jav ...

最新文章

  1. python语言入门m-「数据挖掘入门系列」Python快速入门
  2. 【C++】42.使用YAML文件进行参数配置、读取与生成YAML文件
  3. 全球及中国天然气终端销售市场产量预测及发展策略分析报告2021年版
  4. 关于UI自动化测试元素定位细节记录
  5. Lua 文件 I/O
  6. 解读阿里巴巴集团的“大中台、小前台”组织战略
  7. 【转】SharePoint 术语表
  8. ios html5 exif,IOS中html5上传图片方向问题解决方法
  9. 跟我一起学Angular2(1)-了解ng模块化
  10. 【cs229-Lecture8】顺序最小优化算法
  11. 搭建hadoop集群,从安装虚拟机开始直到hadoop成功搭建
  12. 2019秋招 | 中国农行软开面试
  13. 土是独体字结构吗_独体结构的字大全
  14. 推荐几个好用串口调试、检测的工具
  15. 安卓手机如何防盗_安卓手机也能像苹果一样!教你如何查看安卓手机电池损耗...
  16. 【ZigBee 系列】| 网关的构成?用 JN51X9 的案例来讲解框架及各部分的功能
  17. 重庆科技学院计算机判断题及答案,晶体光学试题与答案-重庆科技学院
  18. oracle sql获取年月日时分秒,Oracle SQL日期及日期格式获取命令
  19. 软件测试管理工具 madis,测试管理工具TestDirector介绍
  20. Shell脚本是什么?

热门文章

  1. webpack 配置react脚手架(四):路由配置
  2. 用 go 写 WebAssembly入门
  3. 【刷算法】判断链表是否有环以及返回入环节点
  4. 详谈如何定制自己的博客园皮肤
  5. 如何创建高效的业务连续性计划
  6. KALI Linux 系统安装 翻译
  7. 每天一个linux命令(21):find命令之xargs
  8. [转]JAVA泛型通配符T,E,K,V区别,T以及ClassT,Class?的区别
  9. python面向对象之方法
  10. RAC数据库恢复到单实例数据库