- ์๋ฐ ์ปดํ์ผ๋ฌ(javac)๊ฐ ์๋ฐ ์์ค์ฝ๋(.java)๋ฅผ ๋ฐ์ดํธ์ฝ๋(.class)๋ก ์ปดํ์ผ ํฉ๋๋ค.
- ํด๋์ค ๋ก๋๋ฅผ ํตํด์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค
- ๋ก๋ฉ : ํด๋์ค๋ฅผ ์ฝ์ด์ค๋ ๊ณผ์ .class ํ์ผ์ ๊ฐ์ ธ์์ jvm์ ๋ฉ์๋ ์์ญ์ ๋ฐฐ์นํฉ๋๋ค. ์ด ์์ญ์๋ ์ฝ๋, ๋ฉํ ๋ฐ์ดํฐ, static ๋ณ์๋ฑ์ด ํฌํจ๋์ด ์์ต๋๋ค.
- ๋งํฌ : ๋ ํผ๋ฐ์ค๋ฅผ ์ฝ๋ ๊ณผ์ ๊ฒ์ฆ, ์ค๋น, ํด์์ ์ธ๋ถ ๋จ๊ณ๋ก ๋๋ฉ๋๋ค ๊ฒ์ฆ : ๋ฐ์ดํธ ์ฝ๋๊ฐ ์์ ํ์ง ํ์ธํฉ๋๋ค ์ค๋น: ํด๋์ค ๋๋ ์ธํฐํ์ด์ค์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ , ์ ์ ๋ณ์๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ด๊ธฐํ ํฉ๋๋ค ํด์: ์ฌ๋ณผ๋ฆญ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ๋ฅผ ์ง์ ์ฐธ์กฐ๋ก ๋ณํํฉ๋๋ค
- ์ด๊ธฐํ static ๋ณ์๊ฐ ์ ์ธ๋ ๊ฐ์ผ๋ก ์ด๊ธฐํ ๋๊ณ , static ๋ธ๋ก์ด ์คํ๋ฉ๋๋ค.
- JVM์ด .class ํ์ผ์ ๋ก๋ํ๊ณ , ์ฐ๊ฒฐ ๋ฐ ์ด๊ธฐํ ํ์ ์คํ ์์ง์ ํตํด ์คํ๋ฉ๋๋ค. ํด๋น ๋ฐ์ดํฐ๋ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ ์ ์ฅ๋ฉ๋๋ค. JVM์ ํ ์์ญ์์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ์ ๊ด๋ฆฌํ๋ฉฐ, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํ๊ณ , ์คํ ์์ญ์์ ๋ฉ์๋ ํธ์ถ์ ๊ด๋ฆฌํฉ๋๋ค.
์คํ ์์ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธํฐํ๋ฆฌํฐ์ JIT(Just In-Time) ์ปดํ์ผ๋ฌ๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
- ์ธํฐํ๋ฆฌํฐ: ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํ ์ค์ฉ ์ฝ์ด์ ์คํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ ๋ฉ์๋๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์คํํด์ผ ํ ๊ฒฝ์ฐ, ์ด๋ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
- JIT ์ปดํ์ผ๋ฌ: ์ด๋ฌํ ์ฑ๋ฅ ์ ํ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด JIT ์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. JIT ์ปดํ์ผ๋ฌ๋ ๋ฐ๋ณต์ ์ผ๋ก ์คํ๋๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ํด๋น ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํ(์ปดํ์ผ)ํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํฉ๋๋ค.
์คํ ์์ง์ด ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋์, ๋ฐ์ดํฐ๋ JVM์ ์ฌ๋ฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ฅ๋๊ฑฐ๋ ์ฎ๊ฒจ์ง๋๋ค.
- ๋ฉ์๋ ์์ญ(Method Area): ์ด ์์ญ์ ํด๋์ค ์์ค์ ์ ๋ณด(ํด๋์ค ์ด๋ฆ, ๋ถ๋ชจ ํด๋์ค ์ด๋ฆ, ๋ฉ์๋์ ๋ณ์ ๋ฑ)๋ฅผ ์ ์ฅํฉ๋๋ค.
- ํ ์์ญ(Heap Area): JVM์ด ๊ด๋ฆฌํ๋ ๋ชจ๋ ๊ฐ์ฒด๋ ์ด ํ ์์ญ์ ํ ๋น๋ฉ๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ด ์์ญ์ ๊ฒ์ฌํ์ฌ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํฉ๋๋ค.
- ์คํ ์์ญ(Stack Area): ๊ฐ ์ค๋ ๋์ ๋ํ ๋ฉ์๋ ํธ์ถ๊ณผ ๋ก์ปฌ ๋ณ์๋ ์ฌ๊ธฐ์ ์ ์ฅ๋ฉ๋๋ค. ๊ฐ ๋ฉ์๋ ํธ์ถ์ ๋ํด ๋ณ๋์ ์คํ ํ๋ ์์ด ์์ฑ๋๋ฉฐ, ๋ฉ์๋ ํธ์ถ์ด ์๋ฃ๋๋ฉด ํด๋น ์คํ ํ๋ ์์ ํ๊ดด๋ฉ๋๋ค.
- PC ๋ ์ง์คํฐ(PC Registers): ๊ฐ ์ค๋ ๋์ ๋ํด ๋ณ๋์ PC ๋ ์ง์คํฐ๊ฐ ์์ผ๋ฉฐ, ํ์ฌ ์คํ ์ค์ธ ๋ช ๋ น์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ(Native Method Stack): ๋ค์ดํฐ๋ธ ๋ฉ์๋์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฐ๋ ๋ ๋๊ธฐํ(Thread Synchronization): ๋ฐํ์ ํ๊ฒฝ์์๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ, ์ค๋ ๋ ๋๊ธฐํ๊ฐ ์ค์ํ ์ด์๊ฐ ๋ฉ๋๋ค. JVM์ ๊ฐ ์ค๋ ๋์ ๋ํด ๋ณ๋์ ์คํ ์์ญ๊ณผ PC ๋ ์ง์คํฐ๋ฅผ ์ ์งํจ์ผ๋ก์จ ์ค๋ ๋ ๊ฐ์ ๋๊ธฐํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์ธํฐํ์ด์ค(Native Method Interface, JNI): JVM์ Java๋ก ์์ฑ๋ ์ฝ๋ ๋ฟ๋ง ์๋๋ผ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ผ ๋ถ๋ฆฌ๋ ํน์ ํ๋ซํผ์ ์ข ์์ ์ธ ๋ฉ์๋๋ ํธ์ถํ ์ ์์ต๋๋ค. JNI๋ฅผ ํตํด ์ด๋ฌํ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ์คํํ ์ ์์ต๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection): JVM์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ํ๋ก๊ทธ๋จ์ด ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ํ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌํ์ฉํ๋ฉฐ, ์ด๋ก ์ธํด ๊ฐ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋ฉ๋๋ค.
ํ ์์ญ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ ๋ฐ ์ฌํ์ฉ์ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
ํ์์ญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Young Generation : ์์ฑ๋์ง ์ผ๋ง ์๋ ๊ฐ์ฒด ์ ์ฅ์
- Old Generation : ์์ฑ๋์ง ์ด๋ ์ ๋ ๋ ๊ฐ์ฒด ์ ์ฅ์
- Permanent Generation โ Metaspace (Java 8 ์ดํ๋ก ๋ณ๊ฒฝ) : ํด๋์ค ๋ฉํ ๋ฐ์ดํฐ ์ ์ฅ ์์ญ
์ ์ฅ ์์ญ์ ๋ณ๊ฒฝ ์ด์
Permanent Generation์ ์ฌ๋ฌ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ณ ์์์ผ๋ฉฐ, ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ์ด ์์ญ์ด ๊ณ ์ ํฌ๊ธฐ๋ผ๋ ์ ์ด์์ต๋๋ค. ์ฆ, JVM ์์ ์์ ์ด ์์ญ์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๊ณ , ์คํ ์ค์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์์ต๋๋ค. ์ด๋ก ์ธํด OutOfMemoryError๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด Java 8์์๋ Permanent Generation์ ์ ๊ฑฐํ๊ณ Metaspace๋ฅผ ๋์ ํ์ต๋๋ค. Metaspace๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋์ค ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง๋ง, ์ด ์์ญ์ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ํ์ ๋ฐ์ง ์๊ณ ํ์์ ๋ฐ๋ผ ๋์ ์ผ๋ก ํ์ฅ๋ฉ๋๋ค.
ํด๋์ค ๋ฉํ ๋ฐ์ดํฐ๋ ๋ ์์ญ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
๋ฉ์๋ ์์ญ(Method Area)
๋ฉ์๋ ์์ญ์ ํด๋์ค ์์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฉ์๋ ์์ญ์ ์ ์ฅ๋๋ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
- ํด๋์ค ์ด๋ฆ
- ํด๋์ค์ ์ธํฐํ์ด์ค์ ์ ๊ทผ ์ง์ ์
- ํด๋์ค์ ์ธํฐํ์ด์ค์ ์ง์ ์์ ํด๋์ค์ ์ธํฐํ์ด์ค
- ์ด ํด๋์ค ๋๋ ์ธํฐํ์ด์ค๊ฐ final์ธ์ง ์ฌ๋ถ, ์ถ์ ํด๋์ค์ธ์ง ์ฌ๋ถ ๋ฑ์ ํ๋๊ทธ
- ์ด ํด๋์ค์ ํ๋์ ๋ฉ์๋(์ ์ ๋๋ ์ธ์คํด์ค)
์ด๋ ๊ฐ ํด๋์ค ๋ฐ ์ธํฐํ์ด์ค์ ๋ํ ์ ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๊ฒ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
Metaspace
ํด๋์ค ๋ฉํ๋ฐ์ดํฐ์ ์ผ๋ถ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ดํฐ๋ธ ์์ญ์ ์ ์ฅํฉ๋๋ค. Metaspace์ ์ ์ฅ๋๋ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
- ๋ฐํ์ ์์ ํ
- ํ๋ ๋ฐ ๋ฉ์๋ ๋ฐ์ดํฐ
- ๋ฉ์๋์ ์์ฑ์์ ๋ฐ์ดํธ ์ฝ๋
- ํด๋์ค ๋ก๋์ ์ํด ๋ก๋๋ ํด๋์ค์ ๋ฉํ๋ฐ์ดํฐ
๋ฐ๋ผ์ Metaspace๋ ํด๋์ค์ ๋ฉ์๋, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ด ์คํ๋๋ ๋ฐํ์ ํ๊ฒฝ์ ๋ํ ๋ ๋์ ์ด๊ณ ๊ตฌ์ฒด์ ์ธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
์ถ์ฒ
https://www.inflearn.com/course/the-java-code-manipulation/dashboard
https://lob-dev.tistory.com/82
๋๋ ๋ณด๊ณ ์ถ์ ์ด์ผ๊ธฐ
- method area์ heap์ permgen ์์ญ์ ๋๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
- ์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ์ ์ฅ๋จ์ ์?
- ์ต๊ทผ ์ธ์ด์ ๋ณ์ฒ์ฌ?
- jit ์ปดํ์ผ๋ฌ๋ ์ด๋ป๊ฒ ๋์ํ๋์ง ๊ถ๊ธํ๋ค.

.png)



.png)