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")的话,就不需要这个区域。
- JVM运行时数据区浅析
- java--jvm--jvm运行时数据区
- JVM运行时数据区
- JVM 运行时数据区
- JVM运行时数据区
- JVM运行时数据区
- JVM-运行时数据区
- JVM运行时数据区
- JVM 运行时数据区
- jvm运行时数据区
- jvm运行时数据区
- JVM运行时数据区
- JVM运行时数据区
- JVM运行时数据区
- JVM运行时数据区
- JVM运行时数据区
- JVM运行时数据区
- JVM运行时数据区
- LinkedHashMap源码学习
- Numpy与Pandas排序
- 欢迎使用CSDN-markdown编辑器
- Openstack中qcow2镜像制作
- 关于阻抗匹配
- JVM运行时数据区浅析
- Linux 标准目录结构
- hog检测的一点理解
- 让WordPress主题支持语言本地化
- easyui datagrid 的时间不能正确显示
- mysql索引
- JavaScript模块规范,AMD规范和CMD规范
- Android API Guides---Localizing with Resources
- android 6.0 and sdk23, when used xx.so has text relocations. bug