三分钟快速了解jvm的内存结构

8 篇文章 0 订阅

jvm主要分3大块:堆heap栈stack持久区permanent(也叫方法区)。

1:堆是gc的主要区域,主要存放对象实例,分为新生代young老年代old(默认young占堆的1/3,old占2/3)。

新生代分:Eden伊甸ToFrom三部分(默认8:1:1)。

Eden存放新建的对象,当Eden满了(jvm内存分配技术Bump-the-pointer可以快速检测,加快Eden内存分配)会进行一次gc(存活对象年龄+1),1岁的对象移到To或From一个survivor,假设移动到了To,当To内存满了会进行一次gc(年龄+1),此时,存活下来的2岁对象移到另一个survivor,即From,To会被清空。默认15岁的对象会从young移动到old,一些比较大的对象会无视存活年龄直接进入old。

注意:新生代的gc(minor gc)主要采用的复制算法,理论上一个survivor,假设To满了且对象全部存活的情况下,另一个survivor即From为了存放所有存活对象,所以在gc之前必须是空的。所以,两个survivor永远有一个是空的。

2:栈是虚拟机栈,存放方法中的局部变量和对象的引用(对象的地址值),栈存放栈帧,栈帧代表一个线程执行的一个方法,栈帧储存的是方法调用过程中的临时变量,参数和中间结果。

全局变量:基本类型的变量和值存在堆里,引用类型的变量和对象存在堆里,指向对象的引用(地址值)存在栈中。

局部变量:基本类型的变量和值存在栈里,引用类型的变量(地址值)在栈里,具体对象在堆中。

3: 持久区permament,一般叫方法区,存放的是关于类的描述,class的所有信息,静态变量,final常量,属性,方法信息等。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值