자바 원서 읽으면서 내용정리한다
오픈소스 정신
자바는 기본타입과 참조타입이 있음
기본타입은 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 특징도 중요한데
이건 나중에 씀 ㅅㄱ
이상임.
설명 ㅈ같음 애매하게 말하고 오히려 질문공격당할듯
캐싱하면 좀 느려지는거 아님? 한번 싹 뒤져봐야 하잖아 같은거 있나 없나 - dc App
scp은 노말힙보다 작기 때문에 조사한뒤 같은게 있으면 변수에 포인터를 가리킴 얼마나 빠른지는 모름