JVM์ด๋?
JVM์ ์๋ฐ๋ก ์์ฑํ ์ฝ๋๋ฅผ ํด์ํด์ ์คํํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
JVM์ ๊ฐ ์ด์์ฒด์ ์ ์ ํฉํ๊ฒ ๊ฐ๋ฐ๋์ด ์๊ณ ์๋ฐ๋ JVM์ ๋งค๊ฐ๋ก ์ด์์ฒด์ ์ ์ํตํ๊ธฐ ๋๋ฌธ์ ์ด์์ฒด์ ๋ก๋ถํฐ ๋ ๋ฆฝ์ ์ด๋ค. (C++๊ณผ ์ฐจ์ด์ )
JVM ์๋ ๊ณผ์
์๋ฐ๋ก ์ฝ๋๋ฅผ ์์ฑํ ํ์ ์คํํ๋ฉด ๋จผ์ ์ปดํ์ผ๋ฌ๊ฐ ์คํ๋๊ณ ์ปดํ์ผ์ด ์งํ๋๋ค.
๊ทธ ๊ฒฐ๊ณผ .java ํ์ผ(์๋ฐ ์ฝ๋ ํ์ผ)์ .class ํ์ผ(๋ฐ์ดํธ ์ฝ๋ ํ์ผ)๋ก ๋ณํ๋๋ค.
JVM์ ์ด์์ฒด์ ๋ก๋ถํฐ ์คํ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๋๋ค. ๊ทธ๋ฆผ์์ Runtime Data Area๊ฐ ์ด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๊ทธ ํ, ํด๋์ค ๋ก๋(Class Loader)๊ฐ .class ํ์ผ์ JVM์ผ๋ก ๋ถ๋ฌ๋ค์ฌ Runtime Data Area์ ๋ก๋์ํจ๋ค.
๋ก๋๊ฐ ์๋ฃ๋๋ฉด ์คํ ์์ง(Execution Engine)์ด Runtime Data Area์ ์ ์ฅ๋ .class ํ์ผ์ ์คํ์ํจ๋ค.
์คํ ๋ฐฉ์์ผ๋ก๋ ๋ค์ ๋ ๊ฐ์ง๊ฐ ์๋ค.
- ์ธํฐํ๋ฆฌํฐ(Interpreter)๋ฅผ ํตํด ํ ์ค์ฉ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๊ณ ์คํ์ํจ๋ค.
- JIT Compiler(Just-In-Time Compiler)๋ฅผ ํตํด ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๋ฅผ ๋ฒ์ญํ๊ณ ์คํ์ํจ๋ค.
์คํ ์์ง์ ๊ธฐ๋ณธ์ ์ผ๋ก 1๋ฒ ๋ฐฉ๋ฒ์ผ๋ก ์คํ์ํค๋ค๊ฐ ํน์ ์ฝ๋๊ฐ ์์ฃผ ์คํ๋๋ฉด ํด๋น ์ฝ๋๋ฅผ JIT Compiler๋ฅผ ํตํด ์คํ์ํจ๋ค.
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
Heap Area
JVM์ด ์๋๋๋ฉด ์๋์ผ๋ก ์์ฑ๋๋ฉฐ ๊ฐ์ฒด๋ ์ธ์คํด์ค ๋ณ์, ๋ฐฐ์ด์ด ์ ์ฅ๋๋ค.
Beer blanc = new Beer();
์์ new Beer()
๊ฐ ์คํ๋๋ฉด Heap Area์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ณ ์์ฑ๋ ์์น์ ์ฃผ์ ๊ฐ์ blanc
์๊ฒ ํ ๋นํด์ค๋ค. ์ด blanc
์ Stack Area์ ์ ์ธ๋ ๋ณ์์ด๋ค.
์ฆ, ์๋ฐ์์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃฐ ๋ Stack Area์ ์๋ ์ฐธ์กฐ ๋ณ์๋ฅผ ํตํด Heap Area์ ์ค์ ๊ฐ์ฒด์ ์ ๊ทผํ๊ฒ ๋๋ค.
Stack Area
๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ํ ๋น๋๋ ์์ญ์ด๋ค. Heap Area์ ์์ฑ๋๋ ๊ฐ์ฒด์ ์ฐธ์กฐ ๋ณ์ ๊ฐ๊ณผ int, long, boolean ๋ฑ์ ๊ธฐ๋ณธ ์๋ฃํ์ด ์ ์ฅ๋๋ค. ๋ฉ์๋ ์คํ์ด ์ข ๋ฃ๋๋ฉด pop๋์ด ์ฌ๋ผ์ง๋ค.
Method Area(Static Area, Class Area)
JVM์ด ์๋๋๋ฉด ์์ฑ๋๋ฉฐ ์ข ๋ฃ ์๊น์ง ์ ์ง๋๋ ๊ณตํต ์์ญ์ผ๋ก .class ํ์ผ์ ๋ฐ์ดํธ ์ฝ๋๊ฐ ๋ก๋๋๋ ๊ณณ์ด๋ค. static ๋ณ์์ ํด๋์ค ์ ๋ณด, ๋ฉ์๋ ์ ๋ณด ๋ฑ์ด ์ ์ฅ๋๋ค.
Garbage Collection
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํ๋ก๊ทธ๋จ์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ์ญ์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์๋ฌด์๊ฒ๋ ์ฐธ์กฐ๋๊ณ ์์ง ์์ ๊ฐ์ฒด๋ ๋ณ์๋ค์ ์๋์ผ๋ก ๊ฒ์ํ์ฌ ์ญ์ ํ๋ฉฐ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๋์์ ์ค๋ค.
Heap Area๋ ๊ฐ์ฒด๊ฐ ์ผ๋ง๋ ์ค๋ ์กด์ฌํ๋์ ๋ฐ๋ผ Young Area, Old Area๋ก ๋๋๊ฒ ๋๋ค.
Young Area์์๋ ์๋กญ๊ฒ ๋ง๋ค์ด์ง ๊ฐ์ฒด๊ฐ ํ ๋น๋๋ฉฐ ๋ง์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ์๋ฉธ๋๋ ๊ฒ์ ๋ฐ๋ณตํ๋ค. ์ฌ๊ธฐ์ ํ๋ํ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ Minor GC๋ผ๊ณ ํ๋ค.
Old Area์์๋ Young Area์์ ์ํ๋ฅผ ์ ์งํ๊ณ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ด ๋ณต์ฌ๋๊ณ ํฌ๊ธฐ๊ฐ ํฌ๊ฒ ํ ๋น๋๋ค. ํฌ๊ธฐ๊ฐ ํด์๋ก ๊ฐ๋น์ง ๋ฐ์๋ฅ ์ ์ ๋ค. ์ฌ๊ธฐ์ ํ๋ํ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ Major GC๋ผ๊ณ ํ๋ค.
๋์ ๋ฐฉ์
Young Area์ Old Area์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ์ฐจ์ด๊ฐ ์์ด์ ์ธ๋ถ์ ์ธ ๋์ ๋ฐฉ์์ ๋ค๋ฅด์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ ๋ ๊ฐ์ง ๋จ๊ณ๋ฅผ ๊ฐ์ง๋ค.
1. Stop The World
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์คํํ๊ธฐ ์ํด JVM์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ ๋ฉ์ถ๋ ์์ ์ด๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์คํํ๋ฉด ํด๋น ์ค๋ ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ค๋ ๋๋ค์ ์์ ์ด ์ค๋จ๋๊ณ ์ ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด ์ฌ๊ฐ๋๋ค.
2. Mark and Sweep
Mark๋ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ทธ๋ ์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ตฌ๋ณํ๋ ์์ ์ด๋ฉฐ, Sweep์ Mark์์ ์ฌ์ฉ๋์ง ์์์ผ๋ก ๊ตฌ๋ณ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ์์ ์ด๋ค.
'๐ Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ค๋ ๋(Thread) (0) | 2022.09.18 |
---|---|
[Java] ์คํธ๋ฆผ(Stream) (0) | 2022.09.17 |
[Java] ๋๋ค์๊ณผ ํจ์ํ ์ธํฐํ์ด์ค (0) | 2022.09.17 |
[Java] ์ปฌ๋ ์ (Collection) (3) | 2022.09.17 |
[Java] ์ ๋ค๋ฆญ๊ณผ ์์ธ ์ฒ๋ฆฌ (0) | 2022.09.16 |