关于jvm内存代,看到这篇文章,转发下

链接地址 ---多谢

虚拟机中的共划分为三个代:年轻代(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的各域分配策略动态变化

看一段日志:

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask
(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run
(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Exception in thread "http-bio-17788-exec-74"
java.lang.OutOfMemoryError: PermGen space
Exception in thread "http-bio-17788-exec-75"
java.lang.OutOfMemoryError: PermGen space
Exception in thread "http-bio-17788-exec-76"
java.lang.OutOfMemoryError: PermGen space

明显可以看出是老年代的内存溢出,说明在容器下的静态文件过多,比如编译的字节码,jsp编译成servlet,或者jar包。

解决此问题,修改jvm的参数 permsize即可,permsize初始默认为64m。

jvm内存参数

-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
-vmargs 说明后面是VM的参数,所以后面的其实都是JVM的参数了
-Xms128m JVM初始分配的堆内存
-Xmx512m JVM最大允许分配的堆内存,按需分配
-XX:PermSize=64M JVM初始分配的非堆内存
-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配

堆(Heap)和非堆(Non-heap)内存

按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。
 可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的

原文地址:

http://www.cnblogs.com/yaoyuan23/p/5587548.html

转载于:https://www.cnblogs.com/blogwangwang/p/9608168.html

JVM年轻代(young generation)老年代(old generation tenured)持久代(permanent generation)GC...相关推荐

  1. jvm对象从新生代到老年代_JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代...

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...

  2. jvm对象从新生代到老年代_一文搞懂JVM新生代、老年代和永久代

    Java堆是垃圾收集器管理的主要区域,因此很多时候也被称为"GC堆". 从内存回收角度看,由于现在收集器基本都采用分代收集算法,所以Java堆中还可以细分为:新生代和老年代.再细致 ...

  3. 深入jvm之对象如何进入老年代

    简介 我们知道,整个jvm堆分为新生代和老年代,新生代的对象在进行垃圾回收的时候,可能会进入到老年代,那么我们知道年轻代的对象是如何进入到老年代的吗? 年轻代空间分配 新生代分成Eden,Surviv ...

  4. jvm详解 - 新生代与老年代

    *************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 J ...

  5. jvm性能调优 - 10白话年轻代数据晋升老年代规则及老年代回收算法

    文章目录 Pre 躲过15次GC之后进入老年代 动态对象年龄判断 大对象直接进入老年代 Minor GC后的对象太多,无法放入Survivor区怎么办? 老年代空间分配担保规则 老年代垃圾回收算法 小 ...

  6. JVM中的新生代和老年代(Eden空间、两个Survior空间)

    现有的主流JVM分别是HotSpot和JRockit,主要研究对象也是这两个.这篇文章里,我们只研究HotSpot,也就是所谓的Sun JVM.目前阶段,Sun的GC方式主要有CMS和G1两种.考虑到 ...

  7. jvm对象从新生代到老年代_深入理解jvm内存模型以及gc原理

    整体架构 Jvm = 类加载器 + 执行引擎 + 运行时数据区域 类加载器 ● 作用 类加载器是将编译好的class文件加载到内存中,并进行验证.初始化等步骤,形成能被jvm直接使用的类型. ● 加载 ...

  8. JVM中的新生代和老年代

    JVM在程序运行过程当中,会创建大量的对象,这些对象,大部分是短周期的对象,小部分是长周期的对象,对于短周期的对象,需要频繁地进行垃圾回收以保证无用对象尽早被释放掉,对于长周期对象,则不需要频率垃圾回 ...

  9. 老年代的更新机制_如何理解Java GC机制

    Java GC机制 简单来说就干了3件事 确定哪些内存需要回收,确定什么时候需要执行GC,如何执行GC 确定哪些内存需要回收 垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还&quo ...

  10. jvm中年轻代,老年代

    jvm中新生代,老年代 一.年轻代 二.老年代 三.永久代 Java中的Heap(堆)是JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象. 由于Java堆是垃圾收集器管理的主要区域,因此 ...

最新文章

  1. 学习嵌入式系统需要具备的条件、方法及步骤
  2. PhpStorm代码格式化设置
  3. eclipse插件egit安装使用
  4. PHP、JS 中 encode/decode
  5. 【搜索引擎Jediael开发笔记】v0.1完整代码
  6. Leetcode 2 两数相加 Python
  7. 面向对象思想精华总结
  8. hdu 2844 Coins (多重背包+二进制优化)
  9. MySQL数据类型有哪些?
  10. java后台开发必备的9大类基础工具,你集齐了?
  11. Pytorch GAN实战 MINIST手写数字识别分布解析
  12. 三星Galaxy之父×××网秦,网秦安全能否脱胎换骨?
  13. 和风天气获取天气情况
  14. 坚定文化新自信 提升文化软实力
  15. 如何实现1分钟写一个API接口
  16. github上实用、常用的插件和库
  17. s32k144 isystem linux,S32k144 简易 Bootloader
  18. 一款功能强大的Web接口和网页测试工具
  19. 互联网裁员下的人生百态,你了解多少
  20. こっそり==そっくり==たっぷり==5分钟--完全掌握6个日语N2常考副词。---路得老师学日语...

热门文章

  1. SSM米米商城项目笔记一(数据库表创建和项目搭建)
  2. CADD-- 一种用于对整个基因组序列中的疾病原因突变进行排序的新方法 《自然遗传学》
  3. C语言复习第一周归纳总结(简介~switch开关语句)
  4. Python pip的使用(安装、卸载、升级)
  5. PowerBuilder 窗口透明SetLayeredWindowAttributes详解
  6. 不宁腿的巨大危害你可能不知道!
  7. postgis 栅格数据_PostgreSQL raster(栅格数据) st_value 优化举例
  8. 服务器网卡收包性能测试
  9. DvaJs:React数据流解决方案
  10. BZOJ 1072: [SCOI2007]排列perm [DP 状压 排列组合]