๐ ๊ฐ์
๊ธฐ์ ๋ฉด์ ์ ์ค๋นํ๊ณ ๋ณด๋ ๋์ค, ํ ๋ฉด์ ๊ด๋๊ป์ ์ด๋ฐ ์ง๋ฌธ์ ํ์ จ์ต๋๋ค.
Q.๋ฌธ์์ด์ String str = "hello"; ๋ผ๊ณ ์ ์ธํ๋ฉด ์ด๋ป๊ฒ ๋๋์?
A.JVM ๋ฉ๋ชจ๋ฆฌ ๋ด์ Heap ์์ญ์ ์๋ String Constant Pool์ ์ ์ฅ์ด ๋ฉ๋๋ค.
Q.String Constant Pool์ด Heap์์ญ์ ์ ์ฅ๋๋๊ฒ ๋ง์์??
์ ๋ ๋น์ฐํ Heap ์์ญ ๋ด๋ถ์ ์ ์ฅ๋๋๊ฑฐ ์๋์ผ? ๋ผ๊ณ ์๊ฐํ์ต๋๋ค.(๋ธ๋ก๊ทธ๋ฅผ ํตํด์ ํ์ต ํ์ ๋ถ์ ๋ฐ์ ๋ง๋ค. ๋ผ๊ณ ์๊ฐํ์ค ์ ์์๊ฑฐ ๊ฐ์์, ๋ณดํต Heap์์ PermGen์์ String Constant Pool์ด ์๋ค๊ณ ์ค๋ช ํจ)
์ ํํ, JAVA 7๊น์ง๋ Permgen์ ์ ์ฅ๋๊ณ JAVA 8 ์ดํ๋ถํฐ๋ NativeMemory ๋ด๋ถ์ Metaspace์ ์ ์ฅ์ด ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฉด์ ๊ณ์ ์๋ฃ๋ฅผ ์ฐพ์๋ณด๋ค ์๋์ ๊ฐ์ ๊ทธ๋ฆผ์ ๋ฐ๊ฒฌํฉ๋๋ค.
โ ๊ทธ๋ผ JVM Memory์ Heap ์์ญ์ Permanent Generation์ด ์๋๊ฒ ๋ง์์?
์์ ๊ทธ๋ฆผ์ JVM Memory Architecture ๊ฒ์ํ๋ฉด ํํ๊ฒ ๋์ค๊ฑฐ๋, ๊ตญ๋ด ๋ธ๋ก๊ทธ๋ ํฌ์คํ ๋ค์ ๋ณด๋ฉด ์์ ๊ฐ์ด Heap ์์ญ์์ Permgen์ด ์๊ณ , Permgen ๋ด๋ถ์ String ConstantPool์ด ์๋ค๊ณ ํ๋ ๊ทธ๋ฆผ์ ๋ง์ด ๋ณด์ จ์๊ฒ๋๋ค.
new String()์ ํตํด ์์ฑํ๋ฉด Heap ์์ญ์ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๋๊น ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ก ์ธํด ์ ๋ ์ฌ์ฉํ์ง ๋ง๋ผ.
๋ง๋ ๋ง ์ ๋๋ค. ํ์ง๋ง, ์ด ๊ทธ๋ฆผ์ ์๋ชป๋์ต๋๋ค.
๐คฆโ๏ธ Heap์ PermGen์ ๋ค๋ฅธ ์์ญ์ด๋ค.
์์ ๊ฐ์ด PermGen์ Heap์์ญ์ ์์ง ์์ต๋๋ค. Java๋ Heap Memory์ Non-Heap Memory ๋ ๊ฐ์ง ์ข ๋ฅ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. Oracle GC ๊ฐ๋ฐ์ ๋ธ๋ก๊ทธ์์๋ ์๋์ ๊ฐ์ ์ฅํ๋ฅผ ํตํด์ Permanent Generation ์์ญ์ ํ ์์ญ์ด ์๋๊ฑธ ํ์ธํ ์ ์๋ ๊ตฌ์กฐ๋ก ํฌ์คํ ์ ํ์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Heap Memory OOM๊ณผ Non-Heap Memory OOM์ ์๋ก ๋ค๋ฆ ๋๋ค.
โค๏ธ ๊ฒฐ๋ก
1. String Constant Pool์ Java 7๊น์ง๋ Perm ์์ญ์ ๊ด๋ฆฌ๋๋ค. ์ดํ์๋ Native Method ๋ด๋ถ MetaSpace์์ ๊ด๋ฆฌ
2. Perm ์์ญ์ Heap ์์ญ๊ณผ ๋ค๋ฅธ Non-Heap Memory๋ค.
3. Permanent Generation์ OOM๋ Heap ์์ญ๊ณผ ๋ค๋ฅด๋ค.
4. ์ด์ ๋๊ฐ String Constant Pool์ ๋ํด์ ์ค๋ช ํด๋ฌ๋ผ๊ณ ํ๋ฉด, JVM Memory ๋ด์ ์์นํ Non-Heap Memory์ธ PermGen ์์ญ์ String Constant Pool์ด ์์นํ๋ค๊ณ ๋งํด์ฃผ์.
[reference]
https://deveric.tistory.com/123
https://blog.naver.com/simjunbo/221080829920
https://stackoverflow.com/questions/41358895/permgen-is-part-of-heap-or-not
https://docs.oracle.com/javase/7/docs/technotes/guides/management/jconsole.html
๊ทธ ์ธ ๊ตญ๋ด ๋ธ๋ก๊ทธ
'Languege > Java & Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] jdk 17 - toList์ ํจ์ (0) | 2024.11.14 |
---|---|
Stream ์ฌ์ฉ๋ฒ (0) | 2023.11.15 |
RestAssured session ์ฌ์ฉ์ default value ์ ์ฅ (0) | 2023.05.17 |
Junit5 ์์๊ด๊ณ์์ BeforeEach ์์ (0) | 2023.05.17 |