강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

swdevelop23님의 프로필 이미지
swdevelop23

작성한 질문수

김영한의 실전 자바 - 중급 1편

섹션 4 퀴즈

스트링 풀, new String()

작성

·

34

0

강의에서는 스트링풀이 힙에 있다고 했는데 스프링 풀은 메타영역으로 메소드 영역에 있고 리터럴에 생성되는 경우에 중복되지 않게 값이 있는지 찾아보고 참조값을 동일하게 가져가고

new String("hello")  이렇게 선언될때만 힙에 새롭게 저장되는거 아닌가요?

 

스트링풀이 힙에 있다고해서 헷갈리기 시작해서 질문드립니다. (Java 7 기준 설명이라서 그런걸까요?)

 

감사합니다.

 

 

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

답변 3

0

swdevelop23님의 프로필 이미지
swdevelop23
질문자

이해했습니다. 감사합니다.

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

이거 보고 조금더 명확해진거 같습니다. 혹시 나중에 찾으시는 분이 계실까해서 남겨봅니다.

0

swdevelop23님의 프로필 이미지
swdevelop23
질문자

챗지피티를 돌려봤는데 이렇게 나와요.. 그래서 더 헷갈리는거 같습니다. 확인부탁드립니다. 교재에 힙은 아닌거 같아서요.

감사합니다.

메타영역(Metaspace)이란?

Java 8부터 도입된 영역으로, JVM이 클래스 정보를 저장하는 공간이야.

🔸 이전 (Java 7 이하)

  • 클래스 메타데이터는 메서드 영역(Method Area)에 저장됨

  • 이 영역은 JVM 힙(Heap)에 있었고, 크기가 고정돼 있었음 → OutOfMemoryError 자주 발생

🔸 이후 (Java 8 이상)

  • 클래스 메타데이터는 Metaspace라는 새로운 영역에 저장됨

  • 이 영역은 JVM 힙 밖에 있음 → JVM의 native memory (OS 메모리)를 사용함

  • 기본적으로 크기 제한 없음, 설정 가능


📌 어떤 정보가 메타영역에 들어가?

  • 클래스 이름, 상속 관계, 메서드 목록, 필드 정보 등

  • 즉, 클래스 자체의 구조 정보 (.class 파일에서 파싱한 메타데이터)

0

안녕하세요, 인프런 AI 인턴입니다.

swdevelop23님께서 질문해주신 내용은 Java의 메모리 관리, 특히 String Pool과 관련한 사항입니다. Java에서의 String Pool은 힙 메모리 영역에 속하며, 리터럴로 선언된 문자열이 중복되지 않도록 관리됩니다.

  1. String Pool의 위치: String Pool은 힙 영역에 위치하고 있으며, 여기에 저장된 문자열 리터럴은 중복되지 않게 관리됩니다. 리터럴로 선언된 문자열은 이미 String Pool에 존재하는 경우 기존 인스턴스를 참조합니다.

  2. new String()의 경우: new String("hello")를 사용하면 항상 새로운 String 객체가 힙에 생성됩니다. 이는 String Pool을 사용하지 않고, 힙 메모리에서 별도의 메모리 공간을 할당받게 되며, String Pool에 있는 것과는 다른 객체가 됩니다.

  3. 메서드 영역과 메타스페이스: Java 7부터 String Pool은 메타스페이스가 아니라 힙에 위치하게 되었습니다. 이전에는 PermGen(메서드 영역에 속함)에 있었다가, Java 7 이후 메모리 관리 효율성 등의 이유로 이 변경이 이루어졌습니다.

궁금해하신 Java 7 기준으로의 설명은 맞습니다. Java 버전에 따라 관리 방식이 조금씩 달라질 수 있으니, 특정 버전의 특성을 참고하여 학습하는 것이 좋습니다.

더 자세한 내용은 유사한 전문가의 답변을 참고하시길 추천드립니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

swdevelop23님의 프로필 이미지
swdevelop23

작성한 질문수

질문하기