深入理解Java 虚拟机(周志明)笔记(二)——Java数据分区
2016-03-07 23:58
483 查看
JVM运行时(一个处理器(的一个核)执行一条线程)数据分区
1.线程共享的区(数据被处理器各线程共享,即各线程共有的区)
a.方法区(Method Area):存储已被虚拟机加载的类信息、常量、静态变量、即使编译器编译后的代码。(Class文件信息)
常量池:存放编译时生成的各种字面量和引用。在类加载后数据进入运行时常量池。 例如通过 String str=“aba” 参数的字符串。
运行时常量池:存储运行时产生的常量数据或引用。 如通过String类的intern()方法产生新的常量
b.堆(Heap):1.对大多数应用堆是虚拟机所管理的内存中最大的一块
2.存储所有的对象实例
3.Java堆是垃圾收集器管理的主要区域,因此也被称为“GC堆”。
c.执行引擎:
d.本地库接口
e.本地方法库:
2.线程私有的区(数据被各处理器线程私有,其他线程不可访问,即各线程都有自己独占的区,生命周期与线程相同)
a.虚拟机栈(VM Stack):1.为虚拟机执行Java方法(字节码)服务
2.每个方法执行时需存储的数据(局部变量表,操作数栈,动态链接,方法出口) 局部数据
局部变量表:编译时可知的基本数据类型和引用类型
方法所需局部变量空间大小在编译时计算,运行时不变
异常状况:1.StackOverflowError:线程请求的栈深度大于虚拟机允许的深度
2.OutOfMemoryError:无法申请到足够的内存
b.本地方法栈(Native Method Stack):1.为虚拟机执行Native方法服务
2.使用方法与虚拟机栈类似
c.程序计数器:当前线程嗦执行的字节码的行号,字节码解释器通过修改该值来进行字节码指令(类似于Cpu的程序计数器).
3.直接内存:1.由Native函数库直接分配堆外内存
2.应用:NIO类 使用一种基于通道和缓冲区的I/O方式,分配直接内存,通过在堆中存储DirectByteBuffer对象作为直接内存的引用。
这样避免了在堆和Native堆中来回复制数据
1.线程共享的区(数据被处理器各线程共享,即各线程共有的区)
a.方法区(Method Area):存储已被虚拟机加载的类信息、常量、静态变量、即使编译器编译后的代码。(Class文件信息)
常量池:存放编译时生成的各种字面量和引用。在类加载后数据进入运行时常量池。 例如通过 String str=“aba” 参数的字符串。
运行时常量池:存储运行时产生的常量数据或引用。 如通过String类的intern()方法产生新的常量
b.堆(Heap):1.对大多数应用堆是虚拟机所管理的内存中最大的一块
2.存储所有的对象实例
3.Java堆是垃圾收集器管理的主要区域,因此也被称为“GC堆”。
c.执行引擎:
d.本地库接口
e.本地方法库:
2.线程私有的区(数据被各处理器线程私有,其他线程不可访问,即各线程都有自己独占的区,生命周期与线程相同)
a.虚拟机栈(VM Stack):1.为虚拟机执行Java方法(字节码)服务
2.每个方法执行时需存储的数据(局部变量表,操作数栈,动态链接,方法出口) 局部数据
局部变量表:编译时可知的基本数据类型和引用类型
方法所需局部变量空间大小在编译时计算,运行时不变
异常状况:1.StackOverflowError:线程请求的栈深度大于虚拟机允许的深度
2.OutOfMemoryError:无法申请到足够的内存
b.本地方法栈(Native Method Stack):1.为虚拟机执行Native方法服务
2.使用方法与虚拟机栈类似
c.程序计数器:当前线程嗦执行的字节码的行号,字节码解释器通过修改该值来进行字节码指令(类似于Cpu的程序计数器).
3.直接内存:1.由Native函数库直接分配堆外内存
2.应用:NIO类 使用一种基于通道和缓冲区的I/O方式,分配直接内存,通过在堆中存储DirectByteBuffer对象作为直接内存的引用。
这样避免了在堆和Native堆中来回复制数据
相关文章推荐
- 深入理解Java 虚拟机(周志明)笔记(一)——Java虚拟机发展史
- LeetCode : Merge k Sorted Lists [java]
- Struts2 用 s:if test 判断属性和字符串相等时 注意双引号和单引号的使用 《转》
- 为什么JAVA的垃圾回收机制无法避免内存泄漏
- 7. SpringMVC 数据验证
- Java [Leetcode 144]Binary Tree Preorder Traversal
- 编写web遇到javabean的一个错误
- SpringMVC Controller 介绍
- 修改JAVA_HOME无效,java版本保持不变的问题解决
- java中CAS算法保证原子性 无锁编程
- 【Java】面向对象思想以及类与对象的关系
- eclipse项目遇到红色叹号,该如何解决?
- Maven的安装和Eclipse集成
- Java线程操作方法
- 6. SpringMVC注解类实践例子2
- 判断字符串是否为字母或数字【java】
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
- 构建一个Scheduling Tasks
- 5. SpringMVC注解类实践例子1
- 重温javase—MySQL数据库基础