JVM面试题

JVM跨平台的原理

在这里插入图片描述
它就和其他软件一样,是操作系统中的一个进程
不管它里面运行的是啥程序,它本身只是一个软件
在这里插入图片描述
就和mac版本的QQ和windows版本的QQ不一样类似

字节码的作用

在这里插入图片描述
如果jvm的作用是直接解析Java代码的话,它就变成了类似于Python的解释器的工具
Java代码直接解析比较慢,因为Java是高级语言,是由C语言和C++编写的语言
所以将Java代码转换为字节码,比较耗时的这部分工作就变成了编译期间的工作
提高了运行时候的效率

JVM与字节码的关系

在这里插入图片描述

JVM整体结构

在这里插入图片描述
JIT编译器:负责把一些比较频繁的,已经解释过的字节码缓存起来,避免重复解释
本地方法栈:一般是一些jvm里面的,C语言或者C++编写的方法,带native关键字
堆:解释过程中将产生的对象放到堆里面
程序计数器:方便解释器找到下一条要执行的指令

类加载子系统

在这里插入图片描述
将符号引用解析为直接引用是指将实际上类的名字等信息转化为存在方法区里面的地址

类加载器的分类

在这里插入图片描述
ExtClassLoader是Java类库下的加载器
AppClassLoader是当前项目classpath下面的加载器

类加载器的双亲委派机制

在这里插入图片描述
当在Java中创建一个class后
jvm会去看appClassLoader中是否加载过这个类,
没有加载再去ExtClassLoader中找,还没有再去BootStrapClassLoader中找
都没有再创建一个新的

Tomcat为什么要自定义类加载器

在这里插入图片描述

运行时数据区的内容

在这里插入图片描述
蓝色是线程共享的
绿色是非线程共享的,每个线程都有一个

程序计数器

在这里插入图片描述

虚拟机栈

在这里插入图片描述
图解
在这里插入图片描述
虚拟机栈可能出现的问题
在这里插入图片描述

栈帧

在这里插入图片描述

操作数栈

在这里插入图片描述
在这里插入图片描述
上述代码中
局部变量表一直不断存储变化的值
在这里插入图片描述

通过字节码的指令变化,不断在操作数栈和局部变量表中存取数据,实现代码逻辑

本地方法栈

在这里插入图片描述

在这里插入图片描述
堆的调整参数
在这里插入图片描述
新生代和老年代的调整参数
在这里插入图片描述
在这里插入图片描述

对象在堆中是如何流转的

在这里插入图片描述
Eden区域如果满了之后,会扫描哪些对象是已经没有在使用的对象
在这里插入图片描述
会把这些对象进行youngGC,标记数字,放到S0
在这里插入图片描述
如果eden再次发生youngGC时,会同步扫描S0区,并把对象转移到S1中,并同步更新数字
这次eden中的对象不是到S0了,而是S1,他俩区域会不断切换,不断更新数字
在这里插入图片描述
超过15次的,就会被放到老年代
在这里插入图片描述
特别大的对象也有可能不经过S0和S1直接放到老年代
在这里插入图片描述
也有可能Eden放不下,不经过Eden直接到老年代
在这里插入图片描述

GC的分类

在这里插入图片描述

为什么要进行GC

在这里插入图片描述

垃圾标记的方法

在这里插入图片描述

引用计数法

在这里插入图片描述

可达性分析法

在这里插入图片描述

GCroot包括什么

在这里插入图片描述

标记清除算法

在这里插入图片描述
在这里插入图片描述

STW是Stop-The-World的缩写,指的是在垃圾回收算法执行过程中,需要将JVM内存冻结的一种状态。在STW状态下,除了GC线程以外,其他所有线程都会停止执行。
STW是不可避免的,垃圾回收算法的执行一定会出现STW,而我们最好的解决办法就是减少停顿的时间。GC各种算法的优化重点就是为了减少STW,这也是JVM调优的重点。

复制算法

在这里插入图片描述
在这里插入图片描述

标记整理算法

在这里插入图片描述
在这里插入图片描述

三种不同的算法对比

在这里插入图片描述

分代收集算法

在这里插入图片描述

常见的垃圾回收器

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值