JVM-内存模型

1,程序计数器

1.1 用于存储每个线程下一步将执行的jvm指令

1.2 如该方法是Native的,则不存储任何信息

1.3 Java是多线程机制离不开寄存器

1.4 不会OutOfMemoryError

2.stack (虚拟机栈):

2.1 栈是线程私有的,每个线程在创建时都会创建栈(同时创建,生命周期与线程相同)

2.2 栈中存放当前线程中基本类型变量、操作数栈、动态链接、方法出口等信息;

2.3 每个方法被调用到执行完成的过程就对应着一个栈桢在jvm中入栈到出栈的过程;

2.4 非基本类型对象在栈上仅存一个指向堆的地址

2.5 Java虚拟机栈可能出现两种类型的异常(-Xss 分配每个线程内存大小):

线程请求的栈深度大于虚拟机允许的栈深度,将抛出StackOverflowError。

虚拟机栈空间可以动态扩展,当动态扩展是无法申请到足够的空间时,抛出OutOfMemory异常。

3.heap(堆)

3.1 所有线程共享的区域,在jvm启动时创建,是存储对象实例以及数组的区域,

3.2 堆内存需要GC进行回收,目前收集器多使用分代算法,所以可细分为新生代和老年代

3.3 新生代:

Eden(伊甸园)区:新对象分配内存的地方  (先使用每个线程独享的TLAB(Thread Local Allocation Buffer)分配,不需要加锁)

Survival(幸存者) from & to:eden区内存用完时会发生一次Minor GC(young gc);

第一步:Eden区和Survivalfrom区会把一些仍然存活的对象复制进Survival to区,并清除内存

第二步:Survival to区会把一些存活得足够旧的对象移至年老代

第三步:GC完成后,from区就会和to区发生互换

注意:那么from区 在jvm发生第一次young gc之前应该是空的吧?

3.4 老年代:经过多次垃圾回收依然存活的对象会被转移到老年代 (老年代会发生full gc)

3.5 堆内存不足会发生 OutOfMemoryError

4,方法区

4.1 方法区同堆一样,是所有线程共享的内存区域

4.2 存储类的结构信息。例如运行时常量池,成员变量和方法等。

其中类的元信息存储在元空间中(本地内存),静态常量和常量池并入堆中。

4.3 运行时常量池:方法区的一部分,用于存放编译期间生成的各种字面量和符号引用

4.3 永久代:jdk8真正开始废弃永久代,而使用元空间(Metaspace)

5,本地方法栈

与虚拟机栈发挥的作用十分相似,区别是虚拟机栈执行的是Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的native方法服务,可能底层调用的c或者c++

附:JVM 三大性能调优参数

-Xss规定了每个线程堆栈的大小。一般情况下256K是足够了。影响了此进程中并发线程数大小。

-Xms初始的Heap的大小。

-Xmx最大Heap的大小。

在很多情况下,-Xms和-Xmx设置成一样的。这么设置,是因为当Heap不够用时,会发生内存抖动,影响程序运行稳定性。

三大以外:

-XX:MaxTenuringThreshold :来设置晋升的年龄(去老年代的年龄)

-XX  PertenureSizeThreshold :大于这个参数的对象直接在老年代中分配内存,避免大量复制算法

-XX:PermSize和-XX:MaxPermSize:在jdk1.6及以前常量池分配在永久代中。可限制方法区大小

附图:



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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://blog.csdn.net/u012152619/article/details/4696...
    云狗狗狗狗狗阅读 602评论 1 4
  • 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来...
    join_a922阅读 280评论 0 0
  • 首先来简单介绍一下,整个JVM占用的内存可分为两个大区,分别是线程共享区和线程私有区,线程共享区和JVM同生共死,...
    12313凯皇阅读 300评论 0 1
  • JVM的内存模型如下 主要分5个运行时内存,主要工作为: 1、程序计数器 程序计数器(Program Counte...
    amazingokc阅读 253评论 0 3
  • 壹 浪子方方土 方方土是他的雅号,取自“堃”,是他的名。 方方土是个兵,来自我这样的老百姓。他有接近180的身高...
    菜刀诗人八木阅读 2,371评论 48 84