美文网首页
javaJVM_虚拟机_常量池

javaJVM_虚拟机_常量池

作者: Shokka | 来源:发表于2018-09-13 10:39 被阅读0次

https://blog.csdn.net/wangbiao007/article/details/78545189
java虚拟机为每个类都维护着一个常量池。

java内存区域的方法区中,存放着类信息,而类信息已class文件的形式存在。
class文件记录着类的版本,字段,方法,接口和常量池。常量池里存储着字面量和符号引用。
符号引用包括:1.类的全限定名,2.字段名和属性,3.方法名和属性。

疑问:

1.方法区里存class文件信息和class文件常量池是个什么关系
2.class文件常量池和运行时常量池是什么关系

以上链接提供解答:

静态常量池和动态常量池的关系以及区别

静态常量池存储的是当class文件被java虚拟机加载进来后存放在方法区的一些字面量和符号引用,字面量包括字符串,基本类型的常量,符号引用其实引用的就是常量池里面的字符串,但符号引用不是直接存储字符串,而是存储字符串在常量池里的索引。

动态常量池是当class文件被加载完成后,java虚拟机会将静态常量池里的内容转移到动态常量池里,在静态常量池的符号引用有一部分是会被转变为直接引用的,比如说类的静态方法或私有方法,实例构造方法,父类方法,这是因为这些方法不能被重写其他版本,所以能在加载的时候就可以将符号引用转变为直接引用,而其他的一些方法是在这个方法被第一次调用的时候才会将符号引用转变为直接引用的。

总结:

方法区里存储着class文件的信息和动态常量池,class文件的信息包括类信息和静态常量池。可以将类的信息是对class文件内容的一个框架,里面具体的内容通过常量池来存储。

动态常量池里的内容除了是静态常量池里的内容外,还将静态常量池里的符号引用转变为直接引用,而且动态常量池里的内容是能动态添加的。例如调用String的intern方法就能将string的值添加到String常量池中,这里String常量池是包含在动态常量池里的,但在jdk1.8后,将String常量池放到了堆中。

相关文章

  • javaJVM_虚拟机_常量池

    https://blog.csdn.net/wangbiao007/article/details/7854518...

  • 什么是JVM 运行时常量池

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

  • 方法区中的运行时常量池

    方法区内部包含了运行时常量池 常量池 就是一张表,虚拟机指令根据这张常量表找到要执行的类名,方法名,参数类型,字面...

  • Java基础(6)—Java虚拟机 JVM

    JAVA基础知识学习 JAVA虚拟机 基础知识:方法区(运行时常量池):用于存放已被虚拟机加载的类信息、常量、静态...

  • java虚拟机运行时常量池

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

  • 字符串常量池

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

  • java__常量池

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

  • JVM-常量池

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

  • 细说Java常量池

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

  • Java 内存—常量池

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

网友评论

      本文标题:javaJVM_虚拟机_常量池

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