Java面试题 P2:Jvm性能调优
1、JDK体系结构
JDK由:java命令及常用工具+JRE组成(java运行时环境)
JRE由:支撑java运行的各种类库+JVM(java运行时环境)
2、为什么java可以跨平台部署
跨平台是由java虚拟机,jvm去实现的。
3、Java虚拟机内部组成结构图
java代码运行工作顺序:
(1)先通过javac将Math.java编译为Math.class字节码文件;
(2)再通过java命令运行Math.class字节码文件;
(3)java虚拟机开始工作,将字节码文件通过类装子系统加载到第2块位置,运行时数据区
(4)通过字节码执行引擎,运行java虚拟机中内存中的java代码
堆:new出来的对象一般放堆中
栈:用来放变量,临时变量,局部变量。
示例代码:
一个方法对应一块栈帧内存区域。
栈的数据结构的特点:先进后出(FILO)
javap命令可以对java代码进行反汇编。命令为:javap -c Math.class > Math.txt
上面程序的反汇编
程序计数器,放正在运行或将要运行的程序的行号。当CPU时间片被其他线程抢走后恢复执行时的执行行。
栈和堆的关系:指针
方法区:放常量,变量,类信息
方法区和堆的关系:指针指向堆的位置
本地方法:native来修饰的方法 例如start0()
堆的组成:
调优工具
(1)Java自带,JvisualVM
原理上子jdk1.6以上自带,但是我安装的版本中没有,先截取一个图看看
(2)Arthas(阿里)
官网:https://arthas.aliyun.com/doc/
下载地址:https://github.com/alibaba/arthas/releases
下载后运行 arthas-bin 文件夹下的arthas-boot
输入监控的jvm号
选择数字1回车进入到启动界面,
输入:dashboard,进入监控面板
当发现cpu异常,例如 线程号20,新启动cmd命令,进入到arthas运行界面,输入thread 20
进入到有问题的代码位置。
thread -b 命令 查询死锁的代码
使用Arthas进行代码反编译为你的原始密码
jad 类的位置
通过ognl来修改运行程序中内存变量的值
java虚拟机调优的真正目的是什么?
减少full gc,真正是减少STW,stop the world(停止到整个世界,会停止用户线程)
jvm为什么会设置STW机制?
指针会没有指向,堆 栈帧都可能会被清理,对象可能为垃圾,也可能会变成非垃圾,所以在做GC时,暂停所有用户线程。
市面上差不多有10种垃圾收集器:
G1虚拟机
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理