programming/java
Item 6. 불필요한 객체 생성을 피하라
롯대쌍쌍바
2023. 3. 23. 10:06
[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; }