From d011ff616199f601050ed6c61d8f1ee354f69ddf Mon Sep 17 00:00:00 2001 From: qksuki <105899310+qksuki@users.noreply.github.com> Date: Mon, 16 Sep 2024 01:01:20 +0800 Subject: [PATCH] Update memory-area.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 同步修改字符串常量池的描述 --- docs/java/jvm/memory-area.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/java/jvm/memory-area.md b/docs/java/jvm/memory-area.md index 1d283e9e..180b1672 100644 --- a/docs/java/jvm/memory-area.md +++ b/docs/java/jvm/memory-area.md @@ -242,12 +242,12 @@ Class 文件中除了有类的版本、字段、方法、接口等描述信息 **字符串常量池** 是 JVM 为了提升性能和减少内存消耗针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建。 ```java -// 在堆中创建字符串对象”ab“ -// 将字符串对象”ab“的引用保存在字符串常量池中 +// 在字符串常量池中创建字符串对象 ”ab“ +// 将字符串对象 ”ab“ 的引用返回给引用 aa String aa = "ab"; -// 直接返回字符串常量池中字符串对象”ab“的引用 +// 直接返回字符串常量池中字符串对象 ”ab“,赋值给引用 bb String bb = "ab"; -System.out.println(aa==bb);// true +System.out.println(aa==bb); // true ``` HotSpot 虚拟机中字符串常量池的实现是 `src/hotspot/share/classfile/stringTable.cpp` ,`StringTable` 可以简单理解为一个固定大小的`HashTable` ,容量为 `StringTableSize`(可以通过 `-XX:StringTableSize` 参数来设置),保存的是字符串(key)和 字符串对象的引用(value)的映射关系,字符串对象的引用指向堆中的字符串对象。