Home /Java/ ๐Ÿ’ฌ JVM์˜ ์Šคํƒ๊ณผ ํž™๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
Post
Cancel

/Java/ ๐Ÿ’ฌ JVM์˜ ์Šคํƒ๊ณผ ํž™๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ



JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐฉ์‹


JVM์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Stack Memory ์™€ Heap Memory ๋ผ ๋ถˆ๋ฆฌ๋Š” ๋‘๊ฐ€์ง€ ์ €์žฅ ๊ณต๊ฐ„์„ ์ด์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
์ด๋“ค์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ํ•œ ์ค„ ์ฝ๋Š” ๊ฒƒ์ด๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ”๋“œ๋“ค์€ ํ•œ ์ค„ ํ•œ ์ค„ ์ฝํ˜€์„œ Stack์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๊ณต๊ฐ„์— ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์ธ๋‹ค.
๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ ๋ณ€์ˆ˜๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ„๋‹ค๊ณ  ํ•ด์„œ LIFO(Last In First Out) ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ ๋„ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ, ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ Stack์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
๊ฐ„๋‹จํ•œ ๋ณ€์ˆ˜์ธ Primitive Type์˜ ๋ณ€์ˆ˜๋“ค์€ Stack์— ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ,
๋ณต์žกํ•œ ๋ณ€์ˆ˜๋Š” Heap ๊ณต๊ฐ„์— ์ €์žฅ๋˜๊ณ  Stack์—๋Š” ํ•ด๋‹น Heap ๊ณต๊ฐ„์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋œ๋‹ค.


โ€ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด Stack์— ์ €์žฅ๋˜๋Š”๋ฐ,
๋ฐ์ดํ„ฐ๋„ Stack์— ์ €์žฅ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ์ธ ๊ฒฝ์šฐ์ด๋ฉฐ,
์กฐ๊ธˆ๋งŒ ๋ณต์žกํ•ด์ง€๋”๋ผ๋„ Stack์—๋Š” ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๊ฐ’๋งŒ ์ €์žฅ๋˜๊ณ  ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” Heap ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค. โ€œ



JVM์˜ ์Šคํƒ ์˜์—ญ์˜ ํŠน์ง•


  • ์ •์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

  • ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•˜๊ณ  ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋œ๋‹ค.

  • ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธํ˜• ํƒ€์ž…(Primitive ํƒ€์ž…) (boolean, char, short, int, long, float, double) ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ’์ด๋ž‘ ๊ฐ™์ด ํ• ๋‹น๋œ๋‹ค.

  • int, long, boolean ๋“ฑ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ์ƒ์„ฑํ•  ๋•Œ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์œผ๋กœ,
    ์ž„์‹œ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋‚˜ ์ •๋ณด๋“ค์ด ์ €์žฅ๋˜๋Š” ์˜์—ญ

  • ์“ฐ๋ ˆ๋“œ ๋ณ„๋กœ 1๊ฐœ๋งŒ ์ƒ์„ฑ๋œ๋‹ค.
    • ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ static, stack, heap ์˜์—ญ์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. โ†’ ๊ทธ๋ž˜์„œ A์“ฐ๋ ˆ๋“œ๋Š” ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ,
      static๊ณผ heap ์˜์—ญ์„ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑํ•˜๊ณ ,
    ๋ฉ”์„œ๋“œ ์‹คํ–‰์ด ๋๋‚˜๋ฉด pop๋˜์–ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.


แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-01-21 แ„‹แ…ฉแ„’แ…ฎ 12 36 29


แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-01-21 แ„‹แ…ฉแ„’แ…ฎ 12 37 20



JVM์˜ ํž™๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ํŠน์ง•


  • ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

  • ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ์œผ๋กœ
    ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„

  • โ€œnewโ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ์ €์žฅ๋œ๋‹ค.

1
Instance instance = new Instance();  -> heap์— ์กด์žฌ
  • Heap ์˜์—ญ์— ์ƒ์„ฑ๋œ Object ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ์˜ ์ฐธ์กฐ ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.

  • ์ฐธ์กฐํ˜•(class, interface, enum, Array ๋“ฑ) ์ž๋ฃŒํ˜•๋„ ๊ฐ™์ด ์ €์žฅ๋œ๋‹ค.

  • ํž™์˜ ์ฐธ์กฐ ์ฃผ์†Œ๋Š” โ€œ์Šคํƒโ€์ด ๊ฐ–๊ณ  ์žˆ๊ณ  ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํž™ ์˜์—ญ์— ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ํ•ธ๋“ค๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

  • GC๊ฐ€ ์ •๋ฆฌํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค.



ํž™๋ฉ”๋ชจ๋ฆฌ์˜ ํ•œ๊ณ„์ 


Stack์€ ์ข์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด์ง€๋งŒ, Heap์€ ๋„“์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค.

Stack ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ๊ฒƒ์€ ๋งŽ์€ ๋น„์šฉ์ด ๋“ค์ง€ ์•Š์ง€๋งŒ,
Heap ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ๊ฒƒ์€ ๋งŽ์€ ๋น„์šฉ์„ ์š”ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋„ˆ๋ฌด Heap์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ง ๋‹ค๋ฉด
๊ฐ™์€ ๋ฐฉ์‹์„ Stack์— ํ–ˆ์„ ๋•Œ๋ณด๋‹ค ์ˆ˜์‹ญ๋ฐฐ์˜ ์†๋„ ์ฐจ์ด๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค.

์ด ์ ์„ ์œ ์˜ํ•˜๋ฉด์„œ Heap์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด ์ ์„ ์œ ์˜ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์งœ๋„๋ก ํ•ด์•ผํ•œ๋‹ค.




(์ฐธ๊ณ )



๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์—ฌ๋Ÿฌ๊ธ€๊ณผ ์ฑ… ์ฝ์€ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ข‹์€ ๊ธ€๋กœ ์ €์˜ ๊ณต๋ถ€์— ๋„์›€์„ ์ฃผ์‹œ๋Š” ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

/Java/ Java๊ฐ€ ์ปดํŒŒ์ผ๋˜๋Š” ๊ณผ์ •

/Java/ Java์˜ ํŠน์ง•