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

字符串,class,运行时常量池

作者: 从入门到暴毙 | 来源:发表于2019-04-07 20:53 被阅读0次

字符串常量池

1.Java中两种创建字符串对象的方式的分析

直接用字面量的方式创建一个字符串(String a = "hello"),

这种方式创建的字符串是直接存在字符串常量池中,这种方式会先去字符串常量池中查看"hello"是否存在,

如果存在的话会先去直接返回hello的引用地址给a,

2.通过String的构造方法创建(String a = new String(“hello”))

首先会创建hello对象在堆中,然后在字符串常量池中创建一个对象,该对象指向于hello堆中hello对象,

2.字符串常量池存储的位置

在jdk1.6的时候,字符串常量池是存储在方法区的,然后在jdk1.7的时候,字符串常量池就改为在堆中,

class常量池

java类被编译后,就生成了.class文件,class文件中存在了类的信息,方法。接口。字段等描述,还有一项就是常量池,常量池中存的就是一些字面量(字符串,基本数据类型,final常量),以及符号引用(类路劲,方法和字段的描述符和名称),每一个class文件都有自己的class常量池,

运行时常量池

类加载通过类的全路径找到class文件,然后以二进制流的方式加载class文件,然后经过一系列的验证,连接,解析,初始化等操作解析class文件,在解析的时候class文件中的常量池就会被解析为运行时常量池,运行时常量池其实class常量池被类加载加载后的状态,class常量池中的符号引用,有一些会被解析为直接引用(就是直接引用于对象的位置)

运行时常量池和class常量池的区别就在于其动态性,class常量池又叫做静态常量池,池中的常量是预先设置好的,那么运行时常量池是可以后期动态的向常量池中添加常量,比如String.intern()就是典型的向运行时常量池中添加常量的方法

常量池的好处

1.节省内存空间,同样的字符串在常量中只有一份,并且只会分配一次内存空间

2.避免了频繁的创建和销毁常量对系统带的来性能影响,

相关文章

  • 你对常量池够了解吗

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

  • Java中的常量池

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

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

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

  • JVM-常量池

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

  • 彻底弄懂java中的常量池

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

  • 深入浅出JVM常量池

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

  • java常量池

    概述 java中有几个比较容易混淆的池的概念: 包装类的对象池 字符串常量池 class / 静态常量池 运行时常...

  • 字符串常量池

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

  • 【JAVA基础】常量池、字符串字面量、JAVA编译

    1.常量池的概念 分为两大类:静态常量池和运行时常量池。 class文件静态常量池即class文件中的常量池, 指...

  • 细说Java常量池

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

网友评论

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

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