Integer, Long caching
Integer, Long 뿐만 아니라 이 외의 Wrapper Class에 존재하는 기능으로 정해진 범위의 값에 한해서 캐싱되는 기능을 말한다. 여기에서 캐싱이란 값 저장 시 인스턴스를 생성하지 않고 미리 저장 돼있는 값을 사용한다는 뜻으로 특정 범위내의 값 (Integer의 경우 -127 ~ 128)에 대해서는 인스턴스를 생성하지 않음으로써 속도 등 성능 등에 이점을 가진다.
//Integer i = 1;이 동작하는 과정, Cache 클래스는 Wrapper 타입마다 존재한다.
@HotSpotIntrinsicCandidate
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
간단하게 말하면 -127에서 128까지의 값은 일일이 저장돼 (low, high)있고, 이 범위 내의 값에 대해선 인스턴스를 생성하지 않고 저장된 값을 불러와 사용하는 것이다. 그러므로 범위 내 값은 모두 같은 인스턴스이다.
따라서 이 캐싱기능에 주의하여 사용하여야 한다.
예제 코드의 결과에 대해 생각해보자.
예제
Integer a = 1000;
Integer b = 1000;
if(a == b)
System.out.println("a == b");
else
System.out.pintln("a != b");
결과
a != b
GC 종류 알아보기
Garbage Collector 종류
Garbarge Collector는 스레드 방식과 사용 되는 Garbage Collection Algorithm에 따라 종류가 결정 된다.
Serial Garbage Collector
- 가장 원시적 방식의 GC로, 싱글 스레드로 동작
- Young Generation : Generational algorithm/ Old Generation : Mark and Compaction algorithm
- 싱글스레드로 동작하기 때문에 성능이 좋지 않고, 지연시간이 기므로 운영서버에서는 사용 불가하다.
Parallel Garbage Collector
- Java 8의 기본 GC
- Serial GC와 기본적 알고리즘은 동일, 여러개의 스레드로 GC 처리
Parallel Old Garbage Collector
- Parallel GC에서 Old Generation의 알고리즘만 다르다.
- GC를 수행한 영역에 대해 별도로 살아있는 객체를 식별하는 Mark-Summary-Compaction 단계를 거친다. Mark-Sweep-Compaction이 Sweep 단계와는 다르고, 더 복잡하다.
CMS Garbage Collector
- Current Mark-and-Sweep Garbarge Collector
- 사용하고 싶다면 자바 버전을 잘 확인하여 사용 (Revmoved in java 14, Deprecated on java 9)
- 순서
1. Initial mark : 클래스로더에서 가장 가까운 객체 중 살아있는 객체만 찾아 마킹한다.
2. Concurrent mark : 1에서 확인한 객에서 참조하고 있는 객체를 따라가며 마킹한다. (스레드 동시 진행)
3. Remark : 2에서 추가되거나 참조가 끊긴 객체를 확인하여 마킹한다.
4. Concurrent sweep : GC를 실행 (스레드 동시 진행) - 마킹한 객체를 sweep
- 해당 GC는 기존 GC들의 단점인 긴 STW(Stop The Wolrd)을 개선했다는 장점이 있지만, CPU 사용량이 크고 Compaction 단계가 기본적으로 제공되지 않아 단편화 발생을 야기시킨다는 단점이 있다. (Sweep 후 Compaction지 않으면 메모리 공간이 조각남으로써 시간이 지날수록 객체 생성에 문제가 생긴다)
G1 Garbage Collector
Z Garbage Collector
web server vs WAS
부동소수점 오류/대체사용가능한 클래스
generic runtime 타입 정보 날아가는 이유
runtime type eraser
Collection 시간복잡도(list, set, tree)
android jit aot