๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[REVIEW] JVM ๋ฐ‘๋ฐ”๋‹ฅ๊นŒ์ง€ ํŒŒํ—ค์น˜๊ธฐ - 2. ์ž๋ฐ” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ”Œ๋กœ ๋ณธ๋ฌธ

๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/๐‰๐š๐ฏ๐š

[REVIEW] JVM ๋ฐ‘๋ฐ”๋‹ฅ๊นŒ์ง€ ํŒŒํ—ค์น˜๊ธฐ - 2. ์ž๋ฐ” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ”Œ๋กœ

๐ŸคRyusun๐Ÿค 2025. 2. 6. 09:32

c, c++์˜ ๊ฐ์ฒด๋Š” ๊ฐ๊ฐ์˜ '์†Œ์œ ๊ถŒ' ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด์˜ ์ผ์ƒ์„ ํƒ„์ƒ๋ถ€ํ„ฐ ์ฃฝ์Œ๊นŒ์ง€ ๊ด€๋ฆฌํ•  ์ฑ…์ž„์ด ์žˆ๋‹ค. ์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ œ๊ณตํ•˜๋Š” ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋•์— ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ํ•ด์ œ๋ฅผ ์ง์ง€์–ด ์ฝ”๋”ฉํ•˜์ง€ ์•Š์•„๋„ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋‚˜ ์˜ค๋ฒ„ํ”Œ๋กœ ๋ฌธ์ œ๋ฅผ ๊ฑฐ์˜ ๊ฒช์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ํ†ต์ œ๊ถŒ์„ ์œ„์ž„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ํ•œ๋ฒˆ ํ„ฐ์ง€๋งŒ ๊ฐ€์ƒ ๋จธ์‹ ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ํ•œ ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ์ƒ๋‹น์ด ์–ด๋ ต๋‹ค.

 


 

์ž๋ฐ” ๋จธ์‹ ์ด ๊ด€๋ฆฌํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

 

๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ

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

์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ

 

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

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

 

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

ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ์ฒ˜๋Ÿผ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ์Šคํƒ๋„ '์Šค๋ ˆ๋“œ ํ”„๋ผ์ด๋น—' ํ•˜๋ฉฐ, ์—ฐ๊ฒฐ๋œ ์Šค๋ ˆ๊ฐ€ ์ƒ์„ฑ/์‚ญ์ œ๊ฐ€ ๋˜๋ฉด ๊ฐ™์ด ์ƒ์„ฑ/์‚ญ์ œ๊ฐ€ ๋œ๋‹ค. 

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

 

์Šคํƒ

์Šคํƒ์€ ๋ณดํ†ต ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ์Šคํƒ์„ ๊ฐ€๋ฆฌํ‚ค๋Š”๋ฐ, ๊ทธ ์ค‘ ํŠนํžˆ ์ง€์—ญ ๋ณ€์ˆ˜ ํ…Œ์ด๋ธ”์„ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ๊ฐ€ ๋งŽ๋‹ค.

์ง€์—ญ ๋ณ€์ˆ˜ ํ…Œ์ด๋ธ”์—๋Š” ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ปดํŒŒ์ผํƒ€์ž„์— ์•Œ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…(boolean, byte, char, short, int, float, long, double), ๊ฐ์ฒด ์ฐธ์กฐ, ๋ฐ˜ํ™˜ ์ฃผ์†Œ ํƒ€์ž…์„ ์ €์žฅํ•œ๋‹ค. ์ง€์—ญ ๋ณ€์ˆ˜ ํ…Œ์ด๋ธ”์—์„œ ์ด ๋ฐ์ดํ„ฐ ํƒ€์ž…๋“ค์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์„ ์ง€์—ญ ๋ณ€์ˆ˜ ์Šฌ๋กฏ์ด๋ผ ํ•œ๋‹ค. ์ง€์—ญ ๋ณ€์ˆ˜ ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์€ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ํ• ๋‹นํ•œ๋‹ค. ์ž๋ฐ” ๋ฉ”์„œ๋“œ๋Š” ์Šคํƒ ํ”„๋ ˆ์ž„์—์„œ ์ง€์—ญ ๋ณ€์ˆ˜์šฉ์œผ๋กœ ํ• ๋‹น๋ฐ›์•„์•ผ ํ•  ๊ณต๊ฐ„์˜ ํฌํ‚ค๊ฐ€ ์ด๋ฏธ ์™„๋ฒฝํ•˜๊ฒŒ ๊ฒฐ์ •๋˜์–ด ์žˆ๋‹ค. 'ํฌ๊ธฐ'๋Š” ๋ณ€์ˆ˜ ์Šฌ๋กฏ ๊ฐœ์ˆ˜์ด๋‹ค. ๊ฐ€์ƒ ๋จธ์‹ ์ด ๋ณ€์ˆ˜ ์Šฌ๋กฏ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ค์ œ ํฌ๊ธฐ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š๋ƒ์— ๋‹ฌ๋ผ์ง„๋‹ค. ๋งŒ์•ฝ ์Šค๋ ˆ๋“œ๊ฐ€ ์š”์ฒญํ•œ ์Šคํƒ ๊นŠ์ด๊ฐ€ ๊ฐ€์ƒ ๋จธ์‹ ์ด ํ—ˆ์šฉํ•˜๋Š” ๊นŠ์ด๋ณด๋‹ค ํฌ๋‹ค๋ฉด StackOverFlowError ๋ฅผ ๋˜์ง„๋‹ค. ๋˜ํ•œ ์Šคํƒ ์šฉ๋Ÿ‰์„ ๋™์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ๋Š” ์Šคํƒ์„ ํ™•์žฅํ•˜๋ ค๋Š” ์‹œ์ ์— ์—ฌ์œ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋ฉด OutofMemoryError๋ฅผ ๋˜์ง„๋‹ค.

 

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

๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ์€ ๊ฐ€์ƒ ๋จธ์‹  ์Šคํƒ๊ณผ ๋งค์šฐ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ฐจ์ด์ ์€ ๊ฐ€์ƒ ๋จธ์‹  ์Šคํƒ์€ ์ž๋ฐ” ๋ฉ”์„œ๋“œ(๋ฐ”์ดํŠธ ์ฝ”๋“œ)๋ฅผ ์‹คํ–‰ํ• ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ์€ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ
Java ์–ธ์–ด๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์–ธ์–ด(์ฃผ๋กœ C, C++)๋กœ ๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค.๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋Š” Java ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ๋‚˜ ํ•˜๋“œ์›จ์–ด์™€ ์ง์ ‘ ์†Œํ†ตํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€์˜ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ(C/C++)๋กœ ์ž‘์„ฑ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. Java๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ธ ์–ธ์–ด์ด์ง€๋งŒ, ํŠน์ • ํ”Œ๋žซํผ์ด๋‚˜ ํ•˜๋“œ์›จ์–ด์— ์˜์กด์ ์ธ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์ž๋ฐ” ํž™

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

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ด€์ ์—์„œ๋Š” ์ž๋ฐ” ํž™์€ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•œ๋‹ค. ๊ฐ์ฒด ํ• ๋‹น ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ํ• ๋‹น ๋ฒ„ํผ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋‚˜๋ˆˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋ฐ” ํž™์— ์ €์žฅ๋˜๋Š” ์‚ฌ์‹ค์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์–ด๋–ค ์„ธ๋ถ€ ์˜์—ญ์ด๋“  ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž๋ฐ” ํž™์„ ๋‹ค์‹œ ์ž‘๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ชฉ์ ์€ ์˜ค์ง ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜์™€ ํ• ๋‹น์„ ๋” ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. <์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ๋ช…์„ธ> ์— ๋”ฐ๋ฅด๋ฉด ์ž๋ฐ” ํž™์€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์—ฐ์†๋˜์–ด์•ผ ํ•œ๋‹ค. ์ž๋ฐ” ํž™์€ ํฌ๊ธฐ๋ฅผ ๊ณ ์ •ํ• ์ˆ˜๋„ ์žˆ๊ณ , ํ™•์žฅํ• ์ˆ˜๋„ ์žˆ๋‹ค. ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค์— ํ• ๋‹นํ•ด ์ค„ ํž™ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๊ณ  ํž™์„ ํ™•์žฅํ•  ์ˆ˜ ์—†๋‹ค๋ฉด OutOfMemoryError๋ฅผ ๋˜์ง„๋‹ค.

 

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

๋ฉ”์„œ๋“œ ์˜์—ญ์˜ ์ฃผ ์—ญํ• ์€ ํƒ€์ž… ๊ด€๋ จ ์ •๋ณด(ํด๋ž˜์Šค ์ด๋ฆ„, ์ ‘๊ทผ ์ œํ•œ์ž, ์ƒ์ˆ˜ ํ’€, ํ•„๋“œ ์„ค๋ช…, ๋ฉ”์„œ๋“œ ์„ค๋ช…) ์ €์žฅ์ด๋‹ค.

๋ฉ”์„œ๋“œ ์˜์—ญ๋„ ์ž๋ฐ” ํž™์ฒ˜๋Ÿผ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•œ๋‹ค. ๋ฉ”์„œ๋“œ ์˜์—ญ์€ ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ฝ์–ด ๋“ค์ธ ํƒ€์ž… ์ •๋ณด, ์ƒ์ˆ˜, ์ •์  ๋ณ€์ˆ˜, JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•œ ์ฝ”๋“œ ์บ์‹œ๋“ฑ์„ ์ €์žฅํ•˜๋Š”๋ฐ ์ด์šฉํ•œ๋‹ค. <์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ๋ช…์„ธ> ์—์„œ๋Š” ๋ฉ”์„œ๋“œ ์˜์—ญ๋„ ๋…ผ๋ฆฌ์ ์œผ๋กœ๋Š” ํž™์˜ ํ•œ ๋ถ€๋ถ„์œผ๋กœ ๊ธฐ์ˆ ํ•˜์ง€๋งŒ, ์ž๋ฐ” ํž™๊ณผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด '๋…ผํž™(non-heap)'์ด๋ผ ํ•œ๋‹ค.

<์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ๋ช…์„ธ>๋Š” ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ œ์•ฝ์„ ๊ฑฐ์˜ ๋‘์ง€ ์•Š์•˜๋‹ค. ์ž๋ฐ” ํž™๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฐ์†๋  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, ํฌ๊ธฐ๋ฅผ ๊ณ ์ •ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์ˆ˜๋„ ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ ์˜์—ญ์—์„œ ํšŒ์ˆ˜ํ•  ๋Œ€์ƒ์€ ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„ ์ƒ์ˆ˜ ํ’€๊ณผ ํƒ€์ž…์ด๋ผ์„œ ํšŒ์ˆ˜ ํšจ๊ณผ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋งค์šฐ ์ž‘๋‹ค. <์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ๋ช…์„ธ>์— ๋”ฐ๋ฅด๋ฉด ๋ฉ”์„œ๋“œ ์˜์—ญ์ด ๊ฝ‰ ์ฐจ์„œ ํ•„์š”ํ•œ ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค๋ฉด OutOfMemoryError๋ฅผ ๋˜์ง„๋‹ค.

 

๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์ธ ํ•ซ์ŠคํŒŸ๊ณผ ๋Œ€ํ‘œ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ธ ์ž๋ฐ” ํž™์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.
์•„๋ž˜ ๋‚ด์šฉ์€ ํ•ซ์ŠคํŒŸ์ด ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฐ” ํž™์—์„œ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ(ํ• ๋‹น)๋˜๋Š” ๊ณผ์ •, ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ, ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹๊นŒ์ง€ ์ „์ฒด ํ๋ฆ„์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

 

๊ฐ์ฒด ์ƒ์„ฑ

์ž๋ฐ”๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋‹ค. ์–ธ์–ด ์ˆ˜์ค€์—์„œ๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์€ ๋ณดํ†ต new ํ‚ค์›Œ๋“œ๋ฅผ ์“ฐ๋ฉด ๋˜์ง€๋งŒ, ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ์ด new ๋ช…๋ น์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋งŒ๋‚˜๋ฉด, ์ด ๋ช…๋ น์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์ƒ์ˆ˜ ํ’€์•ˆ์˜ ํด๋ž˜์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹ฌ๋ฒŒ ์ฐธ์กฐ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์‹ฌ๋ฒŒ ์ฐธ์กฐ๊ฐ€ ๋œปํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ, ํ•ด์„(resolve), ์ดˆ๊ธฐํ™”(initialize) ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์ค€๋น„๋˜์ง€ ์•Š์€ ํด๋ž˜์Šค๋ผ๋ฉด ๋กœ๋”ฉ๋ถ€ํ„ฐ ํ•ด์•ผํ•œ๋‹ค. ๋กœ๋”ฉ์ด ์™„๋ฃŒ๋œ ํด๋ž˜์Šค๋ผ๋ฉด ์ƒˆ ๊ฐ์ฒด๋ฅผ ๋‹ด์„ ๋ฉ”๋ชจ๋ฏธ๋ฅผ ํ• ๋‹นํ•œ๋‹ค. ๊ฐ์ฒด์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋Š” ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•˜๊ณ  ๋‚˜๋ฉด ์™„๋ฒฝํ•˜๊ฒŒ ์•Œ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ฒด์šฉ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ• ๋‹น์€ ์ž๋ฐ” ํž™์—์„œ ํŠน์ • ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์„ ์ž˜๋ผ ์ฃผ๋Š” ์ผ์ด๋‹ค. ์ž๋ฐ” ํž™์ด ๊ทœ์น™์ ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ์‚ฌ์šฉ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ชจ๋‘ ํ•œ์ชฝ์—, ์—ฌ์œ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ˜๋Œ€ํŽธ์— ์ž๋ฆฌํ•˜๋ฉฐ, ํฌ์ธํ„ฐ๊ฐ€ ๋‘ ์˜์—ญ์˜ ๊ฒฝ๊ณ„์ธ ๊ฐ€์šด๋ฐ ์ง€์ ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค. ์ด ์ƒํƒœ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋ฉด ํฌ์ธํ„ฐ๋ฅผ ์—ฌ์œ  ๊ณต๊ฐ„ ์ชฝ์œผ๋กœ, ์ •ํ™•ํžˆ ๊ฐ์ฒด ํฌ๊ธฐ๋งŒํผ ์ด๋™์‹œํ‚ค๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ํ• ๋‹น ๋ฐฉ์‹์„ ํฌ์ธํ„ฐ ๋ฐ€์น˜๊ธฐ ๋ผ๊ณ  ํ•œ๋‹ค.

ํฌ์ธํ„ฐ ๋ฐ€์น˜๊ธฐ

 

ํ•˜์ง€๋งŒ ์ž๋ฐ” ํž™์€ ๊ทœ์น™์ ์ด์ง€ ์•Š์•„, ์‚ฌ์šฉ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ์™€ ์—ฌ์œ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋’ค์„ž์—ฌ ์žˆ์–ด์„œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ€์ณ ๋‚ด๊ธฐ๊ฐ€ ๊ฐ„๋‹จํ•˜์ง€ ์•Š๋‹ค. ๊ทธ ๋Œ€์‹  ๊ฐ€์ƒ ๋จธ์‹ ์€ ๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก๋“ค์„ ๋ชฉ๋ก์œผ๋กœ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ด๊ธฐ์— ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์„ ์ฐพ์•„ ํ• ๋‹นํ•œ ํ›„ ๋ชฉ๋ก์„ ๊ฐฑ์‹ ํ•œ๋‹ค. ์ด ํ• ๋‹น ๋ฐฉ์‹์„ ์—ฌ์œ  ๋ชฉ๋ก(free list)๋ผ๊ณ  ํ•œ๋‹ค.

 

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

 

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

 

ํ•ด๋ฒ•

1. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์‹ค์ œ๋กœ ๋น„๊ต ๋ฐ ๊ตํ™˜(CAS) ๊ณผ ์‹คํŒจ์‹œ ์žฌ์‹œ๋„ ๋ฐฉ์‹์˜ ๊ฐ€์ƒ ๋จธ์‹ ์€ ๊ฐฑ์‹ ์„ ์›์ž์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

2. ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์Šค๋ ˆ๋“œ ๊ฐ๊ฐ์ด ์ž๋ฐ” ํž™ ๋‚ด์— ์ž‘์€ ํฌ๊ธฐ์˜ ์ „์šฉ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ํ• ๋‹น๋ฐ›์•„ ๋†“๋Š”๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ํ• ๋‹น ๋ฒ„ํผ(TLAB) ๋ผ๊ณ  ํ•œ๋‹ค. ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ๋กœ์ปฌ ๋ฒ„ํผ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๋ฒ„ํผ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋ฉด ๊ทธ๋•Œ ๋™๊ธฐํ™”๋ฅผ ํ•ด ์ƒˆ๋กœ์šด ๋ฒ„ํผ๋ฅผ ํ• ๋‹น๋ฐ›๋Š” ์‹์ด๋‹ค. ๊ฐ€์ƒ ๋จธ์‹ ์ด ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ํ• ๋‹น ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ• ์ง€๋Š” -XX:+/-UseTLAB ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•œ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ๋๋‚ฌ์œผ๋ฉด ๊ฐ€์ƒ๋จธ์‹ ์€ ํ• ๋‹น๋ฐ›์€ ๊ณต๊ฐ„์„ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.(๊ฐ์ฒด ํ•ด๋”๋Š” ์ œ์™ธ). ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ํ• ๋‹น ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ดˆ๊ธฐํ™”๋Š” TLAB ํ• ๋‹น์‹œ ๋ฏธ๋ฆฌ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ž๋ฐ” ์ฝ”๋“œ์—์„œ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š” ์ด์œ ์ด๋‹ค. ๋ชจ๋“  ํ•„๋“œ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ํ•ด๋‹นํ•˜๋Š” 0๊ฐ’์„ ๋‹ด๊ณ  ์žˆ๊ฒŒ ๋˜๋Š”๊ฒƒ์ด๋‹ค.

๋‹ค์Œ, ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์€ '๊ฐ ๊ฐ์ฒด์— ํ•„์š”ํ•œ ์„ค์ •'์„ ํ•ด์ค€๋‹ค. (์–ด๋Š ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€, ํด๋ž˜์Šค์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋Š” ์–ด๋–ป๊ฒŒ ์ฐพ๋Š”์ง€, ์ด ๊ฐ์ฒด์˜ ํ•ด์‹œ์ฝ”๋“œ๋Š” ๋ฌด์—‡์ธ์ง€) ์ด๋Ÿฐ ์ •๋ณด๊ฐ€ ๊ฐ ๊ฐ์ฒด์˜ ๊ฐ์ฒด ํ—ค๋”์— ์ €์žฅ๋œ๋‹ค. ๊ฐ์ฒด ํ—ค๋”๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ€์ƒ ๋จธ์‹ ์˜ ํ˜„์žฌ ๊ตฌ๋™ ๋ชจ๋“œ(ํŽธํ–ฅ ๋ฝ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ ๋“ฑ)์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐ์ฒด ํ•ด๋”
- ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋  ๋•Œ ํฌํ•จ๋˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(Metadata)
- ๊ฐ์ฒด์˜ ์ƒํƒœ์™€ ๋™์ž‘์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ์‚ฌ์šฉํ•˜๋Š” ํ•„์ˆ˜ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.

๊ฐ์ฒด ํ—ค๋”๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ 
- GC(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜) ๊ด€๋ฆฌ: ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์–ธ์ œ ํ•ด์ œ๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ JVM์ด ์ถ”์ ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณต
- ๋™๊ธฐํ™” ์ง€์›: ๊ฐ์ฒด๊ฐ€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ๋ฝ(lock) ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌ
- ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”: JVM์€ ๊ฐ์ฒด ํ—ค๋”๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ์น˜์™€ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰

 

 

์ผ๋ฐ˜์ ์œผ๋กœ new ๋ช…๋ น์–ด์™€ ์ƒ์„ฑ์ž(ํด๋ž˜์Šค์˜ <init>() ๋ฉ”์„œ๋“œ)๊นŒ์ง€ ์‹คํ–‰๋˜์–ด ๊ฐ์ฒด๋ฅผ ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๋Œ€๋กœ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ง„์งœ ๊ฐ์ฒด๊ฐ€ ์™„์„ฑ๋œ๋‹ค.

 

์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž๋ฐ”์˜ new ํ‚ค์›Œ๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ช…๋ น์–ด์ธ new ์™€ invokespecial๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. invokespecial ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ช…๋ น์–ด ์ค‘ ํ•˜๋‚˜๋กœ, ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ฃผ๋กœ ์ƒ์„ฑ์ž ํ˜ธ์ถœ, ๋ถ€๋ชจ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ, private ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์— ์‚ฌ์šฉ๋œ๋‹ค. new ๋Š” ์•ž์„œ ์ด์•ผ๊ธฐํ•œ ๋ฉ”๋กœ๋ฆฌ ํ• ๋‹น ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ invokespecial์€ ๋ฐฉ๊ธˆ ์ด์•ผ๊ธฐํ•œ <init>() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ๋‹ด๋‹นํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ž๋ฐ” ์ฝ”๋“œ์—์„œ new ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ๋ผ๋ฉด invokespecial์ด ์—ฐ์ด์–ด ๋‚˜์˜ค์ง€ ์•Š์„์ˆ˜๋„ ์žˆ๋‹ค.

 

 

๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ

ํ•ซ์ŠคํŒŸ ๊ฐ€์ƒ ๋จธ์‹ ์€ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด ํ—ค๋”, ์ธ์Šคํ„ด์Šค ๋ฐ์ดํ„ฐ, ๊ธธ์ด ๋งž์ถ”๊ธฐ์šฉ ์ •๋ ฌ ํŒจ๋”ฉ์œผ๋กœ ๋‚˜๋ˆ„์–ด ํž™์— ์ €์žฅํ•œ๋‹ค. 

๊ฐ์ฒด ํ—ค๋”

ํ•ซ์ŠคํŒŸ ๊ฐ€์ƒ ๋จธ์‹ ์€ ๊ฐ์ฒด ํ—ค๋”์˜ ๋‘ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋‹ค.

1. ๊ฐ์ฒด์˜ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ 

  • ๋งˆํฌ ์›Œ๋“œ: ๊ฐ์ฒด ์ž์ฒด์˜ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ(ํ•ด์‹œ ์ฝ”๋“œ, GC ์„ธ๋Œ€ ๋‚˜์ด, ๋ฝ ์ •๋ณด ๋“ฑ). ๊ฐ์ฒด๋Š” ์•„์ฃผ ๋งŽ์€ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•ด์„œ, ๋งˆํฌ์›Œ๋“œ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ๋™์ ์œผ๋กœ ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค. ์ž‘์€ ๊ณต๊ฐ„์— ๋งŽ์€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ๊ฐ์ฒด ์ƒํƒœ์— ๋”ฐ๋ผ ๊ณต๊ฐ„ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค.
  • ํด๋ž˜์Šค ์›Œ๋“œ: ๊ฐ์ฒด์˜ ํด๋ž˜์Šค ๊ด€๋ จ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํด๋ž˜์Šค ํฌ์ธํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค. ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ์€ ์ด ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ํŠน์ • ๊ฐ์ฒด๊ฐ€ ์–ด๋Š ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์ง€์ธ์ง€ ๋Ÿฐํƒ€์ž„์— ์•Œ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ฒด์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ •๋ณด๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฐ์ฒด ์ž์ฒด์—์„œ ์ฐพ์•„์•ผ ํ•˜๋Š”๊ฑด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ๊ฐ€์ƒ ๋จธ์‹  ๊ตฌํ˜„์ด ํด๋ž˜์Šค ํฌ์ธํ„ฐ๋ฅผ ๊ฐ์ฒด ํ—ค๋”์— ์ €์žฅํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.
  • ๋ฐฐ์—ด ๊ธธ์ด: ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์€ ๊ฐ์ฒด ํ—ค๋”์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ์ž๋ฐ” ๊ฐ์ฒด์˜ ํฌ๊ธฐ๋ฅผ ์–ป๋Š”๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ์ฒด ํ—ค๋”์— ์ €์žฅ๋˜๋Š” ๊ฐ์ฒด ํƒ€์ž…์€ ๋ฐฐ์—ด์— ๋‹ด๊ธด '์›์†Œ' ํƒ€์ž…์ด๋‹ค. ๋”ฐ๋ผ์„œ ์›์†Œ ๊ฐœ์ˆ˜๋ฅผ ์•Œ์•„์•ผ ๋ฐฐ์—ด ๊ฐ์ฒด๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ• ์ˆ˜ ์žˆ๋‹ค.
  • ์ธ์Šคํ„ด์Šค ๋ฐ์ดํ„ฐ: ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ๋กœ ๋‹ด๊ณ  ์žˆ๋Š” ์ •๋ณด(์ƒ์† ๊ด€๊ณ„, ํ•„๋“œ ๋“ฑ). ์ •๋ณด ์ €์žฅ์˜ ์ˆœ์„œ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์˜ ํ• ๋‹น ์ „๋žต ๋งค๊ฐœ ๋ณ€์ˆ˜(-XX:FieldsAllocationStyle) ์™€ ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ์—์„œ ํ•„๋“œ๋ฅผ ์ •์˜ํ•œ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. ํ•ซ์ŠคํŒŸ ๊ฐ€์ƒ ๋จธ์‹ ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ long&double, int, short&char, byte&boolean, ์ผ๋ฐ˜ ๊ฐ์ฒด ํฌ์ธํ„ฐ ์ˆœ์œผ๋กœ ํ• ๋‹นํ•œ๋‹ค. ์ฆ‰ ๊ธฐ๋ณธ ํ• ๋‹น ์ „๋žต์—์„œ๋Š” ๊ธธ์ด๊ฐ€ ๊ฐ™์€ ํ•„๋“œ๋“ค์€ ํ•ญ์ƒ ๊ฐ™์ด ํ• ๋‹น๋˜๊ณ  ์ €์žฅ๋œ๋‹ค. 
  • ์ •๋ ฌ ํŒจ๋”ฉ: ํ•„์š”์—†๋Š” ์—ญํ• ์ด๋‹ค. ํ•ซ์ŠคํŒŸ ๊ฐ€์ƒ ๋จธ์‹ ์˜ ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์—์„œ ๊ฐ์ฒด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋Š” ๋ฐ˜๋“œ์‹œ 8๋ฐ”์ดํŠธ์˜ ์ •์ˆ˜์—ฌ์•ผ ํ•˜๋ฏ€๋กœ, ์ธ์Šคํ„ด์Šค ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํŒจ๋”ฉ์œผ๋กœ ์ฑ„์šด๋‹ค.

 

๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ธฐ

๋Œ€๋‹ค์ˆ˜ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐœ์ฒด ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์กฐํ•ฉํ•ด ๋งŒ๋“ค์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ ์Šคํƒ์— ์žˆ๋Š” ์ฐธ์กฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ํž™์— ๋“ค์–ด ์žˆ๋Š” ๊ฐ์ฒด๋“ค์— ์ ‘๊ทผํ•ด ์ด๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค. <์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ๋ช…์„ธ> ๋Š” ์ฐธ์กฐ ํƒ€์ž…์„ ๋‹จ์ง€ '๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ'๋ผ๊ณ  ํ• ๋ฟ, ํž™์—์„œ ๊ฐ์ฒด์˜ ์ •ํ™•ํ•œ ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด์–ด ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ทœ์ •ํ•˜์ง€ ์•Š์•„, ์ฃผ๋กœ ํ•ธ๋“ค์ด๋‚˜ ๋‹ค์ด๋ ‰ํŠธ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„ํ•˜์—ฌ ๊ฐ์ฒด์— ์ ‘๊ทผํ•œ๋‹ค.

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

 

 

์ž๋ฐ” ํž™ ์˜ค๋ฒ„ํ”Œ๋กœ

์ž๋ฐ” ํž™์€ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค. ๊ฐ์ฒด๋ฅผ ๊ณ„์† ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ๊ฐ์ฒด๋“ค์— ์ ‘๊ทผํ•  ๊ฒฝ๋กœ๊ฐ€ ์‚ด์•„ ์žˆ๋‹ค๋ฉด ์–ธ์  ๊ฐ€๋Š” ํž™์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰์„ ๋„˜์–ด์„œ๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์˜ค๋ฒ„ํ”Œ๋กœ๋œ๋‹ค. ์ตœ์†Œ ํฌ๊ธฐ๋Š” -Xms ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ, ์ตœ๋Œ€ ํฌ๊ธฐ๋Š” -Xmx ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•œ๋‹ค. -XX:+HeapDumpOnOutOfMemeoryError ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์˜ค๋ฒ„ํ”Œ๋กœ๋์„ ๋•Œ ๊ฐ€์ƒ ๋จธ์‹ ์ด ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ์ ์˜ ํž™ ๋ฉ”๋ชจ๋ฆฌ ์Šค๋ƒ…์ˆ์„ ํŒŒ์ผ๋กœ ์ €์žฅ(dump) ํ•œ๋‹ค. ์‹ค์ œ๋กœ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ OutOfMemoryError๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ์˜์—ญ์ด ์ž๋ฐ” ํž™ ์ด๋‹ค.

 

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

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

 

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์•„๋‹Œ, ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๋‹ค ์‚ด์•„ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋ฉด, ๋จผ์ € ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์˜ ํž™ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ค์ •(-Xmx์™€ -Xms) ๊ณผ ์ปดํ“จํ„ฐ์˜ ๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๊ฐ€์ƒ ๋จธ์‹ ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ๋งŽ์ด ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณธ๋‹ค. ๋‹ค์Œ, ์ฝ”๋“œ์—์„œ ์ˆ˜๋ช… ์ฃผ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๊ฑฐ๋‚˜ ์ƒํƒœ๋ฅผ ๋„ˆ๋ฌด ์˜ค๋ž˜ ์œ ์ง€ํ•˜๋Š” ๊ฐ์ฒด๋Š” ์—†๋Š”์ง€, ๊ณต๊ฐ„ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์“ฐ๊ณ  ์žˆ์ง€๋Š” ์•Š์€์ง€ ์‚ดํŽด ํ”„๋กœ๊ทธ๋žจ์ด ๋Ÿฐํƒ€์ž„์— ์†Œ๋น„ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ตœ์†Œ๋กœ ๋‚ฎ์ถ˜๋‹ค.

 

 

๊ฐ€์ƒ ๋จธ์‹  ์Šคํƒ๊ณผ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ

 

ํ•ซ์ŠคํŒŸ ๊ฐ€์ƒ ๋จธ์‹ ์€ ๊ฐ€์ƒ ๋จธ์‹  ์Šคํƒ๊ณผ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์Šคํƒ ํฌ๊ธฐ๋Š” ์˜ค์ง -Xss ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. <์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ๋ช…์„ธ>์—๋Š” ๊ฐ€์ƒ ๋จธ์‹  ์Šคํƒ๊ณผ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ์—์„œ์˜ ๋ฐœ์ƒํ•˜๋Š” ๋‘๊ฐ€์ง€ ์˜ˆ์™ธ๋ฅผ ๋ช…์„ธํ•œ๋‹ค.

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

ํ•ซ์ŠคํŒŸ ๊ฐ€์ƒ ๋จธ์‹ ์€ ํ™•์žฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ OutOfMemoryError๊ฐ€ ๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์Šค๋ ˆ๋“œ ์‹คํ–‰ ์ค‘์— ๊ฐ€์ƒ ๋จธ์‹  ์Šคํƒ์ด ๋„˜์น˜๋Š” ์ผ์€ ์—†๋‹ค. ์ฆ‰ ์Šคํƒ ์šฉ๋Ÿ‰์ด ๋ถ€์กฑํ•˜์—ฌ ์ƒˆ๋กœ์šด ์Šคํƒ ํ”„๋ ˆ์ž„์„ ๋‹ด์„ ์ˆ˜ ์—†์„ ๋•Œ๋งŒ StackOverflowError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ๋ฒ„์ „๊ณผ ์šด์˜ ์ฒด์ œ์— ๋”ฐ๋ผ, ํŠนํžˆ ์šด์˜ ์ฒด์ œ์˜ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ตœ์†Œ ์Šคํƒ ํฌ๊ธฐ์— ์ œํ•œ์ด ์žˆ๋‹ค.

 

์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์—์„œ ๊ณผ๋„ํ•œ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ์œผ๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ”Œ๋กœ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ตœ๋Œ€ ํž™ ํฌ๊ธฐ์™€ ์Šคํƒ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ค.

 

 

๋ฉ”์„œ๋“œ ์˜์—ญ๊ณผ ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€ ์˜ค๋ฒ„ํ”Œ๋กœ

๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€์ด ์˜ค๋ฒ„ํ”Œ๋กœ๋˜๋ฉด ์ถœ๋ ฅ ๋ฉ”์‹œ์ง€์—์„œ "OutOfMemoryError" ๋‹ค์Œ์— PermGen space" ๋ผ๊ณ  ๋‚˜์˜จ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€์ด ๋ฉ”์„œ๋“œ ์˜์—ญ์˜ ํ•œ ๋ถ€๋ถ„์ž„์„ ์•Œ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ ์˜์—ญ์˜ ์˜ค๋ฒ„ํ”Œ๋กœ๋„ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ”Œ๋กœ ์˜ˆ์™ธ๋‹ค. 

 

 

๋„ค์ดํ‹ฐ๋ธŒ ๋‹ค์ด๋ ‰ํŠธ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ”Œ๋กœ

๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”๋ชจ๋ฆฌ(native memory)**๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ

 

ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์ด๋ ‰ํŠธ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์€ -XX:MaxDirectMemorySize ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•œ๋‹ค. ๊ธฐ๋ณธ ์„ค์ •๊ฐ’์€ -Xmx๋กœ ์„ค์ •ํ•œ ์ž๋ฐ” ํž™์˜ ์ตœ๋Œ“๊ฐ’์ด๋‹ค.

 

 

 

์ฐธ๊ณ 

 

https://product.kyobobook.co.kr/detail/S000213057051

 

JVM ๋ฐ‘๋ฐ”๋‹ฅ๊นŒ์ง€ ํŒŒํ—ค์น˜๊ธฐ | ์ €์šฐ์ฆˆ๋ฐ - ๊ต๋ณด๋ฌธ๊ณ 

JVM ๋ฐ‘๋ฐ”๋‹ฅ๊นŒ์ง€ ํŒŒํ—ค์น˜๊ธฐ | ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์˜ ๊นŠ์ˆ™ํ•œ ๋‚ด๋ถ€๋ฅผ ํ–ฅํ•ด ๋– ๋‚˜๋Š” ํฅ๋ฏธ์ง„์ง„ํ•œ ๋ชจํ—˜C·C++๋ฅผ ์‚ฌ์šฉํ•ด ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋˜ ์‹œ์ ˆ ๊นŒ๋‹ค๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ํ”Œ๋žซํผ ์ด์‹์„ฑ ๋ฌธ์ œ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—

product.kyobobook.co.kr

 

 

https://jellili.tistory.com/55

 

[JAVA] JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ - ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ(Runtime Data Area) ์•Œ์•„๋ณด๊ธฐ

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

jellili.tistory.com