JAVA에서는 스택과 힙 공간이 JVM의 일부입니다. 스택 공간에는 수명이 짧은 특정 값이 포함되고 힙 공간에는 JAVA 객체 및 JRE 클래스가 포함됩니다.
문자열은 힙 영역에 저장됩니다.
String은 클래스이고 JAVA의 문자열은 객체로 취급되므로 String 클래스의 객체는 힙에 저장됩니다.
문자열을 만드는 방법은 2가지가 있습니다.
- 문자열 리터널
- new 키워드를 사용
문자열 리터널은 "를 이용한 방법입니다.
String s = "hello wolrd"
JVM은 문자열 상수풀을 확인합니다. 문자열이 없으면 새 문자열 인스턴스가 생성되고 풀에 배치됩니다. 동일한 문자열이 있으면 새 개체를 생성하지 않고 동일한 인스턴스에 대한 참조를 반환합니다.
이러한 문자열 인스턴스를 저장하는 캐시를 문자열 상수풀이라고 합니다.
JDK 6까지는 문자열 풀이 PermGen 공간 내에 있었지만 JDK 7 이후부터 힙 영역으로 이동되었습니다.
new를 이용한 객체 생성은 새로운 참조가 생성됩니다.
문자열 풀이 PermGen에서 힙 영역으로 이동한 이유
PermGen 공간은 64MB에 불과합니다. 그리고 PermGen 공간에 문자열 객체를 너무 많이 생성하고 저장하는 문제가 있었습니다. 그래서 문자열 풀이 더 큰 힙 영역으로 이동되었습니다. JAVA에서는 메모리 효율성을 높이기 위해 문자열 리터널 개념이 사용됩니다.
'알고리즘 > 자료구조' 카테고리의 다른 글
단일 연결 리스트(Singly Linked List) 특징, 장단점, 생성, 탐색 (0) | 2024.04.19 |
---|---|
Linked List 무엇인가(연결 리스트와 배열의 차이) (0) | 2024.04.19 |
문자열 문자 출력하는 JAVA에서 8가지 방법 (0) | 2024.04.19 |
문자열 연산하기(삽입, 수정, 삭제, 비교) (0) | 2024.04.19 |
문자열이란 무엇인가? (0) | 2024.04.09 |