JVM 基础知识

本文详细阐述了Java代码从.java到.class的加载过程,介绍了JVM的组成(包括堆、方法区等)、栈帧结构、对象的内部组成以及分代垃圾收集策略(如CMS和G1)。此外,还讲解了如何使用JStack和JStat进行线程和垃圾回收监控,以及SQL查询技巧来诊断数据库锁问题。

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

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`;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值