Post

JVM์— ๋Œ€ํ•ด

JVM์— ๋Œ€ํ•ด

๐ŸŽฏ ๋ฐฐ๊ฒฝ

์ž๋ฐ”์—์„œ ์ œ์ผ ์ค‘์š”ํ•˜๋‹ค๋Š”๊ฒŒ ๋ฌด์—‡์ด๋ƒ๊ณ  ๋ฌผ์–ด๋ณด๋ฉด ๋Œ€๋ถ€๋ถ„ JVM์ด๋ผ๊ณ  ๋งํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด JVM์€ ์ž๋ฐ”์—์„œ ํ•ต์‹ฌ ๋™์ž‘์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์šฐ๋ฆฌ๋Š” JVM์— ๋Œ€ํ•ด ์ž˜ ์•Œ์ง€ ๋ชปํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด JVM์„ ๋ชฐ๋ผ๋„ JAVA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  JVM์„ ํ•™์Šตํ•˜๋Š” ๋ชฉ์ ์€ ๋‹ค๋ฅธ ์ง€์‹์„ ํ•™์Šต ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JVM์„ ์•„๋Š”๊ฒƒ์ด ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

โš™๏ธ ํ•ต์‹ฌ ๋‚ด์šฉ (What & How)

  • ๐Ÿ—๏ธ JVM์— ๋Œ€ํ•ด
  • โš™๏ธ JVM ๋™์ž‘๋ฐฉ์‹

๐Ÿ”‘ ๊ฒฐ๊ณผ์™€ ์ธ์‚ฌ์ดํŠธ (So what?)

๐Ÿ—๏ธ JVM์— ๋Œ€ํ•ด

JVM์€ Java Virtual Machine์˜ ์•ฝ์ž๋กœ, ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ๋จธ์‹ ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ง€๊ธˆ์ด์•ผ ๋งŽ์€๊ฒƒ๋“ค์ด ๋ฐœ์ „ํ•ด์„œ ์–ด๋””์—์„œ๋“ ์ง€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ, ์ž๋ฐ”๊ฐ€ ํƒ„์ƒํ–ˆ์„๋•Œ๋Š” 1995๋…„๋„๋กœ ์•Œ๊ณ  ์žˆ๋‹ค. ๊ทธ๋•Œ๋Š” ์œˆ๋„์šฐ์—์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์™€ ๋ฆฌ๋ˆ…์Šค์—์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ์‹คํ–‰ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํƒ„์ƒํ•œ๊ฒƒ์ด JVM์ด๋ผ ์•Œ๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, JVM์€ ์–ด๋–ป๊ฒŒ ํ•ด์„œ ๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฑธ๊นŒ?

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, JVM์€ ์ž๋ฐ”์˜ ๊ฐ€์ƒ๋จธ์‹ ์ด๋‹ค. ์–ด๋””์—์„œ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋œป์€ JVM๋‚ด์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์•˜๋‚˜ ์‹ถ๋‹ค. ์ด์ œ ์ด๊ฑฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

โš™๏ธ JVM ๋™์ž‘๋ฐฉ์‹

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

1
2
3
4
5
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

์•„์‰ฝ๊ฒŒ๋„ ์ด ์ฝ”๋“œ๋Š” ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์šด ๊ณ ๊ธ‰ ์–ธ์–ด(Java ์†Œ์Šค์ฝ”๋“œ)๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํ“จํ„ฐ๋Š” ์ด ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์ด ์ฝ”๋“œ๋ฅผ ์–ด๋”˜๊ฐ€์—์„œ ํ•ด์„ํ•ด์ฃผ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•œ๋ฐ, ์ด ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ JVM(Java Virtual Machine)์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ JVM์ด ์ด ์ฝ”๋“œ๋ฅผ ๊ณง๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์• ์„ํ•˜๊ฒŒ๋„ JVM๋„ ์ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ดํ•ดํ•  ์ˆ˜๋Š” ์—†๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ ์ „์— ๋ฐ˜๋“œ์‹œ ์ปดํŒŒ์ผ์ด๋ผ๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค. ์ด ๊ณผ์ •์€ .java ํŒŒ์ผ์„ .class ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์ž‘์—…์ด๋ฉฐ, ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ปดํŒŒ์ผ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€, Java ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •๊นŒ์ง€ ์‚ดํŽด๋ณด์•˜๋‹ค.

๊ทธ๋Ÿฌ๋ฉด JVM์€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ• ๊นŒ?

์ผ๋ฐ˜์ ์œผ๋กœ JVM์€ ์Šคํƒ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ํ•ด์„ํ•˜๋ฉฐ ์‹คํ–‰ํ•œ๋‹ค. ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, JVM์€ ์ด๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ํ•ด์„ํ•˜๋ฉด์„œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด ๋ฐฉ์‹์„ ์šฐ๋ฆฌ๋Š” ์ธํ„ฐํ”„๋ฆฌํŒ…(Interpreting)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋ฐฉ์‹์€ ๋น„ํšจ์œจ์ ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋™์ผํ•œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋งค๋ฒˆ ํ•ด์„ํ•ด์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๊ณ , ๊ทธ์— ๋”ฐ๋ผ ์†Œ๋ชจ๋˜๋Š” ๋ฆฌ์†Œ์Šค ๋น„์šฉ๋„ ๋ฌด์‹œํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ JVM์€ ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ ์˜์—ญ์„ ํƒ์ง€ํ•˜์—ฌ, ์ด ๋ถ€๋ถ„์„ JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ(๊ธฐ๊ณ„์–ด)๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ณ€ํ™˜๋œ ์ฝ”๋“œ๋Š” ํ•ด์„ ์—†์ด ๋ฐ”๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ํ›จ์”ฌ ํ–ฅ์ƒ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ์ตœ์ ํ™” ๋Œ€์ƒ์ด ๋˜๋Š” ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ์˜์—ญ์„ ํ”ํžˆ Hot Method๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. (์ฐธ๊ณ ๋กœ, HotSpot์ด๋ผ๋Š” ์šฉ์–ด๋Š” JVM์˜ ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด ์ด๋ฆ„์ด๋‹ค.)

๊ฒฐ๊ตญ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ Java ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , JVM์€ ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ฑฐ๋‚˜ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด ์‹คํ–‰ํ•จ์œผ๋กœ์จ Java ์ฝ”๋“œ๋Š” ์‹ค์ œ ํ•˜๋“œ์›จ์–ด ์œ„์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด์ œ ํ•˜๋‚˜์˜ ์งˆ๋ฌธ์„ ๋˜์ ธ๋ณด์ž. Java์—๋Š” ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ, ํด๋ž˜์Šค ๋“ฑ ๋‹ค์–‘ํ•œ ์š”์†Œ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ•˜๋‚˜์˜ ๊ณต๊ฐ„์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ? ์•„๋‹ˆ๋ฉด ๊ฐ ์š”์†Œ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ผ๊นŒ?

๐Ÿข JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ณด๋ฉด ์Šคํƒ, PC Register, Native Method Stack, ํž™, ๋ฉ”์†Œ๋“œ ์˜์—ญ์ด ์ด๋ ‡๊ฒŒ ์กด์žฌํ•œ๋‹ค.

์ด๊ฒƒ๋“ค์ด ์–ด๋–ค๊ฒƒ์ธ์ง€ ์ƒ๊ฐ์„ ํ•˜๊ธฐ์ „์— ์ด๋ ‡๊ฒŒ ์™œ ๊ตฌ๋ถ„์ด ๋˜๋Š”์ง€๋ถ€ํ„ฐ ์ƒ๊ฐ์„ ํ•ด์•ผ ํ• ๊ฑฐ ๊ฐ™๋‹ค.

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

๐Ÿ“Œ JVM ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๋ณ„ ์ •๋ณด

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ €์žฅ๋˜๋Š” ์ •๋ณด๊ด€๋ จ ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ช…๋ น์–ด
์Šคํƒ- ์ง€์—ญ ๋ณ€์ˆ˜
- ํ”ผ์—ฐ์‚ฐ์ž ์Šคํƒ
- ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ”„๋ ˆ์ž„
bipush, iload, iadd
invoke*, istore, aload
astore
ํž™- ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค
- ๋ฐฐ์—ด
new, getfield
putfield, areturn
๋ฉ”์„œ๋“œ ์˜์—ญ- ํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
- static ๋ณ€์ˆ˜
- ์ƒ์ˆ˜ ํ’€
- final ์ƒ์ˆ˜
getstatic, putstatic
invokestatic
PC ๋ ˆ์ง€์Šคํ„ฐํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ JVM ๋ช…๋ น์–ด ์ฃผ์†Œ(JVM ์ž๋™ ๊ด€๋ฆฌ)
๋„ค์ดํ‹ฐ๋ธŒ ์ŠคํƒJNI๋ฅผ ํ†ตํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ •๋ณดnative ํ‚ค์›Œ๋“œ ๋ฉ”์„œ๋“œ

๊ฒฐ๊ตญ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ €์žฅ์„ ์‹œํ‚จ๋‹ค๋Š”๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋Š” ์˜์›ํžˆ ์ €์žฅ์ด ๋˜์–ด์งˆ๊นŒ?

์ƒ๊ฐ์„ ํ•ด๋ณด๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ •๋ณด๊ฐ€ ์˜์›ํžˆ ์ €์žฅ์ด ๋œ๋‹ค๋ฉด, java๋Š” ์ ์  ๋А๋ ค์งˆ๊ฑฐ๋ผ ์ƒ๊ฐํ•œ๋‹ค. ๊ฒฐ๊ตญ ๋ฉ”๋ชจ๋ฆฌ๋“ค์€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ œ๊ฑฐ๋ฅผ ์‹œ์ผœ์•ผ ํ•œ๋‹ค๋Š” ์†Œ๋ฆฌ์ธ๋ฐ ์–ด๋–ป๊ฒŒ ์ œ๊ฑฐ๋ฅผ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ?

ํž™ -> GC(Garbage Collector)๊ฐ€ ๊ฐ์ฒด์— ๋” ์ด์ƒ ์ฐธ์กฐ ์—†์„ ๋•Œ Stack -> ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ์‹œ์  Method Area -> ํด๋ž˜์Šค ์–ธ๋กœ๋“œ ์‹œ์  (๊ฑฐ์˜ ์—†์Œ) PC Register -> ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ ์‹œ Native Method Stack -> ๋„ค์ดํ‹ฐ๋ธŒ ํ˜ธ์ถœ ์ข…๋ฃŒ ์‹œ

์ด๊ฒƒ์„ ์ž˜ ์ฝ์–ด๋ณด๋ฉด ์Šคํƒ,๋ฉ”์†Œ๋“œ ์˜์—ญ, PC Register, ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํƒ์€ ์ข…๋ฃŒ์‹œ ์‚ญ์ œ์ธ๊ฑธ ์•Œ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด GC๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๊ฐ์ฒด๊ฐ€ ๋” ์ด์ƒ ์ฐธ์กฐํ•˜์ง€ ์•Š์„๋•Œ ์ œ๊ฑฐ๋ฅผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š” ์ด์•ผ๊ธฐ๋Š” ๊ฐ์ฒด๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ข…๋ฃŒ ์‹œ์ ์„ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค๋Š” ์†Œ๋ฆฌ๋ผ ์ƒ๊ฐ์ด ๋“ ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ฐ์ฒด๋Š” new๋กœ ์ƒ์„ฑ์ด ๋˜์–ด์ง€๋ฉด ์–ธ์ œ๋“ ์ง€ ๊บผ๋‚ด์–ด์„œ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํ‚ค์›Œ๋“œ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ข…๋ฃŒ ์‹œ์ ์„ ํŒŒ์•…ํ•ด ์ œ๊ฑฐ๊ฐ€ ์‰ฝ๋‹ค๊ณ  ๋А๊ปด์ง„๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์Šคํƒ ๊ฐ™์€ ๊ฒฝ์šฐ๋„ ์Šคํƒ์œผ๋กœ ์Œ“์ด๊ธฐ๋•Œ๋ฌธ์— ์Šคํƒ์ด ๋น ์ ธ๋‚˜๊ฐˆ๋•Œ ์ง€์šฐ๋ฉด ๋˜๊ธฐ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ“ ์š”์•ฝ (One-liner)

JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์™€ ๊ด€๋ฆฌ

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๋ณ„ ํŠน์ง•

  • ์Šคํƒ: ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์ž๋™ ์ƒ์„ฑ/์ œ๊ฑฐ, ์ง€์—ญ ๋ณ€์ˆ˜์™€ ์—ฐ์‚ฐ ์Šคํƒ ๊ด€๋ฆฌ
  • ํž™: ๋™์  ํ• ๋‹น๋œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด ์ €์žฅ, GC์˜ ์ฃผ์š” ๊ด€๋ฆฌ ๋Œ€์ƒ
  • ๋ฉ”์„œ๋“œ ์˜์—ญ: ํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, static ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ํ’€ ์ €์žฅ
  • PC ๋ ˆ์ง€์Šคํ„ฐ: ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๋ช…๋ น์–ด ์ฃผ์†Œ ์ถ”์ 
  • ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํƒ: JNI ํ˜ธ์ถœ ์‹œ ์‚ฌ์šฉ

๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ ๋ฐฉ์‹

  • ์ž๋™ ์ •๋ฆฌ: ์Šคํƒ, PC ๋ ˆ์ง€์Šคํ„ฐ, ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํƒ์€ ์‚ฌ์šฉ ์ข…๋ฃŒ ์‹œ ์ž๋™ ์ •๋ฆฌ
  • GC ๊ด€๋ฆฌ: ํž™ ์˜์—ญ์€ ์ฐธ์กฐ๊ฐ€ ์—†์–ด์งˆ ๋•Œ GC๊ฐ€ ํšŒ์ˆ˜
  • ํด๋ž˜์Šค ์–ธ๋กœ๋“œ: ๋ฉ”์„œ๋“œ ์˜์—ญ์€ ๊ฑฐ์˜ ์ •๋ฆฌ๋˜์ง€ ์•Š์Œ

ํ•ต์‹ฌ ์ธ์‚ฌ์ดํŠธ

  • ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๊ฐ๊ฐ์˜ ํŠน์„ฑ์— ๋งž๋Š” ์ตœ์ ์˜ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅ
  • ๊ฐ์ฒด๋Š” ์ฐธ์กฐ ์ถ”์ ์ด ๋ณต์žกํ•˜์—ฌ GC๊ฐ€ ๊ด€๋ฆฌ
  • ๋‚˜๋จธ์ง€ ์˜์—ญ์€ ๋ช…ํ™•ํ•œ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋”ฐ๋ผ ์ž๋™ ์ •๋ฆฌ
1
2
JVM์€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ๊ฐ ์˜์—ญ์„ ๊ตฌ๋ถ„ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ํŠน์„ฑ์— ๋งž๋Š” ๊ด€๋ฆฌ ์ „๋žต์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. 
์ด๋Š” ๋งˆ์น˜ ๋ถ„๋ฆฌ์ˆ˜๊ฑฐ๋ฅผ ํ†ตํ•ด ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

references

  • https://steady-coding.tistory.com/305
This post is licensed under CC BY 4.0 by the author.