Java

[Java] String Pool

9taetae9 2025. 4. 9. 14:35
728x90

Java์˜ String Pool์€ JVM์ด ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๋ฌธ์ž์—ด ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋ณธ ๊ฐœ๋…

String Pool(๋˜๋Š” String Constant Pool, String Intern Pool)์€ JVM์˜ ํž™ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์กด์žฌํ•˜๋Š” ํŠน๋ณ„ํ•œ ๊ณต๊ฐ„์œผ๋กœ, ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ด ์ €์žฅ๋œ๋‹ค. String Pool์€ ๋ฌธ์ž์—ด์˜ ๋ถˆ๋ณ€์„ฑ(immutability)๊ณผ String interning์ด๋ผ๋Š” ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

2. ๋ฌธ์ž์—ด ์ƒ์„ฑ ๋ฐฉ์‹๊ณผ String Pool

1. ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ์ƒ์„ฑ

String s1 = "hello";
String s2 = "hello";

 

  • JVM์€ str1์„ ์ƒ์„ฑํ•  ๋•Œ "hello"๋ผ๋Š” ๋ฆฌํ„ฐ๋Ÿด์ด String Pool์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ๋งŒ์•ฝ ์กด์žฌํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  String Pool์— ์ €์žฅํ•œ ํ›„ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ "hello"๋ฅผ ๋งŒ๋‚  ๋•Œ๋Š” Pool์—์„œ ๊ธฐ์กด ๋ฌธ์ž์—ด์„ ์ฐพ์•„ ์ฐธ์กฐ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ s1 == s2๋Š” true๊ฐ€ ๋œ๋‹ค. (๊ฐ™์€ ๊ฐ์ฒด ์ฐธ์กฐ)

2. new ํ‚ค์›Œ๋“œ ๋ฐฉ์‹

String s3 = new String("hello");

 

  • new ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ์‹œ ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒˆ ๋ฌธ์ž์—ด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • ์ด ๊ฒฝ์šฐ ๋™์ผํ•œ ๊ฐ’์˜ ๋ฌธ์ž์—ด์ด String Pool์— ์กด์žฌํ•˜๋”๋ผ๋„ ์ด๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค.
  • ์ฆ‰, String Pool์˜ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋”ฐ๋ผ์„œ s1 == s3๋Š” false์ด๋‹ค. (๋‹ค๋ฅธ ๊ฐ์ฒด ์ฐธ์กฐ)

3. intern() ๋ฉ”์†Œ๋“œ(String Interning)

String interning์€ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง„ ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜๋งŒ ์œ ์ง€ํ•˜๋„๋ก ํ•˜๋Š” JVM์˜ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด๋‹ค.

String s4 = new String("hello").intern();

 

  • intern()์€ String Pool์—์„œ ๋™์ผํ•œ ๋‚ด์šฉ์˜ ๋ฌธ์ž์—ด์„ ์ฐพ๋Š”๋‹ค.
  • ์žˆ์œผ๋ฉด ํ•ด๋‹น ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์—†์œผ๋ฉด Pool์— ์ถ”๊ฐ€ ํ›„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • s1 == s4๋Š” true๊ฐ€ ๋œ๋‹ค.

JVM์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋Œ€์ƒ์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ String Pool ๋‚ด์˜ ๋ฆฌํ„ฐ๋Ÿด์€ ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค. ๋”ฐ๋ผ์„œ String Pool์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜์ง€๋งŒ, ๊ณผ๋„ํ•œ intern ์‚ฌ์šฉ์€ ์˜คํžˆ๋ ค ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด ์ด๋ฅผ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

 

4. ๋™์ž‘ ๊ณผ์ •

 

  • ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ด ๋“ฑ์žฅํ•˜๋ฉด JVM์€ ๋‚ด๋ถ€์ ์œผ๋กœ String Pool์—์„œ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
  • ๊ฒ€์ƒ‰์—๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์‚ฌ์šฉ๋œ๋‹ค. (๋ฌธ์ž์—ด์˜ ํ•ด์‹œ์ฝ”๋“œ ๊ธฐ๋ฐ˜)
  • ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์—ด์ด ์žˆ์œผ๋ฉด ๊ธฐ์กด ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์—ด์ด ์—†์œผ๋ฉด String Pool์— ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ทธ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

String ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ์‹ ๋ณ€ํ™”

  • Java 7 ์ด์ „: String Pool์€ PermGen ์˜์—ญ(๊ณ ์ • ํฌ๊ธฐ)์— ์žˆ์—ˆ๋‹ค.
  • Java 7 ์ดํ›„: Heap ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜์—ฌ GC ๋Œ€์ƒ์ด ๋˜์—ˆ๋‹ค.
  • Java 9 ์ดํ›„: Compact Strings ๋„์ž…์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์ด ๋”์šฑ ํ–ฅ์ƒ๋˜์—ˆ๋‹ค.

 

 

์ฐธ๊ณ  ์ž๋ฃŒ:

https://en.wikipedia.org/wiki/String_interning

 

String interning - Wikipedia

From Wikipedia, the free encyclopedia Data structure for reusing strings In computer science, string interning is a method of storing only one copy of each distinct string value, which must be immutable.[1] Interning strings makes some string processing ta

en.wikipedia.org

https://www.scaler.com/topics/java/string-pool-in-java/

 

String Pool in Java - Scaler Topics

Learn about String Pool in Java by Scaler Topics. String Pool or String Constant Pool is a special area in Java Heap memory where string literals are stored.

www.scaler.com

 

https://www.digitalocean.com/community/tutorials/what-is-java-string-pool

 

What is Java String Pool? | DigitalOcean

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

www.digitalocean.com

https://www.baeldung.com/java-9-compact-string

 

 

 

728x90