๋ฒ ์–ด_
TechBear
๋ฒ ์–ด_
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (336)
    • Spring (33)
      • ๊ฐœ๋… (13)
      • Security (5)
      • ์‹ค์Šต (1)
      • ํ† ๋น„ ์Šคํ”„๋ง (11)
    • JPA (6)
    • ํ”„๋กœ์ ํŠธ ๊ธฐ๋ก (24)
    • DB (13)
    • JAVA (18)
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (50)
      • ์œ ํ˜•์ •๋ฆฌ (8)
      • Baekjoon (21)
      • LeetCode (18)
    • ๋””์ž์ธํŒจํ„ด (0)
    • ๊ฐœ๋ฐœ์„œ์  (79)
      • Effective Java (78)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (1)
    • ๋…ํ›„๊ฐ (4)
    • ๋ณด์•ˆ (2)
    • ์šด์˜์ฒด์ œ(OS) (53)
      • ๊ณต๋ฃก์ฑ… (53)
    • ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ (28)
      • ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ ํ•˜ํ–ฅ์‹ ์ ‘๊ทผ (23)
    • ์ž๋ฃŒ๊ตฌ์กฐ (1)
    • DevOps (2)
    • ์•ฑ ๊ฐœ๋ฐœ (20)
      • ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค (20)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    ๊ณต์ง€์‚ฌํ•ญ

    ์ธ๊ธฐ ๊ธ€

    ํƒœ๊ทธ

    • BFS
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    • ์ดํŽ™ํ‹ฐ๋ธŒ์ž๋ฐ”
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ์Šค๋ ˆ๋“œ
    • ์Šคํ”„๋ง
    • leetcode
    • ํ•จ์ˆ˜ํ˜•์ธํ„ฐํŽ˜์ด์Šค
    • jpa
    • ํ† ๋น„์Šคํ”„๋ง
    • dfs
    • ์ฝ”๋“œ์—…
    • ์šด์˜์ฒด์ œ
    • C++
    • ์ž๋ฐ”8
    • java
    • Spring
    • ์ž๋ฐ”
    • ์Šคํ”„๋ง์‹œํ๋ฆฌํ‹ฐ
    • ๋ฐฑ์ค€

    ์ตœ๊ทผ ๋Œ“๊ธ€

    ์ตœ๊ทผ ๊ธ€

    ํ‹ฐ์Šคํ† ๋ฆฌ

    hELLO ยท Designed By ์ •์ƒ์šฐ.
    ๋ฒ ์–ด_

    TechBear

    [Java] ์ž๋ฐ”์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜
    JAVA

    [Java] ์ž๋ฐ”์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

    2023. 6. 7. 05:32

    ๐Ÿ” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ์—ญํ• 

    ์ž๋ฐ”์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ๊ณตํ†ต์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    1. ํž™(Heap)๋‚ด์˜ ๊ฐ์ฒด ์ค‘์—์„œ ๊ฐ€๋น„์ง€(Garbage)๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค.
    2. ์ฐพ์•„๋‚ธ ๊ฐ€๋น„์ง€๋ฅผ ์ฒ˜๋ฆฌํ•ด์„œ ํž™์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•œ๋‹ค.

    ๐Ÿ” Reachability

    GC๋Š” ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋น„์ง€์ธ์ง€ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด reachability๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋งŒ์•ฝ ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ์ค‘(์œ ํšจํ•œ ์ฐธ์กฐ)์ด๋ผ๋ฉด reachable, ์‚ฌ์šฉ์ค‘์ด์ง€ ์•Š์œผ๋ฉด unreachable๋กœ ๊ตฌ๋ณ„ํ•œ๋‹ค. ์ฐธ์กฐ๋œ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ณ  ๊ฐ์ฒด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด ์žˆ๊ธฐ์— ์ฐธ์กฐ ์‚ฌ์Šฌ์„ ์ด๋ฃฌ๋‹ค. ์ด๋•Œ, ์œ ํšจํ•œ ์ฐธ์กฐ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์ดˆ์˜ ์ฐธ์กฐ๋ฅผ ์ฐพ๋Š”๋‹ค. ์ด๋ฅผ root set์ด๋ผ๊ณ  ํ•œ๋‹ค.

    ํž™์— ์žˆ๋Š” ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋Š” 4๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

    1. ํž™ ๋‚ด์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์˜ํ•œ ์ฐธ์กฐ
    2. Java ์Šคํƒ (Java ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์™€ ํŒŒ๋ฆฌ๋ฏธํ„ฐ๋“ค์— ์˜ํ•œ ์ฐธ์กฐ)
    3. ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํƒ
    4. ๋ฉ”์„œ๋“œ ์˜์—ญ์˜ ์ •์  ๋ณ€์ˆ˜์— ์˜ํ•œ ์ฐธ์กฐ
      ์ด ์ค‘ ํž™ ๋‚ด์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์˜ํ•œ ์ฐธ์กฐ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ 3๊ฐœ๊ฐ€ root set์ด๋ฉฐ, reachability๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์ด ๋œ๋‹ค.

    Reachability

    ์œ„ ๊ทธ๋ฆผ์—์„œ root set์œผ๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ ์ฐธ์กฐ ์‚ฌ์Šฌ์€ reachableํ•œ ๊ฐ์ฒด์ด๊ณ , ๋‚˜๋จธ์ง€๋Š” unreachable ๊ฐ์ฒด๋กœ GC์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค. reachable ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ reachable ๊ฐ์ฒด๊ฐ€ ์ด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ด ๊ฐ์ฒด๋Š” unreachable ๊ฐ์ฒด์ด๋‹ค.

     

    ๐Ÿ—๏ธ Strong Reference

    ์ผ๋ฐ˜์ ์œผ๋กœ java.lang.ref ํŒจํ‚ค์ง€์— ์žˆ๋Š” ๋ ˆํผ๋Ÿฐ์Šค ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ด๋Š” ์ผ๋ฐ˜์ ์ธ ์ฐธ์กฐ์ด๋ฉฐ, ์ด๋ฅผ strong reference๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

    MyNumber number = new MyNumber();

    ์ด ์ฒ˜๋Ÿผ number๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ˜•ํƒœ์ด๋ฉฐ, ์ด๋Ÿฐ ๊ฒฝ์šฐ GC์˜ ๋Œ€์ƒ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

     

    ๐Ÿ—๏ธ Soft Reference

    GC๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๊ทœ์น™์€ JVM๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด์ง€๋งŒ softly-reachable ๊ฐ์ฒด๋Š” OOM(Out of Memory)๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ํšŒ์ˆ˜๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•œ ์š”์†Œ์ธ ์บ์‹œ ๋“ฑ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    MyNumber number = new MyNumber();
    SoftReference<MyNumber> numberRef = new SoftReference<>(number);

     

    ๐Ÿ—๏ธ Weak Reference

    Weak Reference Object๋Š” strong reference์™€ soft reference๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์ด ๊ฐ์ฒด๋Š” weak reference๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋งŒ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. Soft References๋Š” ์ฐธ์กฐ๊ฐ€ ์ดํ›„์— ๋‹ค์‹œ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฉด ์‚ฌ์šฉ๋˜์ง€๋งŒ, weak reference๋Š” ์ฐธ์กฐ๊ฐ€ ์กด์žฌํ•  ๋•Œ๋งŒ ์กด์žฌํ•œ๋‹ค.

    WeakReference<MyNumber> numberRef = new WeakReference<MyNumber>(new MyNumber());
    MyNumber number = numberRef.get();

     

     

    ์—ฌ๊ธฐ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ null๋กœ ๋ฐ”๊พธ๋ฉด weakreference๋งŒ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ  ์ด ๋•Œ gc์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.

    number = null;

     

    [์ฐธ์กฐ]

    1. https://d2.naver.com/helloworld/329631
    ์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)
      'JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
      • [Java] Thread vs Runnable
      • [Java] ์ธํ„ฐํŽ˜์ด์Šค
      • [Java] JVM์ด๋ž€?
      • [Java] Optional์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ
      ๋ฒ ์–ด_
      ๋ฒ ์–ด_
      Today I learned | ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐœ๋ฐœ์ž

      ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”