美文网首页
字符串内存分配

字符串内存分配

作者: 贝克街的猫大哥呀 | 来源:发表于2018-09-11 14:28 被阅读0次

    对于字符串,其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

这里解释一下黄色这3个箭头,对于通过new产生一个字符串(假设为“china”)时,会先去常量池中查找是否已经有了“china”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”china”对象的拷贝对象。

这也就是有道面试题:String s=newString(“xyz”);产生几个对象?一个或两个,如果常量池中原来没有”xyz”,就是两个。

存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的 intern()方法就是扩充常量池的 一个方法;当一个String实例str调用intern()方法时,Java 查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用

相关文章

  • java 基础

    JAVA 字符串 参考资料:一张图让你明白 java string 的 内存分配java 字符串内存分配的分析与总...

  • Redis字符串的性能优势三

    降低空间分配次数提升内存使用效率 字符串的追加操作会涉及到内存分配问题,然而内存分配问题会牵扯内存划分算法以及系统...

  • 字符串不可变

    String赋值不能被改变: 字符串内存分配:

  • redis设计与实战笔记

    数据结构 动态字符串定义:优点: 杜绝内存溢出 减少内存分配次数空间预分配和惰性空间释放。 链表定义: 字典定义:...

  • 简单动态字符串

    定义 内存布局 优势 常数复杂度获取字符串长度 内存预分配和惰性释放避免在字符串操作过程中,连续多次申请内存。内存...

  • 字符串内存分配

    对于字符串,其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果...

  • 【String类】对象内存分配详解

    关于内存分区参见:Java内存详解 - 内存分区 本文重点描述String对象创建时的内存分配方式。 字符串常量池...

  • 面试题|Java|Redis

    Redis内存模型 Redis内存分配 数据 :Redis存储的数据对象 字符串、哈希、列表、集合、有序集合 进程...

  • 2018/08/09

    指针高级应用 一、动态存储 1 分配内存需要用到的函数 2 空指针概念,作用 二、动态分配字符串 1 字符串 2...

  • redis

    string 采用预分配的方式减少内存的频繁分配,实际空间会大于实际字符串长度。SDS(Simple Dynami...

网友评论

      本文标题:字符串内存分配

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