본문 바로가기
Programing Language/JAVA

Memory Pool, Garbage Collection, 문자열 풀(String Pool)

by doriver 2024. 2. 4.

메모리 풀( Memory Pool )

프로그램이 동적으로 할당한 메모리를 관리하는 데 사용되는 메모리 영역
+ 그 영역에서 이뤄지는 할당과 해제, 메모리 관리와 관련된 조작들을 포함하는 개념

동적으로 할당된 메모리 관리에 대한 최적화와 관련이 있습니다.

동일한 크기의 메모리 블록들을 관리하고, 이 블록들을 할당하고 해제하는 역할을 수행

 

ex) Java에서의 가비지 컬렉션(Garbage Collection) 과  문자열 풀(String Pool)

 

가비지 컬렉션( Garbage Collection )

더 이상 참조되지 않는 객체를 판단하고 메모리에서 제거( 해당 객체가 차지하던 메모리 공간이 다른 용도로 재사용 가능한 상태로 전환 )하는 프로세스

주로 힙 메모리(Heap Memory)에 할당된 객체들을 관리
( 힙 메모리는 동적으로 생성된 객체들이 저장되는 영역 )

JVM( Java Virtual Machine )이 가비지 컬렉션을 수행, 주기적으로 실행되거나 메모리 부족 시에 실행됨

Java에서는 여러 가지 가비지 컬렉션 알고리즘이 존재하며, JVM 구현에 따라 다르게 동작할 수 있다.

 

(장점)
메모리 누수를 방지
프로그래머가 명시적으로 메모리를 해제할 필요 없이 자동으로 불필요한 객체를 처리
프로그램의 안정성과 성능을 유지

 

문자열 풀( String Pool )

동일한 문자열 값의 중복을 방지하여 메모리를 효율적으로 관리하기 위해 사용되는 별도의 저장 공간

 

Java에서 문자열 리터럴은 최초 사용 시에 문자열 풀에 인스턴스로 저장되고
, 이후에는 동일한 문자열 리터럴이 필요한 경우에는 이미 생성된 인스턴스를 참조합니다.

 

String str = "abc";

문자열 풀 속에 있는 문자열 인스턴스 

 

여러 곳에서 "abc" 문자열을 사용한다면, 이 문자열은 문자열 풀에서 한 번만 저장되고, 이후에 "abc"를 참조하는 모든 코드에서는 동일한 문자열 인스턴스를 재사용합니다.

 

String str = new String("abc");

문자열 풀에 들어가지 않음, 문자열 리터럴과는 별개로 관리됨

 

동일한 값의 문자열이 이미 풀에 존재하더라도

, 새로운 문자열 인스턴스가 힙 메모리에 할당된다.

 

문자열 풀이 사용되지 않는다. 문자열 풀의 이점을 누리지 않는다.

"abc"이 문자열 풀에 저장되지 않는다.

 

문자열 리터럴( String Literal )

고정된 문자열 값을 나타내는 표기법
"Hello, World!"와 같이 큰따옴표로 둘러싸인 문자열

'Programing Language > JAVA' 카테고리의 다른 글

java.lang 패키지( import 없이 사용 )  (0) 2024.03.21
JVM 메모리 공간 , 변수와 데이터 , Garbage Collector  (0) 2024.03.14
Gradle  (0) 2023.11.27
클래스와 객체 01  (1) 2023.11.22
Java , JVM  (0) 2023.09.04