美文网首页Java
Java运行时数据区

Java运行时数据区

作者: 打铁大师 | 来源:发表于2018-04-20 16:17 被阅读1次

    原文戳这里JVM Run-Time Data Areas

    下面是我阅读JVM规范的笔记。

    JVM-runtime-data-area.jpg

    1.单个线程的数据区(不共享)

    每个单独的线程的数据区都包括程序计数器(Program Counter Register),虚拟机栈(Java Virtual Machine Stacks),本地方法栈(Native Method Stack)。当一个新线程被创建时,这些数据区会被一同创建。

    程序计数器(Program Counter Register)被用来控制每个线程的执行,记录每个线程执行到哪了。

    虚拟机栈(Java Virtual Machine Stacks)包含了栈帧,下面会给出视图。

    本地方法栈(Native Method Stack)用来支持native方法,非java语言的方法。

    2.所有线程共享的数据区

    所有线程共享堆和方法区

    (Heap)是我们最频繁处理的数据区。它储存了数组和对象。当虚拟机启动时就会创建这块数据区。垃圾回收GC主要在堆中工作。

    方法区(Method Area):它存储的是已被虚拟机加载的类信息、常量(从JDK7开始已经移至堆内存中)、静态变量等数据。

    运行时常量池(Runtime Constant Pool):每一个类或者接口,在其编译后生成的 .class文件中,有一个部分叫做 常量表(constant_pool_table),JVM将class文件加载以后,就解析常量表的内容到运行时常量池。

    JVM-Stack.png

    栈包含了若干个栈帧,当一个方法被调用时,一个栈帧就会被推入栈中。一个栈帧包含了局部变量数组(Local Variable Array),操作数栈( Operand Stack),常量池引用(Reference to Constant Pool)三部分。

    有关更多信息,请到JVM规范官网。

    推荐阅读 JVM入门——运行时数据区

    相关文章

      网友评论

        本文标题:Java运行时数据区

        本文链接:https://www.haomeiwen.com/subject/dgtzkftx.html