🔄Update: JVM

This commit is contained in:
2025-09-28 20:34:55 +08:00
parent e28ff169ec
commit 600d966365
6 changed files with 153 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
# JIT
热点代码 -> 机器码
![JIT](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/jvm/jit-9a62fc02-1a6a-451e-bb2b-19fc086d5be0.png)
- C1
- `Client Complier`
- 局部简单可靠优化
- C2
- `Server Complier`
- 全局优化
+40
View File
@@ -0,0 +1,40 @@
# 命令行
## jps
查看虚拟机进程
```sh
C:\Users\23117>jps -l
6048 org.jetbrains.jps.cmdline.Launcher
10372 sun.tools.jps.Jps
4228 cn.hezhaohui.app
9832 com.intellij.idea.Main
```
`jps -l` 命令列出的 Java 进程如下:
- `6048` - `org.jetbrains.jps.cmdline.Launcher`(JetBrains 项目构建工具)
- `10372` - `sun.tools.jps.Jps`(`jps` 自身进程)
- `4228` - `cn.hezhaohui.app`(自定义 Java 应用程序)
- `9832` - `com.intellij.idea.Main`(IntelliJ IDEA 主程序)
## jstats
```sh
C:\Users\23117>jstat -class -t 14988 1000 2
Timestamp Loaded Bytes Unloaded Bytes Time
57.7 902 2124.9 0 0.0 0.03
58.7 902 2124.9 0 0.0 0.03
```
`jstat -class -t 14988 1000 2` 的输出表示:
- **Timestamp**:时间戳(单位为秒)。
- **Loaded**:已加载的类数量(902 个)。
- **Bytes**:已加载类的总字节数(2124.9 KB)。
- **Unloaded**:已卸载的类数量(0 个)。
- **Bytes**:已卸载类的总字节数(0.0 KB)。
- **Time**:类加载/卸载所花费的时间(0.03 秒)。
此命令用于监控 Java 进程(PID 14988)的类加载统计信息,每秒输出一次,共输出 2 次。
+23
View File
@@ -0,0 +1,23 @@
# OOM
> OOM: Out of Memory
> 内存溢出:申请内存时, JVM 没有足够的内存空间
> ML: Memory Leak
> 内存泄漏:申请了内存,但是没有释放,导致内存空间浪费
- 合理设置堆内存大小
- 内存分析工具排查问题
- GC 日志分析
- 控制缓存
**容易出现 OOM 的业务场景**
- 处理大量图片、文件、大数据集未及时释放
- 内存泄漏,数据库连接未关闭、缓存未清理
- 缓存没有限制大小
- 线程数量过多
- 无限递归
- 强引用过多
- 一次性处理大文件
+7
View File
@@ -0,0 +1,7 @@
# 双亲委派模型
- 过程
- 父类加载器先尝试加载
- 父类加载器不能加载,则自己加载
- 优点
- 保证类的统一性和安全性,避免被重复佳作或者被篡改
+18
View File
@@ -0,0 +1,18 @@
# 类加载过程
1. 加载
1. 通过全类名获取定义此类的二进制字节流
2. 将字节流的静态存储结构转化为运行时数据结构
3. 在内存中生成 `Class` 对象,放入方法区中
2. 验证
1. 文件格式验证 (魔数)
2. 元数据验证 (符合规范)
3. 字节码验证 (程序语义)
4. 符号引用验证 (其他类、方法、字段是否存在)
3. 准备
1. 分配内存
- 静态变量
4. 解析
1. 将符号引用替换为直接引用
5. 初始化
+53
View File
@@ -0,0 +1,53 @@
# 创建对象
**初始化顺序**
1. 父类静态变量/静态代码块
2. 子类静态变量/静态代码块
3. 父类变量/代码块
4. 父类构造方法
5. 子类变量/代码块
6. 子类构造方法
```java
class Parent {
// 父类静态变量
static {
System.out.println("1. 父类静态代码块");
}
// 父类实例变量
{
System.out.println("3. 父类实例代码块");
}
// 父类构造方法
Parent() {
System.out.println("4. 父类构造方法");
}
}
class Child extends Parent {
// 子类静态变量
static {
System.out.println("2. 子类静态代码块");
}
// 子类实例变量
{
System.out.println("5. 子类实例代码块");
}
// 子类构造方法
Child() {
System.out.println("6. 子类构造方法");
}
}
public class Main {
public static void main(String[] args) {
new Child();
}
}
```