Java에서 String Pool의 개념은 무엇입니까?



Java의 문자열 풀은 Java 힙 메모리에 저장된 문자열 풀입니다. 이 튜토리얼은 예제를 통해 Java String Pool에 대한 자세한 접근 방식을 안내합니다.

용어에 대해 들어 보셨습니까? '자바의 문자열 풀?' 그렇지 않다면 올바른 장소에 착륙 한 것입니다. Java의 String Pool은 다음에 저장되는 문자열 풀입니다. 힙 메모리. 좀 더 깊이 파고 들어이 Java String 풀의 개념을 자세히 이해하겠습니다.

이 기사에서는 다음 사항에 대해 설명합니다.





의 시작하자!

PHP에서 배열을 표시하는 방법

먼저 문자열 객체가 어떻게 생성되는지 이해합시다!



문자열을 만드는 방법?

Java에서 String 객체를 생성하려면 두 가지 방법이 있습니다.

  • 새 연산자를 사용합니다. 예를 들면
문자열 s1 = new String ( 'Joey')
  • 문자열 리터럴 또는 상수 표현식 사용. 예를 들면
문자열 s1 = 'Joey'(문자열 리터럴) 또는 문자열 s1 = 'Joe'+ 'y'(문자열 상수 표현식)

자, 제가 말하고있는이 문자열 풀은 무엇이며 이것과 관련된 Java에서 문자열을 생성하는 방법은 무엇입니까? 혼란을 줄 이겠습니다!

Java의 String Pool이란 무엇입니까?

String Pool은 Java 힙의 저장 영역입니다.



모두와 마찬가지로 문자열 할당 개체 할당 , 시간과 기억의 경우 모두 비용이 많이 드는 일임이 입증되었습니다. JVM은 성능을 높이고 메모리 오버 헤드를 줄이기 위해 문자열 리터럴을 초기화하는 동안 몇 가지 단계를 수행합니다. JVM에서 생성되는 String 개체의 수를 줄이기 위해 String 클래스는 문자열 풀을 유지합니다.

문자열 리터럴이 생성 될 때마다 JVM 먼저 문자열 리터럴 풀을 확인합니다. 문자열이 문자열 풀에 이미있는 경우 풀링 된 인스턴스에 대한 참조가 반환됩니다. 문자열이 풀에 없으면 새 String 개체가 초기화되고 풀에 배치됩니다.

이론적으로 개념을 학습 한 후 간단한 인스턴스의 도움으로 Java에서 문자열 풀이 어떻게 작동하는지 단계별로 설명하겠습니다!

Java에서 문자열 풀은 어떻게 작동합니까?

다음과 같은 새 문자열을 만들 때 :

문자열 s1 = 'Rachel'

JVM은 문자열 상수 풀에 동일한 값이 있는지 자동으로 확인합니다.

  • 그렇다면 이미 존재하는 값을 차지합니다.
  • 그렇지 않은 경우 자체적으로 새 문자열을 만들어 문자열 풀에 추가합니다.

이 동작을 중지하려면 new 연산자를 사용하여 문자열을 만듭니다.

String s1 = new String ( 'Rachel')

이제이 문자열을 , Java는 다음과 같이 네이티브 intern () 메서드를 호출 할 수있는 intern () 메서드라는 메서드를 제공합니다.

S1.intern ()

이제 예제를 통해 문자열 풀의 구현과 작동을 보여 드리겠습니다.

그러나 그 전에, 짧은 알림!

== 연산자를 사용하여 두 개체를 비교하는 경우 아시다시피 메모리의 주소를 비교합니다.

따라서 ==를 사용하여 문자열을 비교하여 동일한 객체인지 완전히 확인합니다.

이제 구현 프로세스를 살펴 보겠습니다.

자바의 문자열 풀 : 흐름도

String-pool-Edureka

이제 여기에서 일어나는 일을 단계별로 파악하겠습니다.

  • 클래스는 다음과 같은 경우에로드됩니다. 호출됩니다.
  • JVM은 프로그램에서 모든 문자열 리터럴을 찾습니다.
  • 먼저 리터럴“Apple”을 가리키는 변수 s1을 찾아 메모리에 생성됩니다.
  • 그런 다음 리터럴 'Apple'에 대한 참조가 문자열 상수 풀 메모리에 배치됩니다.
  • 그런 다음 동일한 문자열 리터럴 'Mango'를 참조하는 다른 변수 s2를 찾습니다.
  • 그런 다음 문자“Apple”을 참조하는 다른 변수 s3를 찾습니다.
  • JVM이 이미 문자열 리터럴 'Apple'을 찾았으므로 변수 s1과 s3은 모두 동일한 객체 즉, 'Apple'을 참조합니다.

String Pool 용 Java 프로그램

public class StringPoolExperiment {public static void main (String [] args) {String s1 = 'Rachel'String s2 = 'Rachel'String s3 = new String ( 'Rachel') String s4 = new String ( 'Rachel'). intern ( ) System.out.println (s1 == s2) // true System.out.println (s1 == s3) // false System.out.println (s1 == s4) // true}}

산출:

진실
그릇된
진실

위의 예에서 세 가지 방법으로 문자열 초기화 사용을 명확하게 볼 수 있습니다.

문자열 s1 = 'Rachel'문자열 s2 = 'Rachel'문자열 s3 = new String ( 'Rachel') 문자열 s4 = new String ( 'Rachel'). intern ()

프로그램의 내부 작업은 이제 명확해야합니다.

이것으로 나는 내 블로그의 끝에 도달했습니다. 여기에 설명 된 내용이 지식 기반을 넓히는 데 도움이 되었기를 바랍니다. 우리는 Java 세계로 계속 뛰어들 것입니다. 계속 지켜봐주세요!

확인 전 세계에 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Java 개발자가 되고자하는 학생과 전문가를 위해 설계되었습니다. 이 과정은 Java 프로그래밍을 시작하고 Hibernate 및 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념에 대해 교육하도록 설계되었습니다. .

질문이 있으십니까? 이 '자바의 문자열 풀'블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 연락 드리겠습니다.