JiwonDev

์ž๋ฐ”์—์„œ Stack Memory & Heap Memory

by JiwonDev

์ž๋ฐ”๋Š” ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(primary type)์„ ์ œ์™ธํ•˜๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์„ ๋ ˆํผ๋Ÿฐ์Šค (ํฌ์ธํ„ฐ ์ฐธ์กฐ๊ฐ’)์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰ ํž™๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋œป์ธ๋ฐ, ์™œ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์—ˆ๊ณ  ์Šคํƒ, ํž™๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„์ง€์–ด ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

 

# 1. ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

C ๊ฐ™์€ ๊ณ ๊ธ‰์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด(.exe)๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

C์–ธ์–ด ๊ธฐ์ค€ ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํŒŒ์ผ๋˜๊ณ  ์‹คํ–‰ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ ธ ์‹คํ–‰๋˜๋Š” ๊ณผ์ •

์ด๋ฅผ ์กฐ๊ธˆ ๋” ํฐ ๊ทธ๋ฆผ์œผ๋กœ ๋ณด๊ฒŒ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€๋ฐ

  1.  ์‚ฌ์šฉ์ž๊ฐ€ ์šด์˜์ฒด์ œ์— ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์„ ์š”์ฒญํ•˜๊ณ 
  2.  ์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ ๋œ๋‹ค.
  3.  ์ด๋•Œ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” Code, Data, Heap, Stack ์˜์—ญ์œผ๋กœ ํšจ์œจ์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด์‚ฌ์šฉํ•œ๋‹ค.


#2 ์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

์ž๋ฐ” ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„์–ด๊ฐ€ ์•„๋‹Œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญ๋˜๊ณ  JVM์„ ๊ฑฐ์ณ์„œ ์‹คํ–‰๋œ๋‹ค. ๊ทธ๋ž˜์„œ ํ”„๋กœ๊ทธ๋žจ์— ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ JVM์—์„œ ๋ฐ›์•„์™€ ์ œ๊ณตํ•˜๊ธด ํ•˜์ง€๋งŒ, ํฐ ๊ทธ๋ฆผ์œผ๋กœ ๋ดค์„ ๋•Œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค. Runtime Data Area์—์„œ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šด์˜์ฒด์ œ๋กœ ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์œผ๋ฉด JVM ๋‚ด๋ถ€์—์„œ Method(=Data), Stack, Heap, Native-Method, PC-register๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚˜๋ˆ„์–ด ์‚ฌ์šฉํ•œ๋‹ค.

Java์˜ ์‹คํ–‰๊ณผ์ •

  • Method Area : ๋ชจ๋“  Thread์— ๊ณต์œ  ๋˜๋Š” ์ •์ ์ธ ์ „์—ญ ๋ฐ์ดํ„ฐ์ด๋‹ค. ํด๋ž˜์Šค๋‚˜ ๋ณ€์ˆ˜์˜ ์ •๋ณด, Static๋ณ€์ˆ˜, ์ƒ์ˆ˜๋“ฑ์ด ์ €์žฅ๋œ๋‹ค.
  • Heap Area : ๋ชจ๋“  Thread์— ๊ณต์œ ๋˜๋ฉฐ ์ธ์Šคํ„ด์Šค์™€ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ตฌ์—ญ์ด๋‹ค. (๋ ˆํผ๋Ÿฐ์Šค ์ฐธ์กฐ, new ํ‚ค์›Œ๋“œ)
  • Stack Area : ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ์ „์šฉ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ง€์—ญ๋ณ€์ˆ˜, ํŒŒ๋ผ๋ฉ”ํƒ€, ๋ฆฌํ„ด ๊ฐ’๋“ฑ์ด ์ €์žฅ๋œ๋‹ค.
  • PC Register : ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ๋˜๋ฉฐ Program Counter์˜ ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค. (ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ฐ’) ์ž๋ฐ”์—์„œ๋Š” CPU ๋…๋ฆฝ์„ฑ์„ ์œ„ํ•ด ๋ ˆ์ง€์Šคํ„ฐ๊ธฐ๋ฐ˜์ด ์•„๋‹Œ ์Šคํƒ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ๋ช…๋ น์ด ๋™์ž‘ํ•จ์„ ์•Œ์•„๋‘์ž.
  • Native Method Stack : ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ๋˜๋ฉฐ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์ด๋‹ค. 

 


 

Java ์ฝ”๋“œ๊ฐ€ JVM์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ.

# 2-1 Stack ๋ฉ”๋ชจ๋ฆฌ

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

 

  • ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ๋ฐ˜ํ™˜๋  ๋•Œ ๋งˆ๋‹ค ์Šคํƒ์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.
  • ์Šคํƒ ๋‚ด๋ถ€์˜ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ(=์Šค๋ ˆ๋“œ)๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์—๋งŒ ์กด์žฌํ•œ๋‹ค.
  • ๋ฉ”์†Œ๋“œ ์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด ์ž๋™์œผ๋กœ ์Šคํƒ์—์„œ ํ• ๋‹น ํ•ด์ œ๋œ๋‹ค.
  • ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณ ์œ ์˜ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ์ด๋Ÿฌํ•œ ์Šคํƒ ๊ตฌ์กฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์€ ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
    ์™œ ๋น ๋ฅด์ฃ ?
๋”๋ณด๊ธฐ

์Šคํƒ์€ ๋ฏธ๋ฆฌ ์˜ˆ์•ฝ๋œ ๋ฉ”๋ชจ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ๋”ฐ๋กœ ํ•„์š”์—†์œผ๋ฉฐ, ์‚ฌ์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ตณ์ด ๋ฐ˜๋‚ฉํ•˜์ง€ ์•Š๊ณ  (= ์‚ญ์ œ ์ž‘์—…์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ ) ๋‹จ์ˆœํžˆ ์Šคํƒ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ์†Œ์‹œํ‚ด์œผ๋กœ์จ ์Šคํƒ ๊ณต๊ฐ„์„ ์ œํ•œ์‹œํ‚จ๋‹ค. ์Šคํƒ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ์†Œ์‹œํ‚ค๋ฉด์„œ ๋‚จ์•„์žˆ๋˜ ๋ฐ์ดํ„ฐ๋Š” ์Šคํƒ ํฌ์ธํ„ฐ๊ฐ€ ๋‹ค์‹œ ์ฆ๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ ๊ณต๊ฐ„์„ ๋‹จ์ˆœํžˆ ๋ฎ์–ด ์“ฐ๋Š” ์‹์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

1. ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋Š” ์†ํ•œ ์˜์—ญ(scope)์„ ๋ฒ—์–ด๋‚˜๋ฉด ์Šคํƒ ํฌ์ธํ„ฐ์˜ ์œ„์น˜๊ฐ€ ๋ฐ”๋€œ์—๋”ฐ๋ผ ์•Œ์•„์„œ ์‚ฌ๋ผ์ง„๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ํ•ด์ œ๋˜๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ๋น„ํ•ด ๋งค์šฐ ๋น ๋ฅด๋‹ค๋Š” ์ด์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

2. ์Šคํƒ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ๊ทธ ํฌ๊ธฐ๊ฐ€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ด๋ฏธ ์ •ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์€ ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ํฌ๊ธฐ๋ฅผ ๋”ฐ๋ผ ์›€์ง์ด๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋Ÿฐํƒ€์ž„, ์ฆ‰ ์‹คํ–‰ ์ค‘์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๊ฑฐ๋‚˜ ํŒ๋‹จํ•  ์ผ์ด ์—†์ด ํ•œ๋ฒˆ์— ์›ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ์— ํž™ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅธ ์ด์œ ๊ธฐ๋„ ํ•˜๋‹ค.

 

ํ•˜์ง€๋งŒ ํž™ ๋ฉ”๋ชจ๋ฆฌ์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์—ฐ์žฅํ•˜๊ธฐ ์–ด๋ ต๊ณ , ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์Šคํƒ ํ”„๋ ˆ์ž„์ด ๋ฌด์ˆ˜ํžˆ ์ค‘์ฒฉ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋Š” stack overflow๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

# 2-2 Heap ๋ฉ”๋ชจ๋ฆฌ

Stack์ด ์ปดํŒŒ์ผ ํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ์ง€์ •๋˜๋Š” ์ •์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์ด๋ผ๋ฉด, Heap์€ ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค. ์ž๋ฐ”์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋Š” ํ•ญ์ƒ ํž™ ๊ณต๊ฐ„์— ์ƒ์„ฑ๋˜๊ณ , ์ด ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ ์ฃผ์†Œ๋Š” ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ(๋ณ€์ˆ˜)์— ์ €์žฅ๋˜์–ด ์‚ฌ์šฉ๋œ๋‹ค.

 

Heap์—์„œ ๋งŒ๋“  ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ชจ๋“  ์Šค๋ ˆ๋“œ์—์„œ ์ฐธ์กฐ, ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น&ํ•ด์ œ ๊ด€๋ฆฌ์— ์žˆ์–ด ์–ด๋ ค์›€์ด ๋”ฐ๋ฅด๋Š”๋ฐ ์ด๋ฅผ JVM์˜ Gabage Collector๊ฐ€ ๊ฐœ๋ฐœ์ž ๋Œ€์‹  ๊ด€๋ฆฌํ•ด์ค€๋‹ค.

 

  • GC์˜ Young Generation, Tenured(Old) Generation, Permanent Generation์„ ํฌํ•จํ•˜๋Š” ๋ณต์žกํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ์ˆ ์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌ, ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์šด์˜์ฒด์ œ์—๊ฒŒ ํ• ๋‹น๋ฐ›์€ ํž™ ๊ณต๊ฐ„์ด ๊ฐ€๋“์ฐจ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด OutOfMemoryError๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  • Heap์€ ์Šค๋ ˆ๋“œ๋กœ ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๋™๊ธฐํ™”ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณดํ˜ธํ•ด์•ผํ•œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์ •์ ์ด์ง€ ์•Š๊ณ , ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ• ์ˆ˜ ์žˆ๊ธฐ์— ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ์ ‘๊ทผ์ด ์Šคํƒ๋ณด๋‹ค ๋Š๋ฆฌ๊ณ  ์–ด๋ ต๋‹ค.
  • ์Šคํƒ์€ ๋…๋ฆฝ์ ์ธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๊ณ  ์Šคํƒํฌ์ธํ„ฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์ž๋™์œผ๋กœ ํ•ด์ œ ๋˜์ง€๋งŒ, Heap์—์„œ๋Š” ๋ˆ„๊ตฌ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐ ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์œ ๋™์ ์ด๋ผ ์ž๋™์œผ๋กœ ํ• ๋‹น ํ•ด์ œ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋™์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์€ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ณ , ์ •๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐพ์•„ ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค.

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ