zoukankan      html  css  js  c++  java
  • JVM 运行时数据区

    翻译人员: 铁锚
    翻译时间: 2013年11月11日
    原文链接: JVM Run-Time Data Areas
    参考地址: JVM运行时是什么样子?

    这是阅读JVM规范时的笔记, 我画了一幅图来帮助自己加深理解:

    图1 JVM运行时数据区
    1. 单线程数据区(非共享)
    从上图可以看出,每个线程都有自己独立的数据区,包括 PC(程序计数器),JVM(方法)栈,以及本地方法栈. 当创建新线程时,这些数据区域将会一并创建.

    程序计数器: 英文名字是 Program Counter Register,简称PC, 用于记录每个线程执行到哪个地方了(可以认为程序是指令的序列,PC记录着下一条(或本条)应该执行的指令的地址).
    JVM方法栈:  包含如下面的图所示的一些栈帧(frame).
    本地方法栈: 英文为 Native Method Stack,顾名思义,适用于供 native方法使用的内存空间,本地方法(native method)指不用Java语言开发的方法,如 C,C++,PB等编译型语言所开发的动态链接库(中的方法).

    2. 所有线程共享数据区
    堆内存 和 方法区 是所有线程共享的数据区.

    堆内存: 英文名称 Heap,是Java编程最频繁使用的内存区域. 其中存储着 数组和对象,当 JVM启动时即创建此内存区域, 垃圾回收主要是指堆内存的回收。
    方法区: Method Area,存储了 运行时常量池,类结构信息(field and method data) 以及 方法,构造器的代码.
    运行时常量池: Runtime Constant Pool, 每一个类或者接口,在其编译后生成的 .class文件中,有一个部分叫做 常量表(constant_pool_table),JVM将class文件加载以后,就解析常量表的内容到运行时常量池. 包括编译时方法中就明确可知的数字值,String值, 以及必须在运行时解析的属性域引用(field reference).

    图2 JVM栈

    JVM栈(Stack)由一个个的 栈帧(Frame)组成,当一个方法被调用时会自动压入一个栈帧到Stack中. 每个栈帧(frame)由局部变量区,操作数栈,以及对常量(池)的引用组成.

    想要了解更详细的信息,建议访问: JVM官方文档.

    相关文章:

    1. JVM运行时是什么样子?
    2. What does a Java array look like in memory?
    3. What can we learn from Java HelloWorld?
    4. A simple Swing GUI example for Observer Design Pattern

  • 相关阅读:
    遇到屏蔽selenium的站点如何突破
    subprocess.Popen stdout重定向内容实时获取
    thinkphp Composer安装指南
    职场片
    php。。。
    多线程相关
    狂刷1000题~~2
    狂刷1000题~~1
    关于eclipse中看不到源码的问题
    一篇看懂++i i++
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467083.html
Copyright © 2011-2022 走看看