CodeGym/Java Course/๋ชจ๋“ˆ 3/์„ธ๋Œ€๋ณ„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

์„ธ๋Œ€๋ณ„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

์‚ฌ์šฉ ๊ฐ€๋Šฅ

๊ฐœ์ฒด ์„ธ๋Œ€ ์ž‘์—…

Java ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋Š” ์ˆ˜๋ช…๋ณ„๋กœ ๊ฐœ์ฒด๋ฅผ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ๋Œ€๋ณ„ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ „๋žต์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

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

JVM์˜ ํž™ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

๊ฐœ์ฒด ์„ธ๋Œ€ ์ž‘์—…

์ Š์€ ์„ธ๋Œ€

์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐœ์ฒด๋Š” ์ Š์€ ์„ธ๋Œ€์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์ Š์€ ์„ธ๋Œ€๋Š” ๋‹ค์‹œ ๋‘ ๋ถ€๋ฅ˜๋กœ ๋‚˜๋‰œ๋‹ค.

  • Eden Space - ๋ชจ๋“  ์ƒˆ ๊ฐœ์ฒด๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์‹œ์ž‘๋˜๋ฉฐ ์ดˆ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
  • Survivor Spaces (FromSpace ๋ฐ ToSpace) - ๊ฐœ์ฒด๋Š” ํ•˜๋‚˜์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ฃผ๊ธฐ์—์„œ ์‚ด์•„๋‚จ์€ ํ›„ Eden์—์„œ ์—ฌ๊ธฐ๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค.

๊ฐ์ฒด๊ฐ€ ์ Š์€ ์„ธ๋Œ€๋กœ๋ถ€ํ„ฐ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๋˜๋Š” ๊ณผ์ •์„ ๋งˆ์ด๋„ˆ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ด๋ฒคํŠธ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Eden์˜ ๊ณต๊ฐ„์ด ๊ฐœ์ฒด๋กœ ์ฑ„์›Œ์ง€๋ฉด ์ž‘์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฃฝ์€ ๊ฐœ์ฒด๋Š” ์ œ๊ฑฐ๋˜๊ณ  ๋ชจ๋“  ์‚ด์•„์žˆ๋Š” ๊ฐœ์ฒด๋Š” ๋‚˜๋จธ์ง€ ๋‘ ๊ณต๊ฐ„ ์ค‘ ํ•˜๋‚˜๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. ์ž‘์€ GC๋Š” ๋˜ํ•œ ์„œ๋ฐ”์ด๋ฒ„ ๊ณต๊ฐ„์˜ ๊ฐ์ฒด๋ฅผ ํ™•์ธํ•˜๊ณ  ๋‹ค๋ฅธ(๋‹ค์Œ) ์„œ๋ฐ”์ด๋ฒ„ ๊ณต๊ฐ„์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ˆœ์„œ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ์—๋ด์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•(์‚ฐ ๊ฒƒ๊ณผ ์ฃฝ์€ ๊ฒƒ)์˜ ๋ฌผ์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ž‘์€ GC๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฃฝ์€ ๊ฐœ์ฒด๊ฐ€ Eden์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ด์•„์žˆ๋Š” ๊ฐœ์ฒด๋Š” ๊ณต๊ฐ„-1(FromSpace)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. Eden๊ณผ space-2๋Š” ์ด์ œ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด Eden์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. Eden๊ณผ space-1์˜ ์ผ๋ถ€ ๊ฐœ์ฒด๊ฐ€ ์ฃฝ์Šต๋‹ˆ๋‹ค.
  4. ์ž‘์€ GC๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฃฝ์€ ๊ฐœ์ฒด๊ฐ€ Eden๊ณผ space-1์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ด์•„์žˆ๋Š” ๊ฐœ์ฒด๋Š” ๊ณต๊ฐ„-2(ToSpace)๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. Eden๊ณผ space-1์€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

-Xmn ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ Š์€ ์„ธ๋Œ€ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

์ด์ „ ์„ธ๋Œ€

์ƒ๋‹นํ•œ ์‹œ๊ฐ„ ๋™์•ˆ(์˜ˆ: ํ”„๋กœ๊ทธ๋žจ ์ˆ˜๋ช…์˜ ๋Œ€๋ถ€๋ถ„) ์‚ด์•„์žˆ๋Š” ๊ฐœ์ฒด๋Š” ๊ฒฐ๊ตญ ์˜ค๋ž˜๋œ ๊ฐœ์ฒด(100์„ธ ์ด์ƒ)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์„ธ๋Œ€๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ์˜ค๋žซ๋™์•ˆ ์ƒ์กด์ž ๊ณต๊ฐ„์— ๋‚จ์•„ ์žˆ๋˜ ๊ฐœ์ฒด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ฒด์˜ ์ˆ˜๋ช… ์ž„๊ณ„๊ฐ’์€ ๊ฐœ์ฒด๊ฐ€ ์ด์ „ ์„ธ๋Œ€๋กœ ์ด๋™๋˜๊ธฐ ์ „์— ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ฃผ๊ธฐ ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ์ด์ „ ์„ธ๋Œ€์—์„œ ๊ฐ€๋น„์ง€๋กœ ๋ณด๋‚ด์ง€๋Š” ๊ณผ์ •์„ ๋ฉ”์ธ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ด๋ฒคํŠธ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

-Xms ๋ฐ -Xmx ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๊ธฐ ๋ฐ ์ตœ๋Œ€ ํž™ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

Java๋Š” ์„ธ๋Œ€๋ณ„ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ์ฒด๊ฐ€ ๋” ๋งŽ์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ด๋ฒคํŠธ๋ฅผ ๊ฒฝํ—˜ํ• ์ˆ˜๋ก ํž™์—์„œ ๋” ๋งŽ์ด ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Š” ์ Š์€ ์„ธ๋Œ€์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ถฉ๋ถ„ํžˆ ์˜ค๋ž˜ ์‚ด๋ฉด ๊ฒฐ๊ตญ ์ •๊ทœ ์„ธ๋Œ€๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

๊ณต๊ฐ„๊ณผ ์„ธ๋Œ€ ๊ฐ„์˜ ๊ฐœ์ฒด ํ™๋ณด๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ๋‹ค์Œ ์˜ˆ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋จผ์ € Young Generation์˜ Eden ๊ณต๊ฐ„์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.

์ž‘์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ๋ฐœ์ƒํ•˜๋Š” ์ฆ‰์‹œ Eden์˜ ์‚ด์•„์žˆ๋Š” ๊ฐœ์ฒด๊ฐ€ FromSpace๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์‚ฌ์†Œํ•œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ๋ฐœ์ƒํ•˜๋ฉด Eden๊ณผ ์šฐ์ฃผ์˜ ์‚ด์•„์žˆ๋Š” ๊ฐœ์ฒด๊ฐ€ ToSpace๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค.

์ด ์ฃผ๊ธฐ๋Š” ํŠน์ • ํšŸ์ˆ˜๋งŒํผ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์  ์ดํ›„์—๋„ ๊ฐœ์ฒด๊ฐ€ ์—ฌ์ „ํžˆ "์„œ๋น„์Šค ์ค‘"์ด๋ฉด ๋‹ค์Œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ฃผ๊ธฐ์—์„œ ๊ฐœ์ฒด๋ฅผ ์ด์ „ ์„ธ๋Œ€ ๊ณต๊ฐ„์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์˜๊ตฌ ์ƒ์„ฑ ๋ฐ ๋ฉ”ํƒ€์ŠคํŽ˜์ด์Šค

ํด๋ž˜์Šค ๋ฐ ๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์˜๊ตฌ ์ƒ์„ฑ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. JVM์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋Ÿฐํƒ€์ž„ ์‹œ ์ด๋ฅผ ์ฑ„์›๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋Š” ์˜๊ตฌ ์ƒ์„ฑ์—์„œ ๊ฐ€๋น„์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-XX:PermGen ๋ฐ -XX:MaxPermGen ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜๊ตฌ ์ƒ์„ฑ์˜ ์ดˆ๊ธฐ ๋ฐ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

๋ฉ”ํƒ€ ๊ณต๊ฐ„

Java 8๋ถ€ํ„ฐ PermGen ๊ณต๊ฐ„์€ MetaSpace ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„์€ PermGen๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด ํž™ ๊ณต๊ฐ„์€ ์ด์ œ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

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

์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค