你了解JVM内存结构和Java内存模型吗

在面试中经常会遇到Java内存模型和JVM内存结构这两个问题,相信也有不少人对这两个概念感到模糊,今天我们就来聊聊这两个概念。看看究竟什么是Java内存模型、什么是JVM内存结构。

Java内存模型

即Java Memory Model(JMM),是一种符合内存模型规范的,屏蔽了各种硬件和操作系统访问差异的,保证Java在不同平台下操作内存时的结果一致性的机制和规范(约定),其目的是为了解决有多线程利用共享内存通信时存在的原子性、可见性及有序性问题。
为了保证共享内存的正确性(原子性、可见性和有序性),内存模型定义了共享内存系统中多线程读写操作的行为规范。同时提供了synchronized、volatile、concurrent包下等原语供开发者使用。
参考内容求你了,再问你Java内存模型的时候别再给我讲堆栈方法区了

JVM内存结构

由于不同JVM的实现可能不同,此处以Java 8来分析JVM内存结构

  • PC Register 即 program counter register
  • JVM Stacks
  • Heap
  • Method Area
  • Run-Time Constant Pool
  • Native Method Stack

其中PC Register、Stacks、Native Method Stacks是线程级别的,为线程私有。而Heap、Method Area及Run-time Constant pool是JVM级别的,为所有线程共享。下面我们逐一说明。

  1. PC Register
    官方介绍中有如下说明,Each JVM thread has their own pc register(即计数器是线程私有的)。若当前线程正在执行的方法是非native的,则程序计数器会持有当前方法的JVM指令集地址,也就是returnAddress类型变量(namely is returnAddress),原文是the pc register contains the address of the Java Virtual Machine instruction currently being executed
    若当前线程正在执行native方法,程序计数器则为null。
  2. JVM Stacks
    官方介绍中有如下说明,Each Java Virtual Machine thread has a private Java Virtual Machine stack, created at the same time as the thread. 即Stack是随着JVM线程启动而启动的。另外,Stacks中存储栈帧(Frame),JVM 栈不会直接操作变量,只参与对栈帧的压栈和出栈。
  3. Heap
    在官方介绍中说明了堆内存是JVM共享的,且随着JVM启动而启动,原文如下:
    The Java Virtual Machine has a heap that is shared among all Java Virtual Machine threads. The heap is the run-time data area from which memory for all class instances and arrays is allocated. The heap is created on virtual machine start-up.
  4. Method Area
    方法区也是随着JVM启动而启动的,在Java 8 的实现中逻辑上是堆的一部分。主要用来存储类的结构(这就涉及到Java对象模型,感兴趣的可以自己了解),运行时常量池、方法、类的初始化方法等。原文如下:
    The method area is created on virtual machine start-up. Although the method area is logically part of the heap.The Java Virtual Machine has a method area that is shared among all Java Virtual Machine threads. It stores per-class structures such as the run-time constant pool, field and method data, and the code for methods and constructors, including the special methods (§2.9) used in class and instance initialization and interface initialization.
  5. Run-Time Constant Pool
    运行时常量池是随着类或接口创建时创建的。原文如下:
    Each run-time constant pool is allocated from the Java Virtual Machine's method area (§2.5.4). The run-time constant pool for a class or interface is constructed when the class or interface is created (§5.3) by the Java Virtual Machine.
  6. Native Method Stacks
    本地方法栈,通常来说是常规栈的一部分。随着线程创建而创建。

JVM结构图如下


Java8JVM.png

至此我们了解了JVM内存结构和Java内存模型的区别,并介绍了JVM内存结构及各部分的生命周期。相信大家再遇到这两个问题的时候不会在犯迷糊了。

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