loose
이로운 개발하기
loose
전체 방문자
오늘
어제
  • 전체 (207)
    • ☕ Java (25)
    • 📘 Effective Java (9)
    • 🍃 Spring (49)
    • 📖 ORM (9)
    • ☸️ Kubernetes (13)
    • 🐧 Linux (5)
    • 🐋 Docker (5)
    • 🛠️ CI & CD (7)
    • 🕸️ Web (6)
    • 🔗 Distributed System (3)
    • 📜 Js (10)
    • 📈 Database (11)
    • 🗂️ Etc (36)
    • 🧑 Chitchat (10)
    • 📒 문학 (9)
    • 👜 개인 공부 창고 (0)

공지사항

최근 글

최근 댓글

loose

이로운 개발하기

📘 Effective Java

[Item 7~8] 다 쓴 객체 참조를 해제하라, finalizer와 cleaner 사용을 피하라.

2022. 9. 3. 00:00

[Item 7] 다 쓴 객체 참조를 해제하라


책의 요지와는 별개로 신기했던건 Arrays.copyOf로 배열의 길이를 늘릴 수 있다는 점이다. (워낙 배열을 안쓰기도 해서 몰랐지만 항상 고정 크기인줄만 알았던 배열이 늘어난다는 건 신기했다.)

책에서 설명하는 것은 Stack 구조로 배열을 만들 때 pop 메소드가 일어나는 경우 해당 자리에 있던 객체는 가비지 컬렉터가 회수해가지 않는다고 한다.
그래서 단순히 배열의 요소 위치만 변경해서 사이즈를 줄이는 것 뿐만 아니라 다 쓴 객체를 null 값으로 지정해줘야 객체 참조가 해제가 된다.
이 행위를 해주지 않으면 프로그램은 해당 객체를 계속 들고 있기 때문에 메모리 누수 현상이 일어난다.

결론


Stack 클래스가 대표적으로 메모리 누수현상이 일어나는 케이스라고 한다.

다 쓴 객체를 null로 만드는 가장 좋은 상황은 scope에서 벗어났을 때라고 한다. 그게 바로 Stack이다.
그 다음으로는 캐시 기능 역시 메모리 누수를 일으키는 주범으로 설명하고 있는데 자바로 캐싱 기능을 직접 만들 수 있지만 보통 Spring에서는 EhCache와 같은 것들을 이용하면 시간 설정도 가능하고 캐시를 유동적으로 지우기 편리하다.

사실 Stack을 쓸 일도 배열을 쓸 일도 없거니와 scope 바깥으로 내보내는 코딩을 하는 경우가 그렇게 많지 않을 것 같다. 물론 평소엔 중요하지 않더라도 언젠가 이용하게 되고 위의 내용을 모른다면 서버 과부하는 피해갈 수 없을 것이다.

[Item 8] finalizer와 cleaner 사용을 피하라.


finalizer와 cleaner는 객체 소멸을 시켜주는 기능들이라고 한다. 사실 본 적도 없다. finalizer와 cleaner는 객체마다 상속받을 수 있는 메소드들인데, 가비지 컬렉터(gc)를 실행시키면 finalizer를 실행시켜 객체가 소멸되는 원리다.

스프링에선 기본적으로 객체들은 스프링이 모두 관리한다. 책에서도 사용 조차도 피하라고 하고 있으니 일단 패스..

'📘 Effective Java' 카테고리의 다른 글

[Item 18] 상속보다는 컴포지션(조합)을 사용하라  (0) 2023.07.15
[Item 9] try-finally보다는 try-with-resources를 사용하라  (0) 2022.09.03
[Item 6] 불필요한 객체 생성을 피하라  (0) 2022.09.02
[Item 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라  (0) 2022.09.02
[Item 4] 인스턴스화를 막으려거든 private 생성자를 사용하라.  (0) 2022.09.02
    '📘 Effective Java' 카테고리의 다른 글
    • [Item 18] 상속보다는 컴포지션(조합)을 사용하라
    • [Item 9] try-finally보다는 try-with-resources를 사용하라
    • [Item 6] 불필요한 객체 생성을 피하라
    • [Item 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
    loose
    loose
    불만하는 사람은 90명, 해결하는 사람은 9명, 리드하는 사람은 1명 음악과 낭만을 좋아합니다.
    hELLO. 티스토리 스킨을 소개합니다.
    제일 위로

    티스토리툴바