JVM基础_JVM内存模型基础解析

2020.04.13
一、在JDK1.7以前
1、方法区
主要放类信息、常量池(字符串常量池和运行时常量池)、即时编译器编译后的代码、静态变量等。用永久代的方式实现。
运行时常量池:
class文件元信息描述,编译后的代码数据,引用类型数据,类文件常量池。所谓的运行时常量池其实就是将编译后的类信息放入运行时的一个区域中,用来动态获取类信息。运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。
2、堆
几乎所有对象、数组等都是在此分配,JVM内存占比极大、是GC垃圾回收的主要阵地。
老年代 : 三分之二的堆空间
年轻代 : 三分之一的堆空间
eden区: 8/10 的年轻代空间
survivor from : 1/10 的年轻代空间
survivor to: 1/10 的年轻代空间
3、虚拟机栈
JVM在执行方法时,会在此区域创建一个栈来存放各种信息,比如返回值,局部变量表,各种对象的引用等,方法开始执行前就先创建栈帧(存放各种信息)入栈,执行完就出栈。
4、本地方法栈
与上一个类似,专门提供给Native方法用。
5、程序计数器
占用很小的一片区域,记录当前执行的行数。
其中1、2线程共享,3、4、5线程私有。
二、在JDK1.7
字符串常量池移到了堆中
静态变量放到了堆里
三、在JDK1.8以后
方法区(永久代)被元数据区取代了,直接使用本地内存,为了减少了一些OOM的状况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值