一、JVM 内存分区及作用:
根据《Java虚拟机规范》的规定,JVM 所管理的内存将会包括以下几个运行时数据区域如下,但不同的 JVM 版本在实现上有所差异。

下图为 JDK8 的内存结构:

各个数据区域可以继续细分如下结构:
- Heap
- Young Generation
- Eden
- Survivor From
- Survivor To
- Old Generation
- String Constant Pool
- Young Generation
- 方法区-Meta Space
- Runtime Constant Pool
- Literal
- Symbolic Reference
- 类的元数据
- Runtime Constant Pool
- Direct Memory
- VM Stack
- Native Method Stack
- Program Counter Register
二、JVM - 线程共享数据区域
2.1 堆(Heap)
Heap 是所有线程所共享的一块内存(Eden 中 TLAB(Thread Local Allocation Buffer) 是线程独享的),在虚拟机启动时创建,几乎所有的对象实例都在这里创建,因此该区域经常发生垃圾回收操作。
Heap 内存可以通过 -Xms 、-Xmx 设置堆初始大小、最大值,对应下图中的 min 和 max。Heap 大小可以动态调整,当 committed 值超过高水位或低于低水位时,Heap 就会进行扩容或缩容,这样的话必然要进行一次 GC,所以,在 WEB 应用场景下,一般将 -Xms 、-Xmx 设置相等,避免在应用启动时,频繁的触发 GC。


本文深入解析JVM内存结构,涵盖线程共享与私有数据区域,包括Heap、方法区、虚拟机栈等关键概念,以及各区域的作用和管理。
最低0.47元/天 解锁文章
174万+





