카테고리 없음
| 불필요한 객체 생성을 피하라.
cozynow
2020. 7. 27. 22:34
1. 인스턴스를 사용하는 객체와 그렇지 않은 객체 생성방법 차이
//#1
String s = new String("Hello, World");
//#2
String s = "Hello, World"
1번 코드와 2번 코드의 역할은 같지만, 성능상의 차이는 존재한다.
String 은 immutable 객체 즉, 한번 선언되면 변할 수 없다.
이때, 1번 코드로 for 문을 여러번 돌리면 인스턴스가 그 수만큼 발생한다.
그러나 2번의 코드는 해당 인스턴스 값을 그대로 사용한다.
2. 때로는 값비싼 객체를 재사용해 선능을 개선할 수 있다.
//#1
static boolean isRomanNumber(String s){
return s.matches("^(?=.)M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]V?I{0,3})$");
//#2
public class RomanNumber{
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 isRomanNumber(String s){
return ROMAN.matcher(s).matches();
}
}
3. 의도하지 않은 Auto boxing 성능저하 발생
private static long sum(){
Long sum = 0L;
for(long i = 0 ; i <= Integer.MAX_VALUE ; i++)
sum += i;
return sum;
}
Long 과 long 객체의 사용 혼용으로 의도치 않은 오토박싱이 숨어져 있어 성능저하가 발생한다.
long i가 sum 에 더해질때마다, 오토박싱이 발생한다.
from 도서 이펙티브 자바, Item 6