공부

[JAVA]참조 유형의 4단계 / [운영체제] Locality of Reference

Lucy Loop 2024. 6. 19. 20:39

4 levels of object references

Strong    Soft   Weak   Phantom
<--- 강함                       약함 --->
     GC x                        GC o

 

 

 

아래로 갈 수록 참조가 약한 것으로, 

GC의 대상이 되기 쉽다

 

↑ 참조의 강도가 높음

  1. 강한 참조 Stong Reference
    • 기본
    • GC되지 않음
    • GC 원한다면 명시적 null 표시 필요
  2. 약한 참조 Soft Reference
    1. 메모리 부족 시 GC의 대상
    2. 참조 지역성의 원리를 활용하기 위해 주로 cache에 사용됨. cache의 성능을 개선하며 메모리 누수 방지가 가능
  3. Weak reference
    1. 해당 객체를 참조하는 strong ref.가 없는 경우 바로 GC의 대상
    2. 캐시에 사용!
    3. 여유 있어도 즉시 수거될 가능성이 높다
  4. Phantom Reference
    1. 객체의 finalize() 메소드 호출된 직후 GC가 수거
    2. 보통 Native 객체나 Direct Memory와 같이 JVM에서 관리되지 않는 자원들을 해제하기 위해 사용됨
    3. 객체가 참조되지 않음
    4. 객체 수거시에도 참조가 남아 있음
    5. finalize()호출된 직후 Phantom Reference가 ReferenceQueue에 등록됩니다 -> finalize()호출됨 알 수 있음

↓ GC의 대상이 되기 쉽다

참고

https://liltdevs.tistory.com/182

 

 

 

 

 

 

 

[운영체제] Locality of Reference

캐시 메모리

  • 주기억장치와 메모리 속도 차이를 극복 (병목현상 줄임)
  • 효율 높이기 위해서는 캐시 적중률(hit-rate)높여야

 

참조의 지역성

  • 캐시 적중률Hit-rate을 높이는 원리
  • 프로그램이 일정 기간 동안 특정 메모리 위치 집합에 접근하는 경향이 있는 현상
  • 주소가 서로 가까운 명령어에 접근하는 경항
  • 공간적 (위치 근접) / 시간적 (최근 참조)
  • 예시: 배열 곱셈에서 루프 순서인 j와 k를 바꾸는 것만으로도 속도가 증가한다 <— 조금 어려움 나중에 다시 보자

 

https://code-lab1.tistory.com/322

https://velog.io/@piopiop/%ED%96%89%EB%A0%AC%EA%B3%B1%EC%85%88-%EC%B5%9C%EC%A0%81%ED%99%94-%EA%B3%B5%EA%B0%84-%EC%A7%80%EC%97%AD%EC%84%B1%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%BA%90%EC%8B%9C-%EC%B9%9C%ED%99%94%EC%A0%81-%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1