์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[์ž๋ฐ”] JVM ๊ตฌ์กฐ

๐Ÿ˜Ž ์ง€์‹ in Action/Java & Kotlin

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 2025. 3. 27. 19:53

๋ณธ๋ฌธ

728x90

์ž๋ฐ” ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ 

https://inpa.tistory.com/entry/JAVA-%E2%98%95-JVM-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD-%EC%8B%AC%ED%99%94%ED%8E%B8

 

Java Compiler : JVM ์ด ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” Java Byte Code๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค

Java Byte Code : Java Compiler์— ์˜ํ•ด ์ˆ˜ํ–‰๋  ๊ฒฐ๊ณผ๋ฌผ๋กœ .class ํŒŒ์ผ์ด๋‹ค

Class Loader : JVM ๋‚ด๋กœ .class ํŒŒ์ผ์„ ๋กœ๋“œํ•˜์—ฌ Loading ๋œ ํด๋ž˜์Šค๋“ค์„ Runtime Data Area ์— ๋ฐฐ์น˜ํ•œ๋‹ค

Execution Engine : Loading ๋œ ํด๋ž˜์Šค์˜ Bytecode๋ฅผ Interpret(ํ•ด์„) ํ•œ๋‹ค

Runtime Data Area : JVM์ด๋ผ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด OS์—์„œ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„

 

์ž๋ฐ”์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์˜ ์˜๋ฏธ 

Java ํŒŒ์ผ์„ ์ปดํŒŒ์ผ๋Ÿฌ(javac)๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๋กœ ๋งŒ๋“ค๊ณ ,

์ด๋ฅผ ClassLoader๊ฐ€ JVM๋‚ด๋กœ ๋กœ๋”ฉํ•œ๋‹ค.

๋กœ๋”ฉ๋œ Class ํŒŒ์ผ๋“ค์€ Exceute Engine์„ ํ†ตํ•ด Interpret(ํ•ด์„)๋œ๋‹ค.

ํ•ด์„๋œ ํ”„๋กœ๊ทธ๋žจ์€ Runtime Data Area ์— ๋ฐฐ์น˜๋˜์–ด ์‹ค์งˆ์ ์ธ ์ˆ˜ํ–‰์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

 

ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™” ์ˆœ์„œ

1. static : ํด๋ž˜์Šค๊ฐ€ ๋กœ๋“œ ๋  ๋•Œ ๋ณ€์ˆ˜๊ฐ€ ์ œ์ผ ๋จผ์ € ์ดˆ๊ธฐํ™” ๋œ๋‹ค.

2. field 

3. ์ƒ์„ฑ์ž : ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, JVM์ด ๋‚ด๋ถ€์ ์œผ๋กœ Locking (Thread-Safe ์˜์—ญ)


ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ

- ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์Šค๋ ˆ๋“œ์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ค„ ๋ฒˆํ˜ธ 

- ์Šค๋ ˆ๋“œ ํ”„๋ผ์ด๋น— 

 

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์€ CPU ์ฝ”์–ด๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ต๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค.

ํŠน์ • ์‹œ๊ฐ์— ๊ฐ ์ฝ”์–ด๋Š” ํ•œ ์Šค๋ ˆ๋“œ์˜ ๋ช…๋ น์–ด๋งŒ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ, ์Šค๋ ˆ๋“œ ์ „ํ™˜ ํ›„ ์ด์ „์— ์‹คํ–‰ํ•˜๋‹ค ๋ฉˆ์ถ˜ ์ง€์ ์„ ์ •ํ™•ํ•˜๊ฒŒ ๋ณต์›ํ•˜๋ ค๋ฉด ์Šค๋ ˆ๋“œ ๊ฐ๊ฐ์—๋Š” ๊ณ ์œ ํ•œ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ฆ‰, ๊ฐ ์Šค๋ ˆ๋“œ์˜ ์นด์šดํ„ฐ๋Š” ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋…๋ฆฝ๋œ ์˜์—ญ์ธ ์Šค๋ ˆ๋“œ ํ”„๋ผ์ด๋น— ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค. 

 

์Šค๋ ˆ๋“œ๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ ์ค‘์ผ ๋•Œ PC๋Š” Undefined์ด๋‹ค 

 

์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹  ์Šคํƒ 

- ์Šค๋ ˆ๋“œ ํ”„๋ผ์ด๋น—

๊ฐ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ ๋•Œ๋งˆ๋‹ค ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์€ ์Šคํƒ ํ”„๋ ˆ์ž„์„ ๋งŒ๋“ค์–ด ์ง€์—ญ ๋ณ€์ˆ˜ ํ…Œ์ด๋ธ”, ํ”ผ์—ฐ์‚ฐ์ž ์Šคํƒ, ๋™์  ๋งํฌ, ๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜๊ฐ’ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. ์Šคํƒ ํ”„๋ ˆ์ž„์„ ๊ฐ€์ƒ ๋จธ์‹  ์Šคํƒ์— ํ‘ธ์‹œํ•˜๊ณ  ๋ฉ”์„œ๋“œ๊ฐ€ ๋๋‚˜๋ฉด ํŒํ•˜๋Š” ์ผ์„ ๋ฐ˜๋ณตํ•œ๋‹ค. 

 

์ง€์—ญ ๋ณ€์ˆ˜ ํ…Œ์ด๋ธ”

์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ปดํŒŒ์ผ ํƒ€์ž„์— ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…, ๊ฐ์ฒด ์ฐธ์กฐ, ๋ฐ˜ํ™˜ ์ฃผ์†Œ ํƒ€์ž… ์„ ์ €์žฅํ•œ๋‹ค

์ด ๋ฐ์ดํ„ฐ ํƒ€์ž…๋“ค์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์„ ์ง€์—ญ ๋ณ€์ˆ˜ ์Šฌ๋กฏ์ด๋ผ ํ•œ๋‹ค 

์Šฌ๋กฏ ํ•˜๋‚˜์˜ ํฌ๊ธฐ๋Š” 32๋น„ํŠธ์ด๋‹ค. ๋”ฐ๋ผ์„œ, double ํƒ€์ž…์ฒ˜๋Ÿผ ๊ธธ์ด๊ฐ€ 64๋น„ํŠธ์ธ ๋ฐ์ดํ„ฐ๋Š” ์Šฌ๋กฏ ๋‘ ๊ฐœ๋ฅผ ์ฐจ์ง€ํ•˜๋ฉฐ ๋‚˜๋จธ์ง€ ํƒ€์ž…์€ ๋ชจ๋‘ ์Šฌ๋กฏ ํ•˜๋‚˜์— ์ €์žฅ๋œ๋‹ค. ์ง€์—ญ ๋ณ€์ˆ˜ ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„(์Šฌ๋กฏ ๊ฐœ์ˆ˜)์€ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ํ• ๋‹น๋œ๋‹ค. 

 

๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ

๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค 

 

์ž๋ฐ” ํž™

- ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ 

๊ฐ์ฒด ํ• ๋‹น ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ํ• ๋‹น ๋ฒ„ํผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋‚˜๋‰จ

๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋ฐ” ํž™์— ์ €์žฅ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š์Œ 

- ๊ฐ€์ƒ ๋จธ์‹ ์ด ๊ตฌ๋™๋  ๋•Œ ๋งŒ๋“ค์–ด์ง

- ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„ 

 

๋ฉ”์„œ๋“œ ์˜์—ญ

- ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ 

- ํƒ€์ž… ์ •๋ณด, ์ƒ์ˆ˜, ์ •์  ๋ณ€์ˆ˜, JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•œ ์ฝ”๋“œ ์บ์‹œ

- ๋…ผํž™ 

 

๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€

- ๋ฉ”์„œ๋“œ ์˜์—ญ์˜ ์ผ๋ถ€ 

- ์ƒ์ˆ˜ ํ’€ ํ…Œ์ด๋ธ” : ํด๋ž˜์Šค ๋ฒ„์ „, ํ”ผ๋ฆฌ๋“œ, ๋ฉ”์„œ๋“œ, ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ ํด๋ž˜์Šค ํŒŒ์ผ์— ํฌํ•จ๋œ ์„ค๋ช… ์ •๋ณด์— ๋”ํ•ด ์ปดํŒŒ์ผํƒ€์ž„์— ์ƒ์„ฑ๋œ ๋‹ค์–‘ํ•œ ๋ฆฌํ„ฐ๋Ÿด๊ณผ ์‹ฌ๋ฒŒ ์ฐธ์กฐ๊ฐ€ ์ €์žฅ๋จ 

- ๋™์  

๋Ÿฐํƒ€์ž„์—๋„ ๋ฉ”์„œ๋“œ ์˜์—ญ์˜ ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€์— ์ƒˆ๋กœ์šด ์ƒ์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Œ String ํด๋ž˜์Šค์˜ intern() ๋ฉ”์„œ๋“œ 

 

๋‹ค์ด๋ ‰ํŠธ ๋ฉ”๋ชจ๋ฆฌ 

- ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ํ• ๋‹น 

- ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ, ์Šค์™€ํ”„ ํŒŒํ‹ฐ์…˜, ํŽ˜์ด์ง• ํŒŒ์ผ ๊ณผ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋„˜์„ ์ˆ˜ ์—†์Œ 

์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ํ•ฉ์ด ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด์„œ๋ฉด OutOfMemoryError ๋ฐœ์ƒ 

 

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ