Skip to content

Commit 364a51b

Browse files
committed
Update memory-area.md
1 parent 4369267 commit 364a51b

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

docs/java/jvm/memory-area.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ String str3 = new String("abcd");
438438
**字符串常量池比较特殊,它的主要使用方法有两种:**
439439
440440
1. 直接使用双引号声明出来的 `String` 对象会直接存储在常量池中。
441-
2. 如果不是用双引号声明的 `String` 对象,使用 `String` 提供的 `intern()` 方法也有同样的效果。`String.intern()` 是一个 Native 方法,它的作用是:如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用;如果没有,JDK1.7 之前(不包含 1.7)的处理方式是在常量池中创建与此 `String` 内容相同的字符串,并返回常量池中创建的字符串的引用,JDK1.7 以及之后,字符串常量池被从方法区拿到了堆中,jvm 不会在常量池中创建该对象,而是将堆中这个对象的引用直接放到常量池中,减少不必要的内存开销。
441+
2. 如果不是用双引号声明的 `String` 对象,使用 `String` 提供的 `intern()` 方法也有同样的效果。`String.intern()` 是一个 Native 方法,它的作用是:如果字符串常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用;如果没有,JDK1.7 之前(不包含 1.7)的处理方式是在常量池中创建与此 `String` 内容相同的字符串,并返回常量池中创建的字符串的引用,JDK1.7 以及之后,字符串常量池被从方法区拿到了堆中,jvm 不会在常量池中创建该对象,而是将堆中这个对象的引用直接放到常量池中,减少不必要的内存开销。
442442
443443
示例代码如下(JDK 1.8) :
444444

0 commit comments

Comments
 (0)