JAVA code加载执行顺序:
*.java --->*.class->类装载子系统、字节码执行引擎

JVM虚拟机组成:
堆、方法区(元空间)、栈(线程)、本地方法栈、程序计数器
栈帧组成:
栈帧:局部变理表、操作数栈、动态链接、方法出口
对象组成:
对象头(Mark Word、KlassPointer类型指针、数组长度)、实例数据、对齐填充(8个字节)
分代收集:
堆分为新生代(复制算法)和老年代(标记-清除、标记-整理)
CMS:初始标记、并发标记、重新标记、并发清理、并发重置
G1:初始标记、并发标记、最终标记、筛选回收
Jstack:线程运行情况
Jstat:查看垃圾回收情况
- 程序通过JStack
- 数据库通过
1、查询是否锁表
SHOW OPEN TABLES WHERE in_use>0;
2、查询进程
SHOW PROCESSLIST;
3、查询正在锁的事务
SELECT * FROM information_schema.`INNODB_LOCKS`;
4、查询等待锁的事务
SELECT * FROM information_schema.`INNODB_LOCK_WAITS`;
本文详细阐述了Java代码从.java到.class的加载过程,介绍了JVM的组成(包括堆、方法区等)、栈帧结构、对象的内部组成以及分代垃圾收集策略(如CMS和G1)。此外,还讲解了如何使用JStack和JStat进行线程和垃圾回收监控,以及SQL查询技巧来诊断数据库锁问题。
2128

被折叠的 条评论
为什么被折叠?



