美文网首页
方法区中的运行时常量池

方法区中的运行时常量池

作者: DOB_8199 | 来源:发表于2022-04-10 13:45 被阅读0次

方法区内部包含了运行时常量池

常量池


就是一张表,虚拟机指令根据这张常量表找到要执行的类名,方法名,参数类型,字面量等信息

运行时常量池


把字节码文件中的常量池信息放入运行时常量池,并把里面的符号地址变为真实地址


字符串常量池StringTable的特性


利用字符串池的机制来避免重复创建字符串对象

字符串变量拼接的原理是 StringBuilder(1.8):String a = "a"; String b = "b"; String c = a + b;

字符串常量拼接的原理是 编译器优化:String c = "a" + "b";

intern

intern方法的作用就是可以主动将字符串常量池中还没有的字符串对象放入尝试将一个字符串放入StringTable中。对于程序中大量存在的字符串,尤其是存在很多重复字符串时,使用intern()可以节省内存空间。

        1.6:将这个字符串对象尝试放入串池中,如果不存在就放入StringTable并返回StringTable中的地址,如果存在的话就直接返回StringTable中的地址。

        1.8:尝试将字符串对象放入StringTable,如果有则并不会放入,如果没有会创建一个这个对象的引用放入StringTable(而不是直接将该字符串放入stringtable中),再把StringTable的这个引用返回。

思考:String str = new String("a") + new String("b"); 一共创建了几个对象?

    对象1: new StringBuilder():凡是变量拼接都会new 一个 StringBuilder

    对象2:new String("a")

    对象3:常量池中的"a":在字节码中为ldc

    对象4:new String("b")

    对象5:常量池中的"b":在字节码中为ldc

    对象6:StringBuilder的toString():new String("ab")。但toString()的调用,在字符串常量池中没有生成"ab"

StringTable 垃圾回收


-XX:+PrintStringTableStatistics 开启打印StringTable的参数

StringTable:类似于HashTable的实现(数组+链表),

每个数组个数称为桶buckets

键值对个数:number of entries

字符串常量个数:number of literals

StringTable 性能调优


1. 调整-XX:StringTableSize=桶个数

2. 考虑将字符串对象是否入池

相关文章

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

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

  • java运行时常量池

    运行时常量池是方法区的一部分,每一个运行时常量池都分配在JVM方法区中,在类和接口被加载到JVM后(这里的加载指:...

  • JVM内存划分

    不同版本JVM内存划分的变化 1.6,使用永久代(PermGen)来实现方法区,运行时常量池在方法区中。1.7,还...

  • 方法区和运行时常量池溢出

    1、运行时常量池是方法区的一部分,方法区用于存放class的相关信息,如类名、访问修饰符、常量池、字段描述、方法描...

  • java虚拟机运行时常量池

    java虚拟机运行时常量池 时间:20180228   运行时常量池是方法区的一部分。Class文件(也就是.ja...

  • java面试jvm总结

    JVM→ JVM 内存结构运行时数据区:堆、栈、方法区、直接内存、运行时常量池、堆存放对象, 方法区他用于存储已被...

  • 什么是JVM 运行时常量池

    一、方法区 - 运行时常量池 常量池,可以看做是一张表,虚拟机指令根据这张常量表找到要执行的类名,方法名,参数类型...

  • JVM(六)内存与圾回收|本地方法接口+字符串常量池

      本文介绍JVM的本地方法接口和字符串常量池。  字符串常量池在前文内存与垃圾回收|运行时数据区(下)中也有提到...

  • Java从入门到入坑(底层篇)

    01:JVM 1:JVM内存结构 class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、 堆...

  • JVM性能调优实战(七) - GC 调优

    0 主要内容 1 内存结构 1.1 运行时数据区 PC 寄存器 JVM 栈 堆 方法区 运行时常量池 本地方法栈

网友评论

      本文标题:方法区中的运行时常量池

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