๐JVM์ด๋?
JVM์ 'Java virtual machine'์ ์ค์ธ ๋ง๋ก '์๋ฐ๋ฅผ ์คํํ๊ธฐ ์ํ ๊ฐ์ ๋จธ์ ' ์ฆ '๊ฐ์ ์ปดํจํฐ'๋ผ๊ณ ํ ์ ์๋ค.
'๊ฐ์ ์ปดํจํฐ'๋ ์ค์ ํ๋์จ์ด๊ฐ ์๋ ์ํํธ์จ์ด๋ก ๊ตฌํ๋ ์ปดํจํฐ๋ผ๋ ๋ป์ผ๋ก ์ปดํจํฐ ์์ ์ปดํจํฐ๋ผ๊ณ ํ ์ ์๋ค.
์๋ฐ๋ก ์์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด ๊ฐ์ ์ปดํจํฐ(JVM)์์๋ง ์คํ๋๊ธฐ ๋๋ฌธ์, ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ๋๊ธฐ ์ํด์๋ ๋ฐ๋์ JVM์ด ํ์ํ๋ค.

์์ ๊ทธ๋ฆผ์์ ์ฒ๋ผ C์ธ์ด ๊ฐ์ ๊ฒฝ์ฐ OS๋ง ๊ฑฐ์น๊ณ ํ๋์จ์ด๋ก ๋ฐ๋ก ์ ๋ฌ๋๋ ๊ฒ์ ๋ฐํด JAVA๋ JVM์ ํ๋ฒ ๋ ๊ฑฐ์น๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋์จ์ด์ ๋ง๊ฒ ์์ ํ ์ปดํ์ผ๋ ์ํ๊ฐ ์๋๊ณ ์คํ ์ ํด์(interpret)๋๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์๋ค.
๊ทธ๋ฌ๋ ์์ฆ์ ๋ฐ์ดํธ์ฝ๋(์ปดํ์ผ๋ ์๋ฐ ์ฝ๋)๋ฅผ ํ๋์จ์ด์ ๊ธฐ๊ณ์ด๋ก ๋ฐ๋ก ๋ณํํด์ฃผ๋ JIT ์ปดํ์ผ๋ฌ์ ํฅ์๋ ์ต์ ํ ๊ธฐ์ ์ด ์ ์ฉ๋์ด์ ์๋์ ๊ฒฉ์ฐจ๋ฅผ ๋ง์ด ์ค์๋ค.

๋ ๋ฒ์งธ ์์ ๊ทธ๋ฆผ์ ์๋ฐ๊ฐ OS์ ๋
๋ฆฝ์ ์ธ ํน์ง์ ๊ฐ๊ณ ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ทธ๋ฆผ์ด๋ค.
์ผ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ OS์ ๋ฐ๋ก ๋ง๋ฟ์ ์๊ธฐ ๋๋ฌธ์ OS์์ ์คํ์ํค๊ธฐ ์ํด์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ทธ OS์ ๋ง๊ฒ ๋ณ๊ฒฝํด์ผ ํ๋ค. ์ฆ OS ์ข
์์ ์ด๋ผ๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์๋ค.
ํ์ง๋ง ์๋ฐ์ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ OS์ ์ค๊ฐ ๋จ๊ณ์์ ์ํตํ๋ JVM์ด ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ OS์์๋ ํ์ฌ OS์ ๋ง๋ JVM์ ๋ค์ด๋ก๋ํ๋ค๋ฉด ํ๋ก๊ทธ๋จ์ ๋ณ๊ฒฝ ์์ด ์คํ์ด ๊ฐ๋ฅํ๋ค. ์ฆ OS์ ๋
๋ฆฝ์ ์ธ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค.
์์ฝํ๋ฉด JVM์ด๋ '๊ฐ์ ๋จธ์ '์ผ๋ก ๋ด๋ถ์ ์ธ ๋ณต์กํ ๊ตฌ์กฐ๋ก ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ ์ฃผ์ฒด๋ผ๊ณ ํ ์ ์๋ค.
๐JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
์๋ฐ์์์ ์ ์ฒด์ ์ธ ์คํ ๊ณผ์ ์ ์๋์ ์ด๋ฏธ์ง์ ๊ฐ๋ค.
์ด์ ๋ถํฐ JVM์ ๊ตฌ์ฒด์ ์ธ ์คํ๊ณผ์ ์ ์์๋ณด์

์ฐ์ ์์คํ์ผ์ ์์ฑํ๊ณ ์ ์ฅํ๊ฒ๋๋ฉด Java Compiler์ ์ํด .java์ ์์คํ์ผ์ด JVM์ด ์ดํดํ ์ ์๋ ๋ฐ์ดํธ์ฝ๋(Bytecode)๋ก ์ด๋ฃจ์ด์ง .classํ์ผ๋ก ์ ์ฅ๋๋ค.
1) Class Loader
๋ฐ์ดํธ์ฝ๋๋ก ์์ฑ๋ classํ์ผ์ JVM๋ด๋ก ๋ก๋ํ๋ ์ญํ ์ ํ๊ณ , ์ด๋ ๊ฒ ๋ก๋ฉ๋ class๋ค์ Runtime Data Area ๋ฐฐ์น๋๋ค. (์ด๋ฌํ ๋ก๋ ๊ณผ์ ์ ์ด์์ฒด์ ๊ฐ ๋ด๋นํ๋ค)
2) Execution Engine
Class Loader์ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋ ํด๋์ค์ Bytecode๋ค์ BinaryCode ์ฆ ๊ธฐ๊ณ์ด๋ก ๋ณ๊ฒฝํ๊ณ ๋ช
๋ น์ด ๋จ์๋ก ์คํํ๋ค.
๋ช
๋ น์ด์ ์คํ์ ์์์ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด ์ธํฐํ๋ฆฌํฐ(Interpreter) ๋ฐฉ์ ๋๋ JIT(Just-In-Time) ์ปดํ์ผ๋ฌ ๋ฐฉ์์ด ์๋ค. JIT ๋ฐฉ์์ ๊ฒฝ์ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์์ง๋ง ๋น์ฉ์ด ๋ฐ์ํ๋ค๋ ๋จ์ ์ด ์๋ค.
์ธํฐํ๋ฆฌํธ ๋ฐฉ์์ ์คํ ์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฝ์ด๊ฐ๋ฉด์ ํด๋น ๊ธฐ๋ฅ์ ๋์ํ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค.
3) Garbage Collector
Garbage Collector(GC)๋ Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์ฑ(์ ์ฌ)๋ ๊ฐ์ฒด๋ค ์ค์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ํ์ ํ ์ ๊ฑฐํ๋ ์ญํ ์ ํ๋ค.
GC๊ฐ ์ญํ ์ ํ๋ ์๊ฐ์ ์ ํํ ์ธ์ ์ธ์ง ์ ์ ์๋ค.
4) Runtime Data Area
JVM์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ ๋ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ค์ ์ ์ฌํ๋ ์์ญ์ด๋ค.
์ด ์์ญ์ ํฌ๊ฒ ์๋์ ๊ฐ์ด ๋๋๋ค.

4-1) Method area
- Class area, Method area, Static area๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
- ํ๋ก๊ทธ๋จ ์คํ ์ ํ์ํ ํด๋์ค๊ฐ ์ธ์คํด์ค์ ์์ฑ๊ณผ ์๊ด์์ด jvm ๋ฉ๋ชจ๋ฆฌ ์์ ๋ก๋ฉ๋๋ค. jvm ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ์ด ๋๋ฉด ๋ฉ์๋ ์์ญ์ ํด๋์ค์ ์ ๋ณด๋ค์ด ์ฌ๋ผ๊ฐ๊ฒ ๋๋ค.
- Static ์์ญ์ ์ฅ์ ์ ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์๊น์ง ํด๋์ค์ ๋ํ ์ ๋ณด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค. ๋จ์ ์ ๋ฌด๋ถ๋ณํ๊ฒ Static์ ๋จ๋ฐํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ก์๋จน๊ฒ ๋๋ค.
- ๋ชจ๋ ์ฐ๋ ๋๊ฐ ๊ณต์ ํ๋ ์์ญ์ด๋ค.
- ๋ฉ์๋ ์ ๋ณด ์ฆ ๋ฉ์๋ ์ด๋ฆ, ๋ฆฌํด ํ์ , ๋งค๊ฐ๋ณ์, ์ ๊ทผ์ ์ด์ ๋ฑ์ ์ ๋ณด ์ ์ฅ
- ์์ ํ(Constant pool)
1) Type์์ ์ฌ์ฉ๋ ์์๋ฅผ ์ ์ฅํ๋ ๊ณณ
2) ๋ฌธ์ ์์, ํ์ , ํ๋, Method reference๋ ์์ ํ์ ์ ์ฅ
3) final class ๋ณ์์ ๊ฒฝ์ฐ๋ ์์ ํ์ ๊ฐ ๋ณต์ฌ - Static ๋ณ์ ์ ์ฅ
4-2) Heap area
- New์ฐ์ฐ์๋ฅผ ํตํด ์์ฑํ ๊ฐ์ฒด, ๋๋ ์ธ์คํด์ค์ ๋ฐฐ์ด์ ์ ์ฅํ๋ ๊ณต๊ฐ์ผ๋ก JVM์ด ๊ด๋ฆฌํ๋ ์์ญ์ด๋ค.
- ํ ์์ญ์ ์์ฑ๋ ๊ฐ์ฒด ๋ฐ ๋ฐฐ์ด์ ์คํ ์์ญ์ ๋ณ์๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋์์ ์ฐธ์กฐํ๋ค.
- ๋ชจ๋ ์ฐ๋ ๋์์ ๊ณต์ ํ๋ ์์ญ์ด๋ค.
- ๊ฐ์ฒด๊ฐ ๋ ์ด์ ์ฐ์ด์ง ์๊ฑฐ๋, ์ฐธ์กฐ๊ฐ ๋์ด์ง ๊ฐ์ฒด์ ๊ฒฝ์ฐ Garbage Collector์ ์ํด ์ด ์์ญ์์ ์ ๊ฑฐ๋๋ค.
4-3) Stack area
- ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ์ํ์ ํ์ํ ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์คํ์ ํ ๋น๋ฐ๋๋ค
- ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ ์ด ๋ฉ์๋๊ฐ ์์ ์ ์ํํ๋ ๋์ ๋ฉ์๋ ์ ๋ณด, ์ง์ญ๋ณ์(๋งค๊ฐ๋ณ์ ํฌํจ)๋ค๊ณผ ์ฐ์ฐ์ ์ค๊ฐ ๊ฒฐ๊ณผ ๋ฑ์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ๊ธฐ๋ณธํ ๋ณ์๋ ์คํ ์์ญ์์ ์ง์ ๊ฐ์ ๊ฐ์ง๋ค.
- ์ฐธ์กฐํ ๋ณ์๋ ๊ฐ์ฒด์ ํ ์์ญ์ ๊ฐ์ฒด์ ์ฃผ์ ๊ฐ์ ๊ฐ์ง๊ณ ํ ์์ญ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
- Last In First Out (LIFO) ๊ตฌ์กฐ๋ก ํธ์ถ ์คํ์ ์ ์ผ ์์ ์๋ ๋ฉ์๋๊ฐ ํ์ฌ ์คํ ์ค์ธ ๋ฉ์๋์ด๊ณ ์๋์ ์๋ ๋ฉ์๋๊ฐ ๋ฐ๋ก ์์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ฉ์๋์ด๋ค.
4-4) PC Register
- Thread(์ฐ๋ ๋)๊ฐ ์์ฑ๋ ๋๋ง๋ค ์์ฑ๋๋ ์์ญ์ผ๋ก Program Counter ์ฆ, ํ์ฌ ์ฐ๋ ๋๊ฐ ์คํ๋๋ ๋ถ๋ถ์ ์ฃผ์์ ๋ช ๋ น์ ์ ์ฅํ๊ณ ์๋ ์์ญ์ด๋ค. (*CPU์ ๋ ์ง์คํฐ์ ๋ค๋ฆ)
- ์ด๊ฒ์ ์ด์ฉํด์ ์ฐ๋ ๋๋ฅผ ๋์๊ฐ๋ฉด์ ์ํํ ์ ์๊ฒ ํ๋ค.
4-5) Native method stack
- ์๋ฐ ์ธ ์ธ์ด๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ์ด๋ค.
๐Reference
https://jeong-pro.tistory.com/148
JVM ๊ตฌ์กฐ์ ์๋ฐ ๋ฐํ์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ (์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋ JVM์์ ์ผ์ด๋๋ ์ผ, ๊ณผ์
JVM(Java Virtual Machine) : ์๋ฐ ๊ฐ์ ๋จธ์ ์ผ๋ก ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ ์ฃผ์ฒด๋ค. CPU๋ ์ด์์ฒด์ (ํ๋ซํผ)์ ์ข ๋ฅ์ ๋ฌด๊ดํ๊ฒ ์คํ์ด ๊ฐ๋ฅํ๋ค. ์ฆ, ์ด์์ฒด์ ์์์ ๋์ํ๋ ํ๋ก์ธ์ค๋ก ์
jeong-pro.tistory.com
https://limkydev.tistory.com/51
[Java] JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
์ค๋์ ์๋ฐ JVM์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค. ์ฌ์ค JVM ๋ฉ๋ชจ๋ฆฌ์ ๋ํด์ ์ ์์์ผํ ๊น? ์ค์ค๋ก ์๋ฌธํ์ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋?๋ผ๊ณ ๋ต๋ณ์ ํ๋ค. ์๊ท๋ชจํ๋ก์ ํธ๋ ๊ฐ๋จํํ๋ก๊ทธ๋จ์
limkydev.tistory.com
https://cafe.naver.com/jjdev/227
[18] ์๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
1. ๋ฉ๋ชจ๋ฆฌํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํ ๋ฐ์ดํฐ ๋ฐ ๋ช ๋ น์ด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐโป ๋ฉ๋ชจ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถํ๋ ์ด์ - ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ก๊ทธ๋จ์ด๋๋ผ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ์ข์ฐ๋จ.- ๋ฉ๋ชจ๋ฆฌ ...
cafe.naver.com
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| (Java) Object toString() (0) | 2022.05.23 |
|---|---|
| (Java) syntax error: insert } to complete ClassBody (0) | 2022.05.23 |
| (Java) ๋ ผ๋ฆฌ ์ฐ์ฐ์ &,&& ์ |,|| ์ฐจ์ด (0) | 2022.05.23 |
| (Java)Scanner next(), nextLine ์ฐจ์ด (0) | 2022.05.06 |
| (Java)Compiler (0) | 2022.05.06 |