Java虚拟机进阶之二:运行时数据区内存划分
Java虚拟机进阶之二:运行时数据区内存划分
目标:
1, 了解内存是划分为哪五部分的?
2, 每一部分具体是做什么的。
Note: 本部分的内容信息容量较大,细节较多。文章将从浅到深来介绍。
第一部分:各数据区线程共享/线程独立情况
线程共享:
方法区(Method Area),堆(heap)
线程独立:
虚拟机栈(Java VM Stack)本地方法栈(Native Stack)程序计数器(Program Counter Register)
第二部分:各数据区功能
方法区:存储已被虚拟机加载的类的信息,常量,静态变量,及时编译后的代码
堆:存放对象实例
虚拟机栈:方法执行的内存模型,创建栈帧,存储变量及方法出口
本地方法栈:执行Native方法的内存模型
程序计数器:虚拟机多线程切换,记录当前程序所执行的字节码的行号
第三部分:更多的细节
请仔细研读第三部分,这部分涉及到深入的内容,可以参考Java Vm Specification
可以点击图片放大。
For More Details:
1, String intern()
2,常量池(Constant Pool Table) vs 运行时常量池(Runtime Constant Pool)
根据官方文档:
运行时常量池(Runtime Constant Pool)是每一个类或接口的常量池(Constant_Pool,
§4.4)的运行时表示形式,它包括了若干种不同的常量:从编译期可知的数值字面量到必须运行
期解析后才能获得的方法或字段引用。运行时常量池扮演了类似传统语言中符号表(Symbol
Table)的角色,不过它存储数据范围比通常意义上的符号表要更为广泛。
本文出自 “小新专栏” 博客,请务必保留此出处http://mikewang.blog.51cto.com/3826268/1386995
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。