一天一个面试小问题 no.4 JVM内存模型

JVM内存模型

简介:

jdk1.8之前,jvm运行时数据区
在这里插入图片描述jdk1.8,jvm运行时数据区
在这里插入图片描述
本文以1.8为例

运行时内存区可以大体上分为五块区域分别为:
在这里插入图片描述

  • 程序计数器:
    程序计数器位于JVM内存模型的很小的一块内存区域。由于处理器CPU为时间片进行处理执行指令,当线程A处理某一指令时,该线程的CPU时间片用完了,处理器去执行其他的线程B,当线程A重新获取到CPU时间片时,怎么知道上次执行到哪里呢?总不会重新再执行一遍吧,当然不可能的,这个时候程序计数器就派上用场了,它就是记录上次线程执行到哪个地方,以便于下次线程继续处理。从这里也可以看出,程序计数器是线程私有的。同时它也是JVM中唯一块没有内存溢出的区域。
  • java虚拟机栈:
    虚拟机栈就是存放执行方法时建立的栈帧的一块区域,每个栈帧中,存放对应的该方法的局部变量表、操作数栈、动态链接、方法返回地址信息和附加信息。由此可见 虚拟机栈也是新城私有的一块区域。每个方法在执行时,都会有一块属于自己的栈帧。

扩展:
什么是栈帧?
栈帧是一种数据结构,栈帧的数据操作分为入栈和出栈两种,每个方法的执行与结果的返回对应的就是入栈和出栈。
栈帧存储什么数据?
栈帧是一种数据结构,用来存储的数据有:局部变量表、操作数栈、方法返回地址结果或异常、附加信息。
栈帧的含义?
每个方法的入栈和出栈都对应方法的执行与结果的返回。
执行原则:先进出
一个虚拟机栈对应一个线程,一个方法的执行可能会涉及到多个方法的调用,一个栈帧对应一个方法在这里插入图片描述

tips: 通常我们所说的jvm内存分为堆和栈,栈指的就是虚拟机栈,往小了说,应该指的是局部变量表这部分,毕竟使我们最关注的地方之一。

局部变量表: 是由一块连续的内存空间组成,用来存放方法的局部变量、方法参数以及运行方法时已知的八大基本数据类型。局部变量表的基本单位为slot。

  • 本地方法栈:

本地方法栈和java虚拟机栈功能很类似,也是线程私有的,不同之处在于java虚拟机栈是存放java方法的局部变量…等数据的,本地方法栈存放的是
c和c++

  • 堆:

堆可以算的上是jvm中占有最大内存的一块区域了,堆中存放的是对象,而对象又是线程公有的,所以堆这块区域是线程共享的区域,同时堆也是GC机制经常访问的区域。
堆是按代进行划分区域的,可以分为新生代(1/3)、老年代(2/3)

新生代: 又分为Eden和servivorTo,servivorFrom
对象整个生命周期内分别处于堆中不同的区域。当对象新创建完成后,对象处于Eden区(伊甸园),当Eden区内存不足时,就会触发MinorGC,进行一次GC,对象的年龄age+1,同时会把Eden和servivorFrom清空,对象复制到servivorTo区域中,将age>15的对象转移到老年代区域中,如果servivorTo区域内存不足的情况下,存活的对象全部转移到老生代中,然后servivorTo和servivorFrom互换,就相当于把新生代幸存者从servivorFrom转移到了servivorTo。

老年代: 老年代触发GC的次数就会少很多,称为majorGC,在进行majorGC之前会触发一次MinorGC,将年龄到达15的对象复制到老年代中,当老年代中内部不足时,会触发MajorGC。

老年代的GC算法为标记清除法,新生代GC采用复制算法。

  • 方法区

又称为本地内存,在1.8之前本地内存包含直接内存和本地内存两部分
1.8之后,去除了堆中的永久代,同时将方法区转移到了本地内存,同时增加了元空间。

方法区和堆一样,都是线程共享的区域,存储的数据为:虚拟机加载的类信息、常量、静态变量、即时编译的代码,它还包含了运行时常量池

为什么移除永久代?

在jdk1.8版本之前,永久代也称为方法区,永久代也就可以存储虚拟机加载的类信息、常量、静态变量、即时编辑的代码等信息。这就和1.8版本的方法区很像了。但由于永久代XX:MaxPermSize 的上限,如果将大量的字符串放入到永久代就会造成OOM.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值