Skip to content

Commit 460a86a

Browse files
committed
📝 Writing docs.完善内存布局
1 parent 7209889 commit 460a86a

2 files changed

Lines changed: 46 additions & 3 deletions

File tree

MD/MemoryAllocation.md

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040

4141

42-
### 元数据区(JDK1.8)
42+
## 元数据区(JDK1.8)
4343

4444
`JDK1.8` 中已经移除了方法区(永久代),并使用了一个元数据区域进行代替(`Metaspace`)。
4545

@@ -51,13 +51,13 @@
5151

5252

5353

54-
### 运行时常量池
54+
## 运行时常量池
5555

5656
运行时常量池是方法区的一部分,其中存放了一些符号引用。当 `new` 一个对象时,会检查这个区域是否有这个符号的引用。
5757

5858

5959

60-
### 直接内存
60+
## 直接内存
6161

6262

6363

@@ -70,3 +70,25 @@
7070
既然是内存,那也得是可以被回收的。但由于堆外内存不直接受 `JVM` 管理,所以常规 `GC` 操作并不能回收堆外内存。它是借助于老年代产生的 `fullGC` 顺便进行回收。同时也可以显式调用 `System.gc()` 方法进行回收(前提是没有使用 `-XX:+DisableExplicitGC` 参数来禁止该方法)。
7171

7272
**值得注意的是**:由于堆外内存也是内存,是由操作系统管理。如果应用有使用堆外内存则需要平衡虚拟机的堆内存和堆外内存的使用占比。避免出现堆外内存溢出。
73+
74+
75+
## 常用参数
76+
77+
![](https://ws1.sinaimg.cn/large/006tNbRwly1fxjcmnkuqyj30p009vjsn.jpg)
78+
79+
通过上图可以直观的查看各个区域的参数设置。
80+
81+
常见的如下:
82+
83+
- `-Xms64m` 最小堆内存 `64m`.
84+
- `-Xmx128m` 最大堆内存 `128m`.
85+
- `-XX:NewSize=30m` 新生代初始化大小为`30m`.
86+
- `-XX:MaxNewSize=40m` 新生代最大大小为`40m`.
87+
- `-Xss=256k` 线程栈大小。
88+
- `-XX:+PrintHeapAtGC` 当发生 GC 时打印内存布局。
89+
- `-XX:+HeapDumpOnOutOfMemoryError` 发送内存溢出时 dump 内存。
90+
91+
92+
新生代和老年代的默认比例为 `1:2`,也就是说新生代占用 `1/3`的堆内存,而老年代占用 `2/3` 的堆内存。
93+
94+
可以通过参数 `-XX:NewRatio=2` 来设置老年代/新生代的比例。

docs/jvm/MemoryAllocation.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,24 @@
7070
既然是内存,那也得是可以被回收的。但由于堆外内存不直接受 `JVM` 管理,所以常规 `GC` 操作并不能回收堆外内存。它是借助于老年代产生的 `fullGC` 顺便进行回收。同时也可以显式调用 `System.gc()` 方法进行回收(前提是没有使用 `-XX:+DisableExplicitGC` 参数来禁止该方法)。
7171

7272
**值得注意的是**:由于堆外内存也是内存,是由操作系统管理。如果应用有使用堆外内存则需要平衡虚拟机的堆内存和堆外内存的使用占比。避免出现堆外内存溢出。
73+
74+
## 常用参数
75+
76+
![](https://ws1.sinaimg.cn/large/006tNbRwly1fxjcmnkuqyj30p009vjsn.jpg)
77+
78+
通过上图可以直观的查看各个区域的参数设置。
79+
80+
常见的如下:
81+
82+
- `-Xms64m` 最小堆内存 `64m`.
83+
- `-Xmx128m` 最大堆内存 `128m`.
84+
- `-XX:NewSize=30m` 新生代初始化大小为`30m`.
85+
- `-XX:MaxNewSize=40m` 新生代最大大小为`40m`.
86+
- `-Xss=256k` 线程栈大小。
87+
- `-XX:+PrintHeapAtGC` 当发生 GC 时打印内存布局。
88+
- `-XX:+HeapDumpOnOutOfMemoryError` 发送内存溢出时 dump 内存。
89+
90+
91+
新生代和老年代的默认比例为 `1:2`,也就是说新生代占用 `1/3`的堆内存,而老年代占用 `2/3` 的堆内存。
92+
93+
可以通过参数 `-XX:NewRatio=2` 来设置老年代/新生代的比例。

0 commit comments

Comments
 (0)