《深入理解Java虚拟机》:Java内存区域( 三 )

":(Ljava/lang/String;)V20: aload_221: invokevirtual #33// Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;24: invokevirtual #37// Method java/lang/StringBuilder.toString:()Ljava/lang/String;27: astore429: getstatic#41// Field java/lang/System.out:Ljava/io/PrintStream;32: ldc#20// String ab34: aload436: if_acmpne4339: iconst_140: goto4443: iconst_044: invokevirtual #47// Method java/io/PrintStream.println:(Z)V47: returnLineNumberTable:line 6: 0line 7: 3line 8: 6line 9: 9line 10: 29line 11: 47用一下神奇的String.intern() , 再看看结果
public static void main(String[] args) {String s1 = "a";//行号6String s2 = "b";//行号7String s3 = "ab";//行号8String s4 = s1+s2;//行号9System.out.println("ab"==s4);//行号10String s5 = s4.intern();System.out.println("ab"==s5);}//行号11System.out.println("ab"==s5);就会输出true , 因为s4.intern()方法是主动把字符串放入常量池 , s5现在是指向常量池中的ab 。
6、直接内存:在没有直接内存的情况下 , 磁盘I/O的内容 , 需要先从磁盘读取到系统内存 , 然后再从系统内存读取到Java堆内存;而直接内存是系统内存和Java堆内存的一块共享内存区域 , 避免了在Java堆和Native堆中来回复制数据 , 很大的提高了读写性能 。
《深入理解Java虚拟机》:Java内存区域文章插图
内容来源于《深入理解Java虚拟机》第二章2.2节内容 。
【《深入理解Java虚拟机》:Java内存区域】#程序员##JVM#