반응형
이펙티브 자바(Effective java) 를 읽고 정리한 글입니다.
같은 기능의 객체를 매번 생성하는 것 보다, 하나의 객체를 재사용하는 것이 좋다.
불필요한 객체 생성 피하기
1. 정적 팩터리 메서드를 제공하는 불변 클래스에서는 불필요한 객체 생성을 피할 수 있다.
2. 생성 비용이 비싼 객체는 캐싱하여 재사용할 수 있다.
예를 들어 정규표현식용 Pattern 은 입력받은 정규표현식에 해당하는 유한 상태 머신을 만들어서 인스턴스 생성 비용이 높다.
성능을 고려해서 Pattern 인스턴스를 클래스 초기화 과정에서 직접 캐싱해둘 수 있다.
3. 오토박싱(auto boxing) 과정에서도 불필요한 객체가 생성될 수 있다.
오토박싱은 원시 타입과 박싱 타입의 구분을 흐려주지만, 완전히 없애주는 것은 아니다.
성능을 고려하여 박싱 타입보다는 원시 타입을 사용하자.
유의할 점
1. 생성 비용이 비싸지 않은 작은 객체에 대한 생성을 피하고자 객체 풀을 만들지는 말자.
일반적으로 자체 객체 풀은 메모리 사용량을 늘리고 성능을 떨어뜨린다.
작은 객체를 다루는 부분은 JVM 가비지 컬렉터가 더 빠르다.
2. 방어적 복사(defensive copy) 가 필요한 상황에서는 재사용하지 말자.
방어적 복사가 필요한 상황에서 객체를 재사용했을 때, 필요없는 객체를 반복 생성했을 때의 피해보다 훨씬 크다.
반응형
'프로그래밍 언어 > Java' 카테고리의 다른 글
이펙티브 자바 - 아이템 8. finalizer와 cleaner 사용을 피하라 (0) | 2024.09.04 |
---|---|
이펙티브 자바 - 아이템 7. 다 쓴 객체 참조를 해제하라 (0) | 2024.09.04 |
이펙티브 자바 - 아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2024.08.20 |
이펙티브 자바 - 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2024.08.17 |
이펙티브 자바 - 아이템3. private 생성자나 열거 타입으로 싱글턴임을 보증하라. (2) | 2024.08.14 |