Bibi's DevLog ๐ค๐
[Java - JVM] JVM ๊ฐ๋ ๊ณผ ๋์์๋ฆฌ (๊ธฐ์ด) ๋ณธ๋ฌธ
[Java - JVM] JVM ๊ฐ๋ ๊ณผ ๋์์๋ฆฌ (๊ธฐ์ด)
๋น๋น bibi 2021. 2. 16. 00:10JVM - Java Virtual Machine (JVM์ด๋)
: ์๋ฐ ์์ฉํ๋ก๊ทธ๋จ์ ์คํํ๋ ์คํ ์์ง.
JVM์ JRE์ ์ผ๋ถ์ด๋ค.
- JRE : Java Runtime Environment (ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
์๋ฐ์ implementation์ด JVM์ด๋ค.
- implementation : ๋ช ์ธ์๋ฅผ ๋์๊ฐ๊ฒ ํ๋ ๊ฒ.
.java
ํ์ผ : ์ฐ๋ฆฌ๊ฐ ์๋ฐ ์ธ์ด๋ก ์ฝ๋ฉํ ํ์ผ
.class
ํ์ผ : .java
ํ์ผ์ javac
๋ช
๋ น์ผ๋ก Java ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผํ ํ์ผ. ๋ฐ์ดํธ์ฝ๋๋ก ๋์ด ์๋ค
ํด๋์ค ํ์ผ์ด ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ฉฐ ์๋ฐ ํ์ผ์ด ์คํ๋๋ ๊ฒ์ด๋ค.
JVM์ ๊ตฌ์ฑ์์(3๊ฐ์ง)
1.Class Loader Sybsystem ํด๋์ค ๋ก๋ ํ์์์คํ
- ํ์ผ์ ์คํํ๋ฉด ํด๋์ค ๋ก๋๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํด๋์ค๋ฅผ ๋ก๋ํ๋ค.
- loading-linking-initialization ์ ๊ฑฐ์น๋ค.
- ๋์ ์ผ๋ก ํด๋์ค ๋ก๋ฉ ๊ฐ๋ฅ
= ํด๋์ค๊ฐ ํ์ํ ์์ ์ ๋ก๋ฉํ ์ ์๋ค. - *loading*
: ํด๋์ค ์ ๋ณด(FQCN - fulli qualified class name. ์ ๋๊ฒฝ๋ก๊ฐ ํฌํจ๋ ํด๋์ค๋ช ) ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ
ํด๋์ค ํ์ผ์ ์ฝ๊ณ ๋ฐ์ด๋๋ฆฌ๋ฐ์ดํฐ๋ฅผ ์์ฑํด ๋ฉ์๋ ์์ญ์ ์ ์ฅํจ.- ํด๋์ค ํ์ผ ํ๋์ ๋ํด ํ๋์ Class ๊ฐ์ฒด๋ง ์์ฑ๋จ.
- linking ์ฐ๊ฒฐ
: ํด๋์ค ํ์ผ์ด ์ ์์ ์ธ์ง ๊ฒ์ฌ(verify)- ์ ์ ๋ณ์๋ฅผ ๊ธฐ๋ณธ๊ฐ(
0
)์ผ๋ก ์ ์ฅ - verification : ํด๋์ค ํ์ผ์ ์ ํ์ฑ์ ํ์ธ. (ํ์ ๋ฑ). ์ฌ๋ฐ๋ฅด์ง ์์ผ๋ฉด ๋ฐํ์ ์์ธ
java.lang.VerifyError
๋ฐ์ - preparation : ํด๋์ค ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ด๊ธฐํํจ
- resolution
- ์ ์ ๋ณ์๋ฅผ ๊ธฐ๋ณธ๊ฐ(
- initialization ์ด๊ธฐํ
- static ๋ณ์๋ฅผ ์ด๊ธฐํ๋ ๊ฐ์ผ๋ก ์ ์ฅํจ
- static block ์คํ
: ํด๋์ค๋ก๋์์ static์ ๋จผ์ ์คํํ๋ค.
2.Runtime Data Area
- ํด๋์ค ๋ก๋์ ์ฌ๋ผ์จ ํด๋์ค๋ฅผ ๊ฐ์ ธ์จ๋ค.
JVM ๋ฉ๋ชจ๋ฆฌ
๋ฉ์๋, ํ, ์คํ, PC register๋ก ๋์ด ์๋ค
- Method Area ๋ฉ์๋ ์์ญ : (Data, Stack area)
์๋์ ๊ฒ๋ค ์ธ์ ๋๋จธ์ง ๊ฒ๋ค์ด ๋ชจ๋ ๋ฉ์๋ ์์ญ์ ๋ค์ด๊ฐ๋ค.- ํด๋์ค ์ ๋ณด, ๋ฆฌํฐ๋ด, static๋ณ์, ๋ฉ์๋ ๋ฐ ๋ณ์ ์ ๋ณด
- JVM ํ๋๋น 1๊ฐ๋ง ์๊ธฐ๋ฉฐ, ๊ณต์ ์์์ด๋ค
- *Heap Area ํ ์์ญ *
- ๋ชจ๋ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ ์ฅํจ
- ์์ฑ์๊ฐ ์คํ๋จ
- JVM ํ๋๋น 1๊ฐ๋ง ์๊ธฐ๋ฉฐ, ๊ณต์ ์์์ด๋ค
- Stack Area ์คํ ์์ญ
: ๋ฉ์๋๊ฐ ๋ค์ด๊ฐ๋ ๊ณต๊ฐ. ๋ฉ์๋์ ์ง์ญ๋ณ์๋ง ์ ์ฅ๋๋ค - ์ฝ์คํ- ์ฐ๋ ๋๋ง๋ค ๋ณ๋์ run-time stack area๋ฅผ ๊ฐ๋๋ค.
(์ฐ๋ ๋๋ง๋ค ๋ณ๋์ ๋ฉ์๋๋ฅผ ์คํ) - ์ฐ๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด run-time stack์ JVM์ ์ํด ํ๊ดด๋๋ค.
- ๊ณต์ ์์์ด ์๋๋ค.
- ์ฐ๋ ๋๋ง๋ค ๋ณ๋์ run-time stack area๋ฅผ ๊ฐ๋๋ค.
- Program Counter register (PC Register)
: ํ๋ก๊ทธ๋จ(์ฝ๋)๋ฅผ ์ด๋๊น์ง ์คํํ๋์ง ์๋ ค์ค- ์ค๋ ๋์ ํ์ฌ ์คํ ์ฃผ์๋ฅผ ์ ์ฅํจ
(๊ฐ ์ฐ๋ ๋๊ฐ ์ด๋๊น์ง ์คํ๋์๋์ง ์ ์ฅ) - (CPU์ program counter๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ง๋ค์ด ๋ ๊ฒ
- ๊ฐ ์ฐ๋ ๋๋ง๋ค ๋ณ๋์ PC Register๊ฐ ์์.
- ์ค๋ ๋์ ํ์ฌ ์คํ ์ฃผ์๋ฅผ ์ ์ฅํจ
3.Execution Engine ์คํ ์์ง
- 2.Runtime Data Area์ ์๋ .class(๋ฐ์ดํธ ์ฝ๋)๋ฅผ ์คํํ๋ค.
- ๊ฐ JVM ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์๋ ๋ฐ์ดํฐ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํด ๋ช ๋ น์ ์คํํจ.
- ์๋ฐ ์คํ์ ํ์ํ ํ๋ก๊ทธ๋จ.
- interpreter, JIT, GC ์ธ ๋ถ๋ถ์ผ๋ก ๋์ด ์๋ค
- Interpreter ์ธํฐํ๋ฆฌํฐ
: ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํ ์ค์ฉ ํด์ํ์ฌ ์คํํจ.
ํ๋์ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ ๋ฒ ํธ์ถํ๋ฉด, ๋งค๋ฒ ํด์ํด์ผ ํจ. (JIT๊ฐ ์ด ๋จ์ ์ ์ปค๋ฒํจ) - JIT (Just-In-Time compiler)
: ์ธํฐํ๋ฆฌํฐ์ ํจ์จ์ฑ์ ๋์.
์ ์ฒด ํ์ดํธ์ฝ๋๋ฅผ ์ปดํ์ผํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณ๊ฒฝํด,
์ธํฐํ๋ฆฌํฐ๊ฐ ๋ฉ์๋๋ฅผ ๋ฐ๋ณต ํธ์ถํ ๋ ๋ง๋ค JIT๊ฐ ํด์ํ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ ๊ณตํจ.
์ธํฐํ๋ฆฌํฐ๊ฐ ๋งค๋ฒ ๋ค์ ํด์ํ์ง ์์๋ ๋์ด ํจ์จ์ฑ์ด ํฅ์๋จ - GC (Garbage Collector)
: ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ํ๊ดดํจ.
๋ฐ์ดํธ์ฝ๋๋ ์ด๋์ ์ ์ฅ๋๋? - ๋ฉ์๋ ์์ญ
์ ์ ๋ณ์๋? - ๋ฉ์๋ ์์ญ์, ํด๋์ค ๋ก๋๊ฐ ๋ก๋ฉํ ๋
์ธ์คํด์ค ๋ณ์๋? - ํ ์์ญ์, new๋ฅผ ๋ง๋ฌ์ ๋ ์ ์ฅ๋๋ค.
[
JVM( Java Virtual Machine )์ด๋
JAVA๋ฅผ ๊ณต๋ถํ๋ ๋ฐ ์์ด ๊ธฐ๋ณธ์ด ๋๋ JVM์ด ๋ฌด์์ธ์ง ํ์ตํ๊ณ , JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ Garbage collector, Execution Engine, Class Loader์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ค๋ช ๋ฑ JVM์ด ์ด๋ป๊ฒ ๋์๊ฐ๋์ง์ ๋ํ ๊ธฐ์ด๋ฅผ ์ก๋
honbabzone.com
](https://honbabzone.com/java/java-jvm/)
์ด ํ์ด์ง๋ฅผ ํตํด ๋ ๊ณต๋ถํ์.
'๐ฅ BE ๋ฐฑ์๋ > Java ์๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์์ฑ์์ ๊ธฐ๋ณธ์์ฑ์ (0) | 2021.02.16 |
---|---|
[Java] ์์์ enum (0) | 2021.02.16 |
[Java] (IntelliJ) ํ ์คํธ ํด๋์ค๊ฐ ์์ฑ๋์ง ์๋ ์ค๋ฅ (Failed to Create Class - Cannot Create Class '...') (0) | 2021.02.14 |
TDD, ํ ์คํธ์ฝ๋ ๊ฐ๋ ๋ฐ Gradle, JUnit ์ด๊ธฐ์ค์ ํ๊ธฐ (0) | 2021.02.10 |
[Java - ์๋ฐ์ ์ ] 26์ฅ. ํ์ผ I/O ๊ธฐ์ด (Fileํด๋์ค) (0) | 2021.02.07 |