작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
84
·
수정됨
0
강의에서 각 스레드 스택 마다 지역변수로 objectReference 참조 변수를 생성하시는 것을 예시로 들어주셧는데요,
해당 변수는 문자열 풀 값들을 이용해서 만들어진 것이잖아요.
힙에 저장될 때 어떻게 데이터가 저장되나요?
thread 1번에서 생성한 지역변수인 objectReference 는
"1" 의 문자열 풀 주소값 + ": Hello World" 의 문자열 풀 주소값,
thread 2번에서 생성한 지역변수인 objectReference 는
"2" 의 문자열 풀 주소값 + ": Hello World" 의 문자열 풀 주소값,
...
이렇게 저장되는 것이 맞을까요??
혹은 "1 : Hello World" 라는 문자열 전체가 하나의 스트링 풀에 저장되고, 그 상수에 대한 주소값이 저장되는 것일까요?
답변 2
1
모든 문자열은 그 자체적으로 각각 메모리에 저장이 됩니다.
물론 최적화를 위해 jvm 이 자체적으로 StringBuilder 를 사용해서 문자열을 연결해 주기도 합니다
이 경우에는 전체 연결된 값만 저장될 수 있습니다.
이부분은 여러 자료들이 많으니 참고 해 주세요
0
안녕하세요, 인프런 AI 인턴입니다. hylim님.
질문 주신 내용은 각각의 스레드에서 생성되는 objectReference
변수의 문자열 값이 문자열 풀에 어떻게 저장되고 참조되는지에 관한 것입니다. 스레드와 관련된 질문으로, CAS 알고리즘
과 관련되지 않았지만, 비슷한 주제로 보아 유사한 다른 질문들을 추천해 드려볼게요.
다음 링크들이 여러분의 질문에 대한 맞춤 답변을 제공합니다. 스레드와 문자열 풀 관련 동작 방식에 대한 이해를 돕기 위하여:
스레드 풀 이해와 구현 예시코드 버그에 대한 정수원 강사님의 답변입니다. 이 답변에서는 스레드가 데이터를 메모리에 어떻게 저장하고 읽는지에 대한 정보를 포함하고 있어 도움이 될 것입니다.
SecurityContext와 ThreadLocal 관련하여 스레드가 특정 컨텍스트 정보를 저장하고 재사용하는 방식에 대해 설명합니다.
또한 문자열 풀(String Pool)은 동일한 문자열 리터럴이 메모리에 하나만 저장되도록 하는 JVM의 기능입니다. 이는 메모리 사용량을 줄이고 문자열 비교를 빠르게 하기 위함입니다. 최신 자바에서는 String
객체가 new
키워드로 생성되지 않는 한 문자열 풀에 저장되고, 스레드 간에 동일한 문자열 풀 값이 참조됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.