JVM内存划分
来源:互联网 发布:网络服务器租用业务员 编辑:程序博客网 时间:2024/05/20 04:29
参考:
http://www.importnew.com/18961.html
http://www.cnblogs.com/dolphin0520
http://www.cnblogs.com/sunada2005/p/3577799.html
内存分区示意图:
一、运行时内存分区
1.程序计数器
记录下一条指令地址。
2.本地方法栈
为执行本地方法(Navtive方法)服务
3.Java栈(虚拟机栈)
为执行方法服务,存放栈帧。执行一个方法时,即创建栈帧,执行完毕后栈帧退出栈。
图:
1)局部变量表:存放方法中的局部变量。注,基本类型直接存值,引用类型存对象的引用
2)操作数栈:计算用的操作数
3)指向运行时常量池的引用:类中的常量
4)方法返回地址:一个方法执行完毕时,返回之前调用它的地方。
4.堆
年轻代:
所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分三个区。一个Eden区,两个 Survivor区(一般而言)。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个 Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor去过来的对象。而且,Survivor区总有一个是空的。同时,根据程序需要,Survivor区是可以配置为多个的(多于两个),这样可以增加对象在年轻代中的存在时间,减少被放到年老代的可能。
年老代:
在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。
持久代(方法区):
用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如hibernate 等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=<N>进行设置。
5.方法区(持久代)
- JVM内存区域划分
- JVM内存划分
- 浅析JVM内存划分
- 学习JVM:内存划分
- jvm内存区域划分
- JVM内存划分
- JVM内存区域划分
- jvm 内存区域划分
- JVM内存区域划分
- JVM的内存划分
- JVM内存划分
- JVM内存划分
- jvm内存区域划分
- JVM内存区域划分
- JVM虚拟机-内存划分
- JVM内存划分
- JVM的内存划分
- jvm内存划分
- [OpenGL] glut库的安装
- PowerDesigner Unable to list the users 解决办法
- docker安装运行apache2服务器做图片服务器
- 单目相机标定--转自微信机器视觉
- java关键字及其作用
- JVM内存划分
- js通过map和set判断数组中的对象的某个属性是否有重复
- 日拱一卒——160个crackme之#5
- 基于 Beaglebone Black嵌入式linux系统u-boot编译 启动
- go语言之结构体数组转为string字符串
- ffmpeg解码实时流出错"non-existing PPS 0 referenced,decode_slice_header error,no frame!"
- 行业软件运行时报MDAC故障的问题解决办法
- SimpleAdapter的学习理解
- MFC基于单文档分割窗口