美文网首页
字符串,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.避免了频繁的创建和销毁常量对系统带的来性能影响,

    相关文章

      网友评论

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

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