JavaRush /Java Blog /Random-KO /Java์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ
Diana
๋ ˆ๋ฒจ 41

Java์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ(๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜๊ธฐ)์˜ ๋™์ž‘ ๋ผ์ธ

๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ Java ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๋Š” JVM(Java Virtual Machine)์— ์˜ํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฐœ์ฒด์— ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. JVM๋งˆ๋‹ค ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฐธ์กฐ ๊ณ„์‚ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋˜๋Š” ๋งˆํฌ์—… ๋ฐ ์Šคํฌ๋ž˜ํ•‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.์“ฐ๋ ˆ๊ธฐ ์ˆ˜๊ฑฐ - 1

Java์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ ์‹คํ–‰

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

๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ ์‹คํ–‰ ์š”์ฒญ

์š”์ฒญํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
System.gc()
Runtime.getRuntime().gc()

๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ ์‹คํ–‰์— ๋Œ€ํ•œ ์ ํ•ฉ์„ฑ

์‚ด์•„์žˆ๋Š” ์ŠคํŠธ๋ฆผ์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ์ฒด๋Š” ํ๊ธฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๋Š” ๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ์— ํ๊ธฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ฐธ์กฐ ์œ ํ˜•์˜ ๋ณ€์ˆ˜๊ฐ€ "0"์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์ฐธ์กฐ๊ฐ€ ์—†์œผ๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ํ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ฐธ์กฐํ˜•์˜ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ, ํ•ด๋‹น ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์ฐธ์กฐ๊ฐ€ ์—†์œผ๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ํ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”์„œ๋“œ์—์„œ ๋กœ์ปฌ๋กœ ์ƒ์„ฑ๋œ ๊ฐœ์ฒด๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ์—์„œ ๋‚ด๋ณด๋‚ด์ง€์ง€ ์•Š๋Š” ํ•œ(์ฆ‰, ์˜ˆ์™ธ๋กœ ๋ฐ˜ํ™˜๋˜๊ฑฐ๋‚˜ ๋ฐœ์ƒ๋˜๋Š”) ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • ์„œ๋กœ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฐœ์ฒด๋Š” ๋ผ์ด๋ธŒ ์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํ๊ธฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:
public class TestGC
  {
    public static void main(String [] args)
    {
      Object o1 = new Integer(3);               // Line 1
      Object o2 = new String("Tutorial");       // Line 2
      o1 = o2;                                  // Line 3
      o2 = null;                                // Line 4
      // Rest of the code here
    }
  }
์ด ์˜ˆ์—์„œ Integero1์ด ์›๋ž˜ ์ฐธ์กฐํ•œ ๊ฐ์ฒด(์ •์ˆ˜)๋Š” ์ด์ œ o1์ด ๊ฐ์ฒด String(๋ฌธ์ž์—ด)๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ธ 3 ์ดํ›„์— ์‚ญ์ œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. o2๊ฐ€ null์„ ์ฐธ์กฐํ•˜๋„๋ก ์ƒ์„ฑ๋˜์—ˆ๋”๋ผ๋„ ํ•ด๋‹น ๊ฐ์ฒด String(๋ฌธ์ž์—ด)๋Š” o1์ด ์ฐธ์กฐํ•˜๋ฏ€๋กœ ์žฌํ™œ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ

finalize()Java ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐœ์ฒด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ์ •๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ(์ตœ์ข…ํ™”)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ๋” ์ด์ƒ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๊ฐœ์ฒด์— ๋Œ€ํ•ด ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํด๋ž˜์Šค์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค Object. ์ด๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ์ƒ์†๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. finalize()์„œ๋ธŒํด๋ž˜์Šค๋Š” ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค์—์„œ ์ž์‹ ์„ ํ•ด์ œํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ •๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค .
protected void finalize() throws Throwable
๋ฉ”์†Œ๋“œ์— ์˜ํ•ด ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด finalize()์˜ˆ์™ธ๊ฐ€ ๋ฌด์‹œ๋˜๊ณ  ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ข…๋ฃŒ๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” finalize()๊ฐ์ฒด์˜ ์ˆ˜๋ช… ๋™์•ˆ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. finalize()๋ชจ๋“  ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ๊ธฐ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค . ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒฝ์šฐ์—๋Š” ์ด ๊ฐœ์ฒด์— ๋Œ€ํ•ด ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๋” ์ด์ƒ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค finalize(). ์ด ๋ฉ”์†Œ๋“œ๋Š” finalize()๊ฐ์ฒด๊ฐ€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๋˜๊ธฐ ์ „์— ํ•ญ์ƒ ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. finalize()๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ๊ฐ์ฒด๋Š” ํ๊ธฐ ๋Œ€์ƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ์ „์ฒด ๊ธฐ๊ฐ„ ๋™์•ˆ ํ•ด๋‹น ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋ฉ”์„œ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค .

์š”์•ฝ

์ด๋ฒˆ ์ ˆ์—์„œ๋Š” ์ž๋ฐ” ์–ธ์–ด์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ์ˆ ์ธ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(garbage collection) ๊ณผ์ •์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ๊ฐ•์ œ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ์ฒด๋ฅผ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์› ๊ณ  finalize()๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๊ฐ์ฒด๋ฅผ ํšŒ์ˆ˜ํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

์šด๋™

์งˆ๋ฌธ: 7ํ–‰ ์ดํ›„์—๋Š” ๋ช‡ ๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ํ๊ธฐ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๊นŒ?
public class TutorialGC
  {
    public static void main(String [] args)
    {
      Object a = new Integer(100);  // Line1
      Object b = new Long(100);     // Line2
      Object c = new String("100"); // Line3
      a = null;                     // Line4
      a = c;                        // Line5
      c = b;                        // Line6
      b = a;                        // Line7
      // Rest of the code here
    }
  }
๋‹ต ์˜ต์…˜: A. 0 B. 1 C. 2 D. 3 E. ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์˜ต์…˜: B ์„ค๋ช…: ๋ผ์ธ 1, 2, 3์—์„œ ์ƒ์„ฑ๋œ ์„ธ ๊ฐœ์ฒด ์ค‘ ํ•ด๋‹น ๊ฐœ์ฒด๋งŒ Integer๋‹ค์Œ ์œ„์น˜์—์„œ ์‚ญ์ œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 7ํ–‰ ๋. ์›๋ž˜ object ๋ฅผ ์ฐธ์กฐํ–ˆ๋˜ ๋ณ€์ˆ˜ ์ฐธ์กฐ a๋Š” 5ํ–‰์˜ Integer๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค . ๋”ฐ๋ผ์„œ 5ํ–‰ ์ดํ›„์—๋Š” ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ๋ฐ 6ํ–‰๊ณผ 7ํ–‰์˜ ๊ฐ์ฒด ์™€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. StringIntegerbcStringLong
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION