기능이 똑같다면 매번 생성하지 말고, 이미 만들어진 객체를 재사용하라고 주장한다. 자바에서 객체의 생성과 Garbage Collection 은 언제나 오버헤드가 크기 떄문이다.
new String, Integer, Boolean 등등을 하면 항상 새로운 객체가 만들어진다. valueOf 를 사용하도록 하자.
// bad
String s1 = new String("bikini");
//good
String s2 = String.valueOf("bikini");
String.matches 로 졍규표현식을 반복해서 사용하려하면, Pattern 인스턴스가 매번 새로 만들어지고 버려지게 된다. Pattern 인스턴스튼 static final 로 정의해두고 활용하도록 하자.
// bakd
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})$");
}
// good
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();
}
}
오토박싱: 기본 타입(long) 과 박싱된 기본타입(Long) 을 섞어 쓸 때 자동으로 변환해주는 기술
의도치 않은 오토박싱이 있으면 성능 저하가 된다. 박싱된 기본 타입 보다는 기본 타입을 사용하자.
private static long sum() {
Long sum = 0L; // 불필요한 오토박싱
for (long i = 0; i <= Integer.MAX_VALUE; i++)
sum += i;
return sum;
}