์๋ฌธ : https://www.baeldung.com/jvm-static-storage
์ค์ญ์ด๋ ์์ญ์ด ๋ง์ ์ ์์ต๋๋ค. ์ฐธ๊ณ ์ฉ์ผ๋ก๋ง ์ฝ์ด์ฃผ์๊ธธ ๋ฐ๋๋๋ค.
1. ๊ฐ์
์ฐ๋ฆฌ๋ ์ข ์ข JVM์ ๋ด๋ถ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๊ฐ๊ณผํ๋ฉฐ ์์ ํ๊ณ ๋ ํ๋ค. ํ์ง๋ง ์ฑ๋ฅ๊ณผ ์ฝ๋ ํ์ง ํฅ์์ ์ํด์๋ JVM ๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ๋ณธ์ ์ธ ์ฌํญ์ ๊ณต๋ถํ ํ์๊ฐ ์๋ค. ์ด๋ฒ ๊ธฐ์ฌ์์๋, ์ฐ๋ฆฌ๋ JVM ์ ์ฅ๊ณต๊ฐ๊ณผ static ํ๋ ๊ดํด ๊ณต๋ถํด ๋ณผ ์์ ์ด๋ค.
2. JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ๋ถ
์ฐ์ JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์๊ธฐ์์ผ๋ณด๋๋ก ํ์.
2.1 Heap ๋ฉ๋ชจ๋ฆฌ
ํ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐํ์ ์ ์ฅ ๊ณต๊ฐ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ JVM ์ค๋ ๋๋ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ฉฐ, ํด๋์ค ์ธ์คํด์ค์ ๋ฐฐ์ด๋ฑ์ด ์์ฑ๋๋ฉด ์ด ๊ณณ์ ์ ์ฅ๋๋ค. ์๋ฐ์์๋ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๊ฐ์ง ๊ณต๊ฐ์ผ๋ก ๋ถ๋ฅํ๋๋ฐ, ์ ์ ๊ฐ์ฒด ๊ณต๊ฐ (young generation) ๊ณผ ๋์ ๊ฐ์ฒด ๊ณต๊ฐ (old generation) ์ด๋ค. ๋ํ ์ ์ ๊ฐ์ฒด ๊ณต๊ฐ์ ๋ด๋ถ์ ์ผ๋ก ์๋ด(Eden)๊ณผ ์์กด์ ๊ณต๊ฐ(Survivor space) ์ผ๋ก ๋ถ๋ฆฌ๋๋ค. (์์กด์ ๊ณต๊ฐ์ From ์์ญ๊ณผ To ์์ญ์ผ๋ก ๊ตฌ๋ถ๋๋ค.) ๋์ ๊ฐ์ฒด ๊ณต๊ฐ์ ๊ต์ ๊ฐ์ฒด ๊ณต๊ฐ(Tenured) ์ผ๋ก ๋ถ๋ฆฌ๊ธฐ๋ ํ๋ค. ํ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋ ๊ฐ์ฒด์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ฐ๋น์ง ์ฝ๋ ํฐ(GC)๋ผ๊ณ ์๋ ค์ง ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์คํ ์ ์ํด ์๋์ผ๋ก ๊ด๋ฆฌ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ๋น์ง ์ฝ๋ ํฐ๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํด์ ํ๊ฑฐ๋, ํ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์ฌ๋ฌ ์์ญ์ผ๋ก ์ด๋์ํค๋ฉด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค.
2.2 Non-Heap ๋ฉ๋ชจ๋ฆฌ
๋ ผ-ํ ๋ฉ๋ชจ๋ฆฌ๋ ์ฃผ๋ก ํด๋์ค ๊ตฌ์กฐ, ํ๋, ๋ฉ์๋ ๋ฐ์ดํฐ, ๊ทธ๋ฆฌ๊ณ ๋ฉ์๋์ ์ฝ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฉ์๋ ์์ญ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ํ ๋ฉ๋ชจ๋ฆฌ์ ๋น์ทํ๊ฒ ๋ชจ๋ JVM ์ค๋ ๋๋ ๋ฉ์๋ ์์ญ์ ์ ๊ทผํ ์ ์๋ค. Permanent Generation (PermGem) ์ด๋ผ๊ณ ๋ ์๋ ค์ง ๋ฉ์๋ ์์ญ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ํ ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ถ๋ก ์ทจ๊ธ๋์ง๋ง ๊ฐ๋น์ง ์ฝ๋ ํ ์ ๋์์ด ๋์ง ์์์๋ ์๋ค. ํ์ง๋ง Java 8 ์์๋ถํฐ PermGem ์์ญ์ ์ ๊ฑฐ๋๊ณ MetaSpace ๋ผ๊ณ ํ๋ ์๋ก์ด ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ์์ญ์ด ๋์ ๋์๋ค.
2.3 Cache ๋ฉ๋ชจ๋ฆฌ
JVM ์ ๋ค์ดํฐ๋ธ ์ฝ๋์ ์ปดํ์ผ ๋ฐ ์ ์ฅ์ ์ํด ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฝํ๋ค.
3. Java 8 ์ด์ ์ Static ๋ฉค๋ฒ ์ ์ฅ๊ณต๊ฐ
Java 8 ์ด์ ์๋ PermGem ์์ญ์ Static ๋ฉ์๋์ ๋ณ์๋ค์ด ์ ์ฅ๋์๋ค. ๋ํ Intern ๋ ๋ฌธ์์ด๋ ์ด๊ณณ์ ์ ์ฅ๋์๋ค.
4. Java 8 ์ดํ์ Static ์ ์ฅ ๊ณต๊ฐ
์์ ๋ค๋ฃจ์๋ฏ์ด, PermGem ์์ญ์ Metaspace ์์ญ์ผ๋ก ๋์ฒด ๋์๊ณ static ๋ฉค๋ฒ์ ์ ์ฅ ๊ณต๊ฐ ๋ํ ๋ณ๊ฒฝ๋์๋ค. Java 8 ์ดํ๋ก Metaspace ์์ญ์ ์ค๋ก์ง ํด๋์ค์ ๋ฉํ๋ฐ์ดํฐ๋ง ์ ์ฅํ๊ณ , static ๋ฉค๋ฒ๋ Heap ์์ ์ ์ฅํ๊ณ ์ ์งํ๋๋ก ๋ณ๊ฒฝ๋์๋ค. (intern ๋ ๋ฌธ์์ด๋ ๋ง์ฐฌ๊ฐ์ง)
5. ๊ฒฐ๋ก
์งง์ ๊ธฐ์ฌ๋ฅผ ํตํด static ๋ฉค๋ฒ๋ฅผ ์ํ JVM์ ์ ์ฅ๊ณต๊ฐ๋ค์ ์ดํด๋ณด์๋ค. ์์ฝํ์๋ฉด Java 8 ์ด์ ์๋ static ๋ฉค๋ฒ๋ค์ PermGem (Non-Heap ์์ญ) ์ ์ ์ฅ๋์๋ค. ํ์ง๋ง Java 8 ์ดํ๋ก๋ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋๋ก ๋ณ๊ฒฝ๋์๋ค.
'๋ ธํธ > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Mybatis์ Apache POI ๋ฅผ ์ด์ฉํ ๋์ฉ๋ ์์ ๋ค์ด๋ก๋ ๊ฐ์ (1) | 2024.01.31 |
---|---|
[JAVA] Thread ๊ธฐ์ด (0) | 2022.06.15 |
[JAVA] ํท๊ฐ๋ฆฌ๋ ์์ ์ ๋ฆฌ (0) | 2022.05.11 |
[JAVA] clone() ๋ฉ์๋ ์ ๋ฆฌ (0) | 2022.04.20 |
[JAVA] String Literal ๊ณผ String Pool (0) | 2022.03.31 |