[Why]
- 객체의 생성 비용이 비싸기 때문에.
[When]
- 객체의 생성 비용이 어플리케이션의 성능에 큰 영향을 미칠 때
- 객체 재사용의 이득이 객체 재생산의 이점(유지보수성, jvm 최적화된 객체 생성 시간)보다 큰 경우
[How]
- 객체 풀에 객체를 등록하고 사용할 때 객체 풀에 객체를 꺼내서 사용한다.
[Example]
- Pattern
Pattern 객체 생성 비용이 크기 때문에 이점이 있다.
- before
static boolean isRomanNumeral(String s){
return s.matches("^(?=.)M*(C[MD]|D?C{0,3}" + "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
}
after
public class RomanNumerals{ private static final Pattern ROMAN = Pattern.compile("^(?=.)M*(C[MD]|D?C{0,3}" + "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$"); static boolean isRomanNumeral(String s){ return ROMAN.matcher(s).matches(); } }
- Wrapper class
오토박싱으로 인해서 Long 객체가 불필요하게 재생산되어 성능이 저하된 경우
- before
private static long sum(){ Long sum = 0L; for (long i = 0; i <= Integer.MAX_VALUE; i++){ sum += 1; } return sum; }
- after
private static long sum(){ long sum = 0L; for (long i = 0; i <= Integer.MAX_VALUE; i++){ sum += 1; } return sum; }
'programming > java' 카테고리의 다른 글
Item 8. finalizer와 cleaner의 사용을 피하라 (0) | 2023.03.24 |
---|---|
Item7. 다 쓴 객체 참조를 해제하라 (0) | 2023.03.24 |
Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2023.03.23 |
Item4. 인스턴스화를 막으려거든 pricate 생성자를 사용하라 (0) | 2023.03.23 |
Item 55. 옵셔널 반환은 신중히 하라 (0) | 2023.03.17 |