最近在看jvm,发现了好多常量池,搞不清区别,查看了好多篇博客,简单总结一下。
Class常量池
我们写的每一个Java类被编译后,就会形成一份class文件;class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项信息就是常量池(constant pool table),用于存放编译器生成的各种字面量(Literal)和符号引用。
常量池
常量池是Class常量池中的一部分,可以看作是一张表、虚拟机指令根据这张表找到吆执行的类名、方法名、参数类型、字面量等类型。
运行时常量池
Class常量池加载到类中就是运行时常量池,所以运行时常量池是每个类一份。
字符串常量池
在HotSpot VM里实现的string pool功能的是一个StringTable类,它是一个Hash表,默认值大小长度是1009;这个StringTable在每个HotSpot VM的实例只有一份,被所有的类共享。字符串常量由一个一个字符组成,放在了StringTable上