Java内存区域分析
2016-04-02 11:13
429 查看
程序计数器
指令运行的指示器.每一个线程都有独立的程序计数器,互无影响,我们称这类区域为线程私有的内存.
运行Java方法,计数器记录的是正在运行的虚拟机字节码指令地址;假设运行的是native方法,这个计数器为空.
此内存区域唯一一个没有规定不论什么OutOfMemoryError的区域.
虚拟机栈
Java虚拟机栈也是线程私有的,它的生命周期与线程同样.虚拟机栈描写叙述的是Java方法运行的内存模型:每一个方法在运行的时候都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息.
假设线程请求的深度大于虚拟机深度,将抛出StackOverflowError异常;假设虚拟机能够动态扩展,扩展时无法申请到足够的内存,将抛出OutOfMemoryError.
本地方法栈
和虚拟机栈很类似,他们之间的差别是本地方法栈是为虚拟机使用的native方法服务的,而虚拟机栈是为虚拟机运行Java方法服务的.Java堆
Java堆是虚拟机管理的最大的一块内存.被全部线程共享的一块区域.
此内存唯一目的是存放对象的实例.
垃圾收集管理主要区域.
方法区
方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机载入的类信息,常量,静态变量,即时编译器编译后的代码等数据.运行时常量池
运行是常量池是方法区的一部分.用于存放编译期生成的各种字面量和符号引用.
运行时常量池和Class文件常量池不一样.Java语言不要求编译时产生Class文件常量才干进入运行时常量池,运行期间也可能将新的常量放入池中.这样的特性被开发者用的多便是String类的intern()方法.
相关文章推荐
- JAVA的静态变量、静态方法、静态类
- 自己写一个java.lang.String
- Java中DBCP数据库连接池方式
- java写文件
- eclipse配置mybatis 的xml提示
- Eclipse 使用RecyclerView及CardView注意事项:
- JAVA 抽象路径
- java 泛型的使用
- 从头学习JAVA(四)
- java并发 使用ScheduledExecutor的温室控制器--thinking in java 21.7.5
- 兔子--R.java丢失原因及解决的方法
- Android—JNI调用简单实例解析/Eclipse无添加NDK的选项/JNI返回数组
- Java字节码浅析
- java基本知识点(二)
- java反射——获取类的方法信息
- Struts原理最经典的回答面试官的题目
- SpringMVC+Mybatis整合实现简单权限控制系统代码
- Java技术_Java千百问(0018)_switch如何使用
- java动态代理实现原理
- 一个简单的java缓存实现