常量池

JVM常量池及字符串==比较分析

烂漫一生 提交于 2019-12-14 19:59:55
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Java常量池技术 java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,不同于使用new关键字创建的对象所在的堆空间。 String类也是java中用得多的类,同样为了创建String对象的方便,也实现了常量池的技术。 在本文描述常量池之前,先来了解一下JVM运行时数据区的内存模型。《深入JAVA虚拟机》书中是这样描述的:JVM运行时数据区的内存模型由五部分组成: 【1】方法区 【2】堆 【3】JAVA栈 【4】PC寄存器 【5】本地方法栈 对于String s = "haha" ,它的虚拟机指令: 0: ldc #16; //String haha 2: astore_1 3: return 对于上面虚拟机指令,其各自的指令流程在《深入JAVA虚拟机》这样描述到(结合上面实例): ldc指令格式:ldc,index ldc指令过程:要执行ldc指令,JVM首先查找index所指定的常量池入口,在index指向的常量池入口,JVM将会查找CONSTANT_Integer_info,CONSTANT_Float_info和CONSTANT_String_info入口