您的位置:首页 > 编程语言 > Java开发

Java虚拟机进阶之二:运行时数据区内存划分

2014-03-30 17:17 351 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: