JVM-1-内存模型

私有

  • 线程
    • 程序计数器PC(native时为undefined)
    • 虚拟机栈
    • 本地方法栈(结构取决于语言)
  • 虚拟机栈
    • 栈帧(分配后无法改变大小)
      • 本地变量数组(slot)
        • 类方法参数从0开始,实例方法0放this
        • this引用
        • 方法参数
        • 局部变量
        • 返回值地址(returnAddress)
        • 常量池引用 -> 当前类运行时常量池(reference)
      • 操作数栈
        • 类似cpu通用寄存器
  • 本地方法栈
    • JNI调C,本地方法栈即是C栈
    • 本地方法回调java时,线程会回到虚拟机栈
  • HotSpot线程模型
    • Java线程 - 操作系统线程:一一对应
    • Create Java thread, prepare below
      • thread-local storage
      • allocation buffers
      • synchronization objects, stacks and the program counter
    • The native thread is created
    • Once the native thread has initialized it invokes the run() method in the Java thread
    • The native thread confirms if the JVM needs to be terminated as a result of the thread terminating
    • The native thread is reclaimed once the Java thread terminates
  • 动态链接
    • C/C++
      • C/C++ code is typically compiled to an object file then multiple object files are linked together to product a usable artifact such as an executable or dll.
      • During the linking phase symbolic references in each object file are replaced with an actual memory address relative to the final executable.
    • Java
      • 源码编译成字节码时,对变量、方法、类的引用都放在字节码常量池中,作为符号引用存在
      • 将符号引用解析为直接引用的过程,可以发生在验证之后(主动/静态解析),也可以发生在第一次使用时(懒/晚解析)
      • 直接引用以调用者运行时位置的地址偏移形式存在
  • JVM system thread
    • VM thread
      • 执行需要safe point的操作,safe point意味着堆不会发生变化
      • gc,thread stack dumps(线程栈转储),thread suspension(线程挂起),biased locking revocation(偏向锁撤销)
    • Periodic task thread
      • 执行周期性任务,如中断
    • GC threads
    • Compiler threads
      运行时编译(解释还是JIT???)
    • Signal dispatcher thread
      接收发给JVM的信号,并调用相关的JVM方法

共享

    • 新生代(Young Generation)
      • Eden
      • From Survivor
      • To Survivor
    • 老年代(Old/Tenured Generation)
  • 非堆
    • 代码缓存(JIT)
    • 永久代(Java 8被本地内存Meta Space取代)
      • 字符串内部池(字符串表 + Interned Strings:JDK 1.7去普通堆)
      • 符号表(所有运行时常量池符号,引用计数为0时卸载)
      • 方法区
        • 类加载器引用
        • 静态常量(应该是Java 8时去普通堆)
        • 运行时常量池
          • 字面量(string,numeric,含final变量)
          • class reference
          • field reference
          • method reference
          • attribute reference
          • name and type
          • invoke dynamic
        • 属性数据
          • 修饰符,类型,名称,属性(注解)
        • 方法数据
          • 修饰符,返回值,参数类型,名称,属性(注解)
        • 方法代码
          • 字节码
          • 操作数栈大小
          • 局部变量数组大小
          • 局部变量数组
          • 异常表
            • If a method has defined a try-catch or a try-finally exception handler then an Exception Table will be created.
            • 异常处理句柄,起始点,结束点,异常处理代码的PC偏移,被捕捉异常类的常量池索引
  • 关于Interned-Strings的官方说明
    • http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html
    • HotSpot Synopsis
      • In JDK 7, interned strings are no longer allocated in the permanent generation of the Java heap, but are instead allocated in the main part of the Java heap (known as the young and old generations), along with the other objects created by the application.
      • This change will result in more data residing in the main Java heap, and less data in the permanent generation, and thus may require heap sizes to be adjusted.
      • Most applications will see only relatively small differences in heap usage due to this change, but larger applications that load many classes or make heavy use of the String.intern() method will see more significant differences.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • JVM内存模型Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: ...
    光剑书架上的书阅读 2,471评论 2 26
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,511评论 3 83
  • 取云端落下的句点 不濯英亦不濯足 只为养一缸远古的诗 清莲出水之后 擎一片唐宋又一片秦汉 便有了田田之韵 这些还不...
    上林叶阅读 138评论 4 3
  • 晚上11点半,小家伙终于睡着了。 有时候真的很费解,这小小的身躯里,怎么装着这么多能量? 儿子是家里最忙的一员。从...
    树小妞阅读 353评论 0 0