JVM运行时数据区介绍

来源:互联网 发布:python遍历字符串索引 编辑:程序博客网 时间:2024/06/06 07:19

         文中的内容摘自周志明所著的《深入理解java虚拟机:JVM高级特性与最佳实践第2版》

                                   JVM运行时数据区

                     

        程序计数器

        它可以看做是当前线程做执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等都需要依赖这个计数器完成。

          java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,这个内存区域是线程私有的。

           java虚拟机栈

           java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是java方法执行的内存模型。每个方法在执行的同时都会创建一个栈帧。每个方法从调用到完成的过程,都对应着一个栈帧在虚拟机栈中的入栈到出栈的过程。

        本地方法栈

        本地方法栈和虚拟机栈所发挥的作用是非常相似的,不同的是,虚拟机栈为虚拟机执行java方法服务,而本地方法栈则为虚拟机使用到的Native方法服务

        java堆

        Java对是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可。在实现时,可以实现成固定大小的,也可以是可扩展的。

        方法区

        方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、及时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载

        

原创粉丝点击