JVM面试题

本文深入探讨了Java的类加载过程,包括javac编译、类加载、静态变量加载和垃圾回收。介绍了JVM的组成部分,如程序计数器、虚拟栈、本地方法栈、Java堆和方法区,以及它们各自的功能。讲解了垃圾回收的可达性分析算法,并提到了Minor GC和Full GC的区别。此外,还讨论了JVM调优工具,如jvisualvm和阿里开源的Arthas,并简单阐述了垃圾回收中的stop-the-world机制及其原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、类的加载过程:
这时你可以先回答类的加载机制:
第一步是通过javac指令将代码编译成class文件,对代码进行验证,验证代码是否有编译问题,后加载类的静态变量,类的成员变量,成员方法,使用,最后销毁
2、JVM的组成:
如下图:三大部分 1、类装载子系统 2、运行时数据区 3、字节码执行引擎
程序计数器:当前线程所执行的字节码的行号指示器,用于记录正在执行的虚拟机字节指令地址,线程私有。
Java虚拟栈(线程栈):存放基本数据类型、对象的引用、方法出口等,线程私有。jvm给类开辟的空间,存放类上面的数据,栈先进后出
Native方法栈:和虚拟栈相似,只不过它服务于Native方法,线程私有。
Java堆:java内存最大的一块,所有对象实例、数组都存放在java堆,GC回收的地方,线程共享。
方法区:存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码数据等。(即永久带),回收目标主要是常量池的回收和类型的卸载,各线程共享
在这里插入图片描述
在idea中找到class路径,点击打开Terminal窗口,javap指令可以查看里面的具体指令,通过以下命令反编译到指定文件下,打开反编译文件可能会有点复杂,但能看到骨架,里面的代码比较底层,里面的指令是给JVMduqduqu读取的在这里插入图片描述

垃圾回收;
可达性分析算法:
在这里插入图片描述
jdk自带的jvm调优工具:
在cmd窗口输入命令jvisualvm命令打开,企业中调优用的可视化工具是阿里开源的Arthas工具

minor gc 回收次数达到15次,会将新时代S2中数据放大老年代
full gc ,开启老年代的垃圾回收,GC会stop the world (STW)STW暂停用户线程,为什么会有这个机制呢,因为如果用户线程不暂停,可能导致GC无法停止下来,在GC第一次扫描的时候,你的对象是不可回收的,但是用户线程不停下来,用户线程结束后,此时用户的线程中对象可能就是垃圾了,又需要GC重新回收

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值