이펙티브 자바 내용 중 "불필요한 객체 생성을 피하라
"에 관련한 내용을 포스팅하겠습니다.
자바 언어의 경우, 객체를 생성한 후 jvm에서 사용하지 않는 객체를 제거해줍니다. 그렇기 때문에, 저같은 경우 메모리에 대해서 크게 생각하지 않고 코딩을 하는 경우가 있습니다. 그래서 불필요한 객체를 생성하는 경우가 종종 있을 수 있습니다.
그렇다면, 대표적으로 어떤 경우에 불필요한 객체를 생성하게 될까요?
String a = "test";
String b = "test";
(a == b는 true) -> 메모리 상에서 같은 문자열을 사용
String b = new String("test");
String c = new String("test");
(b == c는 false) -> b와 c는 다른 인스턴스이다.
'8436167 ns'
, '10208 ns'
의 시간이 걸리는 것을 확인할 수 있었습니다.public class Test2 {
// 미리 캐싱해서 static 영역에 저장시켜 놓음.
private static final Pattern TEST = Pattern.compile(",|.|\\*|^");
public static void main(String[] args) {
long s = System.nanoTime();
for (int i = 0; i < 1000; i++) {
Pattern.compile(",|.|\\*|^"); //8436167 ns
Pattern a = TEST; //10208 ns
}
long e = System.nanoTime();
System.out.println(e - s);
}
}
public class Adder {
public static void main(String[] args) {
for(long i = 0 ; i < 1000; i++){
Long sum= 0L; //객체가 계속 생성됨.
long a = sum + i;
}
}
}
reference
잘 봤습니다. 좋은 글 감사합니다.