JVM运行时数据区浅析

来源:互联网 发布:大数据股票毕业设计 编辑:程序博客网 时间:2024/06/14 16:49

         我们知道最为c/c++开发者,很多时候我们会在开发过程中,需要自己去管理内存的申请与释放,不但麻烦,而且陷阱重重。

JVM(java virtual machine)自身实现了内存管理机制,省去了我们去手动管理内存的复杂度,但同时真因为其内存管理对开

发者来讲是透明的,所以一旦遇到java程序的运行内存泄露,很难排查,除非你对虚拟机使用内存的机制了若指掌。

      

运行时数据区在JVM运行期间主要分为如下几个分区(参考java虚拟机规范 javaSE7)

1)PC寄存器(The pc Register)

     由于JVM是支持多线程的,所以每个线程都会维护一个自己私有的PC寄存器,以保存当前的线程正在执行的字节码指令地址(在规范

中指出,对于native方法,PC的内容是undefined)。


2)JAVA虚拟机栈

    每个JAVA虚拟机线程都会维护自己的虚拟机栈,它是和线程的生命周期同步的,虚拟机栈的主要用来存储一些局部变量、过程结果和

方法的调用和返回。JAVA虚拟机规范指出,虚拟机栈的内存空间不一定要连续。


3)JAVA堆

    堆是JAVA虚拟机中各个线程共享的内存区域,也是所有类的对象实例和数组对象存放的地方,它会在虚拟机启动的时候被创建,最后伴

随虚拟机的退出一起销毁。(该区域中存储中所有由GC管理的对象)


4)方法区

   在JAVA虚拟机中,方法区是供各虚拟机线程共享的内存区,它存储了每个类的结构信息,譬如,运行时常量池、字段、方法数据、构造函数、

普通方法的字节码内容等。方法区在虚拟机创建时一起创建,生命周期和虚拟机同步的。


5)运行时常量池

    该区域实际上创建自方法区的区域,主要保存一些java类或接口的常量,譬如字面值常量或运行时确认的常量引用。


6)本地方法区

    这个是JAVA虚拟机支持调用其他语言方法的一种技术手段,native方法一般都是使用其他语言实现的,如果JAVA虚拟机

不支持native方法,也不使用传统栈(例如"C stack")的话,就不需要这个区域。

0 0
原创粉丝点击