7fed8274b58b6af223ed85e74e847170515d97d1d7235f089b2c9552e4a39f849d05

자바 원서 읽으면서 내용정리한다

오픈소스 정신


자바는 기본타입과 참조타입이 있음

기본타입은 int long boolean 처럼 메모리 스택영역에 저장되고

참조타입은 힙메모리에 주소로 저장됨


참조타입이 중요하니 이거 위주로 설명함

String도 참조타입인데 중요한 특징이 있음

바로 리터럴인데 String s1 = "Hello"; 따옴표로 묶인걸 말하는거임

리터럴 정의 시 SCP(String constant pool) 이라는 특별한 힙메모리 영역에 생성됨

만약 같은 리터럴이면 캐싱해서 사용함
예를들어 String s2 = "Hello"라고 scp에 또 생성하지 않고 기존껄 그대로 사용한다는거임

이 뜻은? thread-safe 하다는 뜻

그래서 굳이 synchronized 쓸 필요없음 멀티쓰레드에 안전하니까

여튼 캐싱장점이 있지만 단점은 반대로 생성비용이 있음

s1이 만약 hell로 바뀌면 scp뒤져서 없으면 또 만들어짐 뭐 이건 당연한거긴 함

new String("hello")랑 비교해볼 수 있는데 이건 scp가 아니라 같은게 있어도 노말 힙 메모리에 또 생성됨

당연히 주소가 다르겠지?? 그래서 캐싱효과는 얻질못함


equals hash 메서드와 immutable 특징도 중요한데
이건 나중에 씀 ㅅㄱ

이상임.