티스토리 뷰

개발

java string pool에 대해서

달리는개발자 2019. 3. 19. 23:13

java에서 가장 많이 사용되는 클래스는 String 객체이다.

JVM이 우리가 "Hello"라고 정의하는 String literal을 String Pool을 이용해서 효율적으로 메모리에 저장한다.

우리가 문자열 변수를 만들면 JVM이 pool에서 찾고 있으면 해당 메모리 주소 참조를 반환하고 없으면 pool에 추가하고 그것의 참조를 반환한다.



String은 불변객체이고 new 연산자를 이용하면 항상 객체를 생성한다. String literal로 만들면 String Pool을 이용할 수 있다.

java6에서는 PermGen 영역에 있어서 런타임 시 늘릴 수 없고 가비지 컬렉터 대상이 아니었다.

java7부터 Heap 메모리에 저장되어 OOME(OutOfMemoryError) 등의 위험이 감소하였다.

java8까지 String은 UTF-16(2byte)로 저장되었으나 java9부터 Compact String이 제공된다.

ISO-8859-1/Latin-1은 1byte, 그외는 기존과 같이 UTF-16으로 저장된다.



참고

https://www.baeldung.com/java-string-pool

https://www.baeldung.com/java-9-compact-string

http://java-performance.info/string-intern-in-java-6-7-8/

https://blog.codecentric.de/en/2014/08/string-deduplication-new-feature-java-8-update-20-2/

https://openjdk.java.net/jeps/254



반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함