最常考的Java后台面试题(三)JVM

本文详细探讨了JVM的内存结构,包括计数器、栈、堆和方法区,以及垃圾回收机制,如对象死活判断、垃圾回收算法。还涉及类加载过程和JMM(Java内存模型)。是Java开发者面试的重要参考资料。
摘要由CSDN通过智能技术生成

总览

参考内容:
Java面试小抄
JVM内存结构

JVM的内存结构

JVM内存结构

执行引擎把字节码翻译成机器码。

计数器

计数器就为线程服务的。一个栈对应一个线程,但每个线程的时间不是无限的,一般来说每个线程都有一个时间片;时间片用完之后,就会切换到下一个线程。而线程重新回来之后,代码应该从哪一行开始继续进行,就要看计数器记录的数字。因此每个线程对应每个虚拟机栈对应每个计数器,是一对一对一的关系。
英文叫做(程序 计数 register),后缀是寄存器,计数器是在寄存器当中实现的。因为计数器需要频繁调用,而寄存器读起来最快。

在这里插入图片描述
除了这个虚拟机栈之外,还有一个本地方法栈。栈内存是Java的一种内存,主要是用来执行程序用的,当JVM栈中有的命令做不到时,就调用本地方法栈。
主程序压入栈,主程序调用的程序再进栈,就这样一层压一层。每一个方法在栈中叫做栈帧。当顶层方法执行完毕之后,则自动出栈。所以栈不需要垃圾回收,自己用完就扔掉了。

在这里插入图片描述
堆内存是是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,用于存放。
堆的数据结构是用数组实现的二叉树。由于堆的数据结构无法做到用完之后就知道要把这个对象回收掉,所以堆整体需要垃圾回收(GC)。
为了实现垃圾回收,堆中内存又分成了新生代和老年代,新时代中又包含Eden(伊甸园)和survivor1和survivor2。
在这里插入图片描述

方法区

在这里插入图片描述
方法区也就是最新的元空间。
方法区(Method Area)与上面讲的Java堆一样,都是各个线程共享的,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
JDK1.7之前的方法区是放在堆中的,并专门划分一个空间叫做永久代给方法区使用。但由于永久代总是OutOfMemory,所以JDK1.8之后将永久代剥离开来并把它放在系统内存当中,并改名叫元空间。

垃圾回收

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值