๐ฏ Goals
- OutOfMemory ๋ฐ์ ์์ธ ํ์ ํ๋ ๋ฒ์ ์๋ค.
์์ ์ฝ๋
JVM option ์ ๋ค์ ์ค์ ์ ์ถ๊ฐํ๋ค.
Intellij IDEA > Rum Configuration > Modify > Add VM Options
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
-Xms20m | ํ ์ต์ ํฌ๊ธฐ 20MB |
-Xmx20m | ํ ์ต๋ ํฌ๊ธฐ 20MB ์ ํ |
-XX:HeapDumpOnOutOfMemory | OOM ๋ฐ์์ HeapDump ํ์ผ์ ์์ฑ |

public class HeapOOM {
static class OOMObject {}
public static void main(String[] args) {
List<OOMObject> list = new ArrayList<>();
while (true) {
list.add(new OOMObject());
}
}
}
ํ ํฌ๊ธฐ๊ฐ 20MB ๋ฅผ ๋์ด์๋ ์๊ฐ OOM ์ด ๋ฐ์ํ๋ค.


Profiling
OOM ๋ฐ์์ผ๋ก ์ธํ .hprof ํ์ผ์ ์ด์ด๋ณธ๋ค.
๋น์ฐํ Intellij IDEA ์์ ์ฐ๋ค. (์์ง๋ eclipse ์ฐ๋ ์ฌ๋์ด ์์๊น???)

HeapOOM$OOMObject
- Count 810,326 ๊ฐ
OOMObject ์์ฑ ๊ฐ์ - Shallow 12.97 MB
OOMObject ๊ฐ์ฒด ์ด๋
810,326 * 16 bytes - Retained 12.97 MB
Garbage Collector ๋์์ ํ์๋ ๋ฉ๋ชจ๋ฆฌ ์ด๋
Shallow , Retained ?
Shallow (Size)
์์ ๊ฐ์ฒด๊ฐ ์ฐจ์งํ๋ Heap ์ฌ์ด์ฆ
์ ์์ ์์ OOMObject ๊ฐ์ฒด 810,326 ๊ฐ๊ฐ 12.97MB Shallow ๋ก ๊ฐ์ง๋ค.

Retained (Size)
Garbage Collector ๊ฐ ์๋ํ๋ค๋ฉด ์ฌ๋ผ์ง ๊ฐ์ฒด ๋ฉ๋ชจ๋ฆฌ ์ด๋ ์ดํฉ.

C ์ Retained Size ๋ C,D,E,F,G,H ๊ฐ์ฒด์ ์ดํฉ์ด๋ค.

list ๊ฐ์ฒด๊ฐ ์ง์์ง๋ฉด 3.31MB (Reference ๊ฐ์ฒด๋ค) + OOMObject 12.97 MB ์ดํฉํ ์ฝ 16.32MB ๊ฐ Garbage Collector ์ ์ํด ์ ๊ฑฐ๋ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ค.
๊ฒฐ๊ตญ 2๊ฐ์ง๋ฅผ ์ฒดํฌํด์ผ ํ๋๋ฐ
- Memory Leak ์ด ์๋๊ฐ?
ํ์ ์๋ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ๊ณ ์๋๊ฐ? - ์ฝ๋ ์๋ช ์ฃผ๊ธฐ๊ฐ ๊ธธ์ด์ ์ด์๋จ์ ๊ฐ์ฒด๋ ์๋๊ฐ?
๐ References
Help - Eclipse Platform
help.eclipse.org
'JVM > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋๋ค ์บก์ณ์ Synthetic ๋๋ค ํด๋์ค (0) | 2025.02.19 |
---|---|
[Java] ์์ธ ๋ฒ์ญ๊ณผ ์์ธ ์ฐ์ ๊ธฐ๋ฒ (0) | 2024.09.30 |
[Java] Thread ์์ ๋์ Runnable ์ ์ฌ์ฉํ๋ผ. (0) | 2024.07.21 |
[Java] Guava - MultiMap , BiMap (0) | 2024.07.14 |
[Java] Generic vs WildCard (2) | 2024.01.07 |