美文网首页
常量池、运行时常量池、字符串常量池

常量池、运行时常量池、字符串常量池

作者: amenema | 来源:发表于2019-06-12 18:49 被阅读0次

常量池、运行时常量池、字符串常量池

Java里包含各种常量池,经常傻傻分不清楚,下面就简单梳理下Java中的池们。

概念解释

常量池

这里的常量池指的是Class文件常量池。常量池里主要放两类常量:

  1. 字面量 :Java语言中定义的常量,如使用final修饰的值
  2. 符号引用 :表示JVM定义的Java关键字或基本类型与实际结构转换关系

符号引用主要包含以下三种类型:

  1. 类和接口的全限定名(Fully Qualified Name)

  2. 字段的名称和描述符(Descriptor)

  3. 方法的名称和描述符

上面说的常量池在JVM中的结构都是一张表。具体有哪些类型的表可以参考下图

常量池类型表.png

运行时常量池

运行时常量池就是类被JVM加载后在JVM中的版本。有一点儿区别就是常量池只有类文件在编译的时候才会产生,而且是存储在类文件中的。而运行时常量池是在方法区,而且可在JVM运行期间动态向运行时常量池中写入数据。

字符串常量池

字符串常量池是因为Java为String开辟的一块内存缓冲区,为了提高性能同时减少内存开销。在JVM中,字符串常量池由一个hash表实现。默认容量为1009。当字符串常量池中的存储比较多的字符串时,会导致hash冲突,从而每个节点形成长长的链表,导致性能下降。所以在使用字符串常量池时,一定要控制容量。

-XX:StringTableSize

通过这个参数可以指定字符串常量池的容量

不同Jdk中字符串常量池的演化

jdk6及以前字符串常量池中存放的是字符串常量
jdk7字符串常量池中存放的是指定字符串的引用

参考

  • <<深入理解Java虚拟机: JVM高级特性与最佳实践>>

相关文章

  • 字符串常量池

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

  • JVM-常量池

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

  • Java中的常量池

    Java中的常量池分为三类:字符串常量池、class常量池、运行时常量池 字符串常量池 从1.7及其之后,字符串常...

  • 你对常量池够了解吗

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

  • 彻底弄懂java中的常量池

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

  • JVM 各种常量池傻傻分不清?

    总体上有如下四种常量池:class 文件中的常量池、运行时常量池、字符串常量池、符号常量池。 class 文件中的...

  • p4-equals系列:jdk1.6中,JVM字符串常量池在哪里

    在jdk 1.6及以前,字符串常量池是属于运行时常量池的,运行时常量池属于方法区,所以可以说字符串常量池位于方法区...

  • 深入浅出JVM常量池

    常量池在JVM中分为三种:字符串常量池,运行时常量池,Class常量池讨论范围 JDK 1.7版本及以后 字符串常...

  • 细说Java常量池

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

  • 常量池、运行时常量池、字符串常量池

    常量池、运行时常量池、字符串常量池 Java里包含各种常量池,经常傻傻分不清楚,下面就简单梳理下Java中的池们。...

网友评论

      本文标题:常量池、运行时常量池、字符串常量池

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