美文网首页
JVM-常量池

JVM-常量池

作者: 沐兮_d64c | 来源:发表于2018-07-17 11:30 被阅读0次

1,(全局)字符串常量池(String Constant Pool)

1)使用sun.jvm.hotspot.memory.StringTable类实现,extends Hashtable,使用线程安全的哈希表,在每个HotSpot VM实例中只有一份,被所有类共享
2)JDK1.6以及之前:字符串常量池放在方法区中,StringTable固定1009个,当字符串比较多的时候,会hash冲突,导致链表过长。
3)JDK1.7:字符串常量池移至堆中。StringTable长度可以不固定,使用JVM参数-XX:StringTableSize=66666设置。
3)存放比较:JDK1.6中存放的都是字符串常量,JDK1.7中可以存放(位于堆中字符串对象的)引用,如使用String.intern()方法。

2,静态(class)常量池(Class Constant Pool)

1)每个class文件都有一个常量池。.class文件的类信息、字面量(字符串、整型值、final修饰的常量)、方法信息。

image.png
2)字面量Literal:文本字符串、8种基本类型的值、final常量
3)符号引用:类和方法的全限定名、字段名和描述符、方法名和描述符

3,运行时常量池(Runtime Constant Pool)

1)位于内存中,也就是class常量池被加载到内存中的版本。特点:字面量可以动态添加,比如String.intern(),符号引用可以解析成直接引用。
2)当Class加载到内存中,就会将class常量池中的内容放到运行时常量池中。每个类都有一个,在解析阶段,把符号引用替换为直接引用。直接引用也会放入常量池,避免下次再次解析。
3)解析过程中,当遇到字符串的符号引用,则回去查询常量池StringTable,以保证Runtime Constant Pool中的字符串与String Constant Pool中是一致的。

相关文章

  • JVM-常量池

    JVM-常量池 JVM常量池分为 Class文件常量池 运行时常量池 全局字符串常量池 基本类型包装类对象常量池 ...

  • JVM-常量池

    1,(全局)字符串常量池(String Constant Pool) 1)使用sun.jvm.hotspot.me...

  • 字符串常量池

    静态常量池,运行期常量池,字符串常量池 静态常量池 运行时常量池 字符串常量池 问题 结果: 验证new Stri...

  • java__常量池

    java的常量池分为两种型态:静态常量池和运行常量池 静态常量池: 即class文件中的常量池,这种常量池主要用于...

  • 细说Java常量池

      Java中的常量池有:class常量池、运行时常量池、String常量池。 为什么要使用常量池?   避免频繁...

  • Java 内存—常量池

    Java中的常量池分为两种型态: 静态常量池 运行时常量池 静态常量池 所谓静态常量池是指class文件中的常量池...

  • 你对常量池够了解吗

    在 java 中,常量池分为以下三种: class 常量池 字符串常量池 运行时常量池 一、class 常量池 1...

  • 彻底弄懂java中的常量池

    JVM有几种常量池 主要分为: Class文件常量池、运行时常量池,全局字符串常量池,以及基本类型包装类对象常量池...

  • 常量池

    Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。 静态常量池 : *.class文件中的常量池,...

  • JVM(六)JVM常量池

    1.常量池类型 Java中的常量池分为三种: 类文件常量池(静态常量池)(The Constant Pool)运行...

网友评论

      本文标题:JVM-常量池

      本文链接:https://www.haomeiwen.com/subject/pvswpftx.html