理解 JVM 内存架构

Java 代码优化

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

什么是 JVM?

  • 跨平台的执行环境
  • 将字节码(.class)转换为机器码
  • 内存管理与垃圾回收
  • 即时编译(JIT)
Java 代码优化

JVM 内存架构概览

JVM 内存架构

Java 代码优化

栈内存

  • 方法执行与局部变量的内存区域
  • LIFO(后进先出)结构
  • 存储:
    • 局部变量
    • 原始数据类型
    • 方法调用信息
  • 超出大小会抛出 StackOverflowError
Java 代码优化

堆内存

  • 存储所有对象和数组
  • 使用 new 创建对象并分配到堆
  • 由垃圾回收器管理
  • 大小可动态变化
  • 按代分区
Java 代码优化

内存示例

public void processData() {
    int count = 0;                  // Stack

String name = "Java"; // Heap
List<String> items = // Reference on Stack new ArrayList<>(); // Object on Heap
items.add(new String("Item")); // Object on Heap }
Java 代码优化

内存高效的编码模式

// Inefficient
List<String> list1 = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    String s = new String("value"); // 1000 objects
    list1.add(s);
}

// Better
List<String> list2 = new ArrayList<>();
String s = "value";  // Single object
for (int i = 0; i < 1000; i++) {
    list2.add(s);
}
Java 代码优化

总结

  • JVM 主要通过栈和堆管理内存
  • 栈内存:快,存原始类型与引用
  • 堆内存:存对象
Java 代码优化

Let's practice!

Java 代码优化

Preparing Video For Download...