Java虚拟机进阶之二:运行时数据区内存划分
2014-03-30 17:17
351 查看
Java虚拟机进阶之二:运行时数据区内存划分
目标:
1, 了解内存是划分为哪五部分的?
2, 每一部分具体是做什么的。
Note: 本部分的内容信息容量较大,细节较多。文章将从浅到深来介绍。
第一部分:各数据区线程共享/线程独立情况
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/20/84e72bad51f4cdfe165664bf49e1bb77.jpg)
线程共享:
方法区(Method Area),堆(heap)
线程独立:
虚拟机栈(Java VM Stack)本地方法栈(Native Stack)程序计数器(Program Counter Register)
第二部分:各数据区功能
方法区:存储已被虚拟机加载的类的信息,常量,静态变量,及时编译后的代码
堆:存放对象实例
虚拟机栈:方法执行的内存模型,创建栈帧,存储变量及方法出口
本地方法栈:执行Native方法的内存模型
程序计数器:虚拟机多线程切换,记录当前程序所执行的字节码的行号
第三部分:更多的细节
请仔细研读第三部分,这部分涉及到深入的内容,可以参考Java Vm Specification
可以点击图片放大。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/20/edf1a22683b27d94385a1dd7234e7d01.jpg)
For More Details:
1, String intern()
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/20/dd2fbcf7b4a359f4c7f6487f22b26a5e.jpg)
2,常量池(Constant Pool Table) vs 运行时常量池(Runtime Constant Pool)
根据官方文档:
运行时常量池(Runtime Constant Pool)是每一个类或接口的常量池(Constant_Pool,
§4.4)的运行时表示形式,它包括了若干种不同的常量:从编译期可知的数值字面量到必须运行
期解析后才能获得的方法或字段引用。运行时常量池扮演了类似传统语言中符号表(Symbol
Table)的角色,不过它存储数据范围比通常意义上的符号表要更为广泛。
本文出自 “小新专栏” 博客,请务必保留此出处http://mikewang.blog.51cto.com/3826268/1386995
目标:
1, 了解内存是划分为哪五部分的?
2, 每一部分具体是做什么的。
Note: 本部分的内容信息容量较大,细节较多。文章将从浅到深来介绍。
第一部分:各数据区线程共享/线程独立情况
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/20/84e72bad51f4cdfe165664bf49e1bb77.jpg)
线程共享:
方法区(Method Area),堆(heap)
线程独立:
虚拟机栈(Java VM Stack)本地方法栈(Native Stack)程序计数器(Program Counter Register)
第二部分:各数据区功能
方法区:存储已被虚拟机加载的类的信息,常量,静态变量,及时编译后的代码
堆:存放对象实例
虚拟机栈:方法执行的内存模型,创建栈帧,存储变量及方法出口
本地方法栈:执行Native方法的内存模型
程序计数器:虚拟机多线程切换,记录当前程序所执行的字节码的行号
第三部分:更多的细节
请仔细研读第三部分,这部分涉及到深入的内容,可以参考Java Vm Specification
可以点击图片放大。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/20/edf1a22683b27d94385a1dd7234e7d01.jpg)
For More Details:
1, String intern()
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/20/dd2fbcf7b4a359f4c7f6487f22b26a5e.jpg)
2,常量池(Constant Pool Table) vs 运行时常量池(Runtime Constant Pool)
根据官方文档:
运行时常量池(Runtime Constant Pool)是每一个类或接口的常量池(Constant_Pool,
§4.4)的运行时表示形式,它包括了若干种不同的常量:从编译期可知的数值字面量到必须运行
期解析后才能获得的方法或字段引用。运行时常量池扮演了类似传统语言中符号表(Symbol
Table)的角色,不过它存储数据范围比通常意义上的符号表要更为广泛。
本文出自 “小新专栏” 博客,请务必保留此出处http://mikewang.blog.51cto.com/3826268/1386995
相关文章推荐
- Java虚拟机学习笔记(一)——JVM运行时数据区和常见内存错误
- Java虚拟机学习笔记-运行时数据区(内存区)
- Java虚拟机运行时数据区域的划分
- 详解Java虚拟机管理的内存运行时数据区域
- Java虚拟机管理的内存运行时数据区域解释
- java虚拟机之一内存运行时数据区域解释
- Java虚拟机运行时数据区域划分
- Java运行时数据区内存划分
- [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义
- java虚拟机 内存运行时数据区域
- Java虚拟机(JVM)运行时内存区域划分详解
- Java虚拟机管理的内存运行时数据区域解释
- Java虚拟机管理的内存运行时数据区域解释
- Java虚拟机运行时数据区域划分
- 虚拟机中的内存是如何划分的(运行时数据区域)?
- Java虚拟机管理划分的运行时数据区域
- 《深入理解Java虚拟机》(二)java虚拟机运行时数据区
- Java虚拟机 运行时数据区
- Java内存区域与内存溢出异常——运行时数据区域