JVM 内存结构

JVM虚拟机内存:

堆:存放所有的数据,而其他内存区域都是存放的堆中数据的内存地址GC(垃圾回收)也是发送在堆区域,当Eden区满了,就会发生MinorGC,将Eden区未被引用的对象销毁掉,还在引用的对象放到S0和S1区域,当S0和S1区域满了,或者对象年龄到了15(jdk8默认值)或者是大对象,就会被放到老年代(也叫持久代),当老年代内存满了,就会触发FullGC,清理所有区域的对象,如果FullGC完成后,老年代的内存还是满的,就会发生OOM(内存溢出)

 

栈:可以理解为线程,栈里面存放着程序中的所有的线程,线程中的每个方法称为栈帧,栈帧又包含局部变量表(方法中使用到的变量),操作数栈(变量表中变量的赋值,计算都在这里面进行,可以理解为一块内存),动态链接,方法出口

 

 

本地方法栈:存放本地的一些方法,早期Java不是很成熟的时候,需要使用到C语言和C++写的一些方法,这些方法就是存放在本地方法栈里,然后执行,现在基本上没有使用了

程序计数器:我们的代码编译之后会有对应的行号比如线程A执行到某一步代码的时候,另一个线程B将他的资源抢占了,这个时候A就会挂起,程序计数器就会记录A线程当前执行到那一行或者状态,当B执行完把资源释放,A在继续执行的时候,就可以通过程序计数器回到之前执行的哪一行代码和状态继续执行。类似于快照

方法区(元空间):存放常量,静态变量,类信息


堆跟方法区是公用的,其他内存区域是每个线程私有,如下图所示,每个线程都拥有自己独立的程序计数器,本地方法栈,栈。栈中又会有多个栈帧组成

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值