[EffectiveJava] item 6. 불필요한 객체 생성을 피하라

item 6

불필요한 객체 생성을 피하라

String s = new String("bikini"); // 따라 하지 말 것! 
String s = "bikini";


성능을 훨씬 더 끌어올릴 수 있다!

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})$");
}


값비싼 객체를 재사용해 성능을 개선한다.

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();
    }
}


끔찍이 느리다! 객체가 만들어지는 위치를 찾았는가?

private static long sum(){
    Long sum = 0L;
    for(long i = 0; i <= Integer.MAX_VALUE; i++){
        sum += i;
    }
    
    return sum;
}