JVM各个区域详解

一、JVM的结构详解

1、堆

Java堆是所有线程共享的。是虚拟机启动的时候创建的。存放的是对象的实例和数组。所占内存最大。分为新生代(Young区)、老年代(Old区)。新生代又分为Eden区、Servior区。Servior区又分为From space区和To space区。Eden区和Servior区的内存比例为8:1.当扩展内存大于可用内存的时候,会抛出OOM。

2、方法区

方法区是所有线程共享的。用于存储已经被虚拟机加载的类信息、常量、静态变量等数据。又称为非堆(Non-Heap)。方法区又称为“永久代”。GC很少在这个区域进行,但不代表不会回收。这个区域回收目标主要是针对常量池的回收和对类型的卸载。当内存申请大于实际可用内存的时候,会抛出OOM。

3、本地方法栈

本地方法栈是线程私有的。与Java虚拟机栈类似,但是不是为Java方法(字节码)服务,而是为本地非Java方法服务。也会抛出StackOverflowError和OOM

4、程序计数器

线程私有的。是一块较小的内存,是当前线程所执行的字节码的行号指示器。是Java虚拟机规范中唯一没有规定OOM(OutOfMemoryError)的区域。

5、Java虚拟机栈

线程私有的。生命周期和线程相同。是Java方法执行的内存模型。执行每个方法都会创建一个栈帧,用于存储局部变量和操作数(对象引用)。局部变量所需要的内存空间大小在编译期间完成分配。所以栈帧的大小是不会改变的。存在两种异常情况:若线程请求深度大于栈的深度,会抛出StackOverflowError。若栈在动态扩展的时候无法请求足够的内存,会抛出OOM。

二、垃圾回

Minor GC, Full GC触发的条件

1、Minor GC 触发的条件

当Eden区满的时候,会触发Minor GC

2、Full GC触发的条件

(1)调用System.gc的时候,系统建议执行Full GC,但是不是必然执行的。

        此方法只是建议使用,很多情况下会触发Full GC,从而增加GC的频率,增加了服务间歇性停顿的次数。建议能不使用此方法就别使用,让虚拟机自己去管理它的内存,通过-XX:DisableExplicitGC来禁止RMI调用System.GC

(2)老年代空间不足的时候会触发Full GC

        当新生代对象没有通过GC回收之后转入到老年代或者创建大对象,大数组的时候老年代才会出现空间不足的现象,此时会执行Full GC。如果在执行Full GC之后空间还是不足,就会抛出java.lang.OutOfMemoryError: Java heap space错误。

        为了避免上述情况出现而引起的Full GC,虚拟机调优的时候尽量做到让对象在Minor GC(新生代垃圾回收)阶段被回收,让对象在新生代多存活一段时间,不要创建过大的对象和数组。

(3)方法区空间不足的时候会触发Full GC

        方法区在JDK1.7也称为永久代,主要存放一些class的信息、常量、静态变量等数据,当系统中要加载的类、反射的类和调用的方法比较多的时候,永久代可能会被占满,在没有配置采用CMS GC的情况下也会去触发执行Full GC。如果经过Full GC之后对象仍然不能回收,那么JVM就会抛出java.lang.OutOfMemoryError: PermGen space。

        为了避免永久代(Perm Gen)被沾满触发Full GC的现象,可以采用的方法是增大永久代(Perm Gen)的空间或者转为使用CMS GC的方法。

(4)通过Minor GC后进入到老年代的平均大小大于老年代的可用内存的时候会触发Full GC

        Hotspot为了避免由于新生代对象晋升到老年代导致老年代空间不足的现象,在进行Minor GC(新生代垃圾回收)的时候,做个一个判断,如果之前统计所得到的Minor GC晋升到老年代的平均大小大于老年代的剩余的空间,那么就会触发Full GC。

        例如:当程序第一次触发Minor GC的时候,有6M的对象晋升到了老年代,那么当下一次Minor GC的时候,首先会去检查老年代剩余的空间大小是否小于6M,如果小于6M,则会去执行Full GC。

(5)由Eden区、From Space区向To Space区复制的时候,对象大小大于To Space可用内存,则把该对象转存到老年代,并且老年代的可用内存小于该对象的大小的时候会触发Full GC


(6)堆中分配很大的对象导致触发Full GC

        大对象主要是指大量连续的内存空间的java 对象,例如很长的数组,此种对象会直接进入到老年代。而老年代虽然有很大的剩余空间,但是无法找到足够大的连续空间来分配给当前对象,此种情况下就会触发JVM进行Full GC

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • http://www.cnblogs.com/angeldevil/p/3801189.html值得一看 Clas...
    snail_knight阅读 1,409评论 1 0
  • 一 、java虚拟机底层结构详解 我们知道,一个JVM实例的行为不光是它自己的事,还涉及到它的子系统、存储区域、...
    葡萄喃喃呓语阅读 1,472评论 0 4
  • 原文阅读 前言 这段时间懈怠了,罪过! 最近看到有同事也开始用上了微信公众号写博客了,挺好的~给他们点赞,这博客我...
    码农戏码阅读 5,946评论 2 31
  • JVM架构 当一个程序启动之前,它的class会被类装载器装入方法区(Permanent区),执行引擎读取方法区的...
    cocohaifang阅读 1,646评论 0 7
  • 坚持下去,并不是我们真的足够坚强,而是我们别无选择。并不是我们喜欢一件事情就可以把它做好,而是我们在做的时候,学会...
    无名记录者阅读 234评论 -1 2