当前位置: 首页 > wzjs >正文

公司网站建设制作难么百度搜索排名怎么收费

公司网站建设制作难么,百度搜索排名怎么收费,网上哪里有辅导高考生做难题的网站,免费网站建设品牌好Java 字符串常量池 (String Constant Pool) 的位置在不同的 JDK 版本中有所不同: JDK 1.6 及之前: 位置: 字符串常量池位于方法区的永久代 (PermGen) 中。特点: 永久代使用 JVM 内存。永久代大小固定,容易发生 OutOf…

Java 字符串常量池 (String Constant Pool) 的位置在不同的 JDK 版本中有所不同:

JDK 1.6 及之前:

  • 位置: 字符串常量池位于方法区永久代 (PermGen) 中。
  • 特点:
    • 永久代使用 JVM 内存。
    • 永久代大小固定,容易发生 OutOfMemoryError: PermGen space
    • 字符串常量池中存储的是字符串实例 (对象)。
    • String.intern() 方法会将字符串添加到字符串常量池中 (如果池中已存在相同内容的字符串,则返回池中的引用;否则,将字符串添加到池中,并返回池中的引用)。

JDK 1.7:

  • 位置: 字符串常量池被移到了 Java 堆 (Heap) 中。
  • 变化:
    • 字符串常量池不再位于方法区/永久代,而是位于堆中。
    • 这意味着字符串常量池的大小受堆大小的限制,而不再受永久代大小的限制。
  • 原因:
    • 永久代大小固定,容易 OOM。 将字符串常量池移到堆中, 可以减少 OOM 的风险。
    • 堆是垃圾回收的主要区域,将字符串常量池移到堆中,可以更有效地进行垃圾回收。

JDK 1.8 及之后:

  • 位置: 字符串常量池仍然位于 Java 堆 (Heap) 中。
  • 变化:
    • HotSpot VM 使用元空间 (Metaspace) 替代了永久代来实现方法区,但字符串常量池仍然在堆中。

总结:

JDK 版本字符串常量池位置
1.6 及之前方法区 (永久代 PermGen)
1.7Java 堆 (Heap)
1.8 及之后Java 堆 (Heap)

字符串常量池中存储的是什么?

  • JDK 1.6 及之前: 字符串常量池中存储的是字符串实例 (对象)。
  • JDK 1.7 及之后: 字符串常量池中存储的是字符串对象的引用,而不是实例本身。 字符串实例本身仍然存储在 Java 堆中。

String.intern() 方法:

  • String.intern() 方法是一个 native 方法,用于将字符串添加到字符串常量池中(或从池中获取引用)。
  • JDK 1.6 及之前:
    • 如果字符串常量池中已存在相同内容的字符串,则返回池中的引用。
    • 如果字符串常量池中不存在相同内容的字符串,则将该字符串复制到字符串常量池中,并返回池中的引用。
  • JDK 1.7 及之后:
    • 如果字符串常量池中已存在相同内容的字符串,则返回池中的引用。
    • 如果字符串常量池中不存在相同内容的字符串,则将该字符串对象的引用添加到字符串常量池中,并返回该引用(而不是复制字符串)。

示例 (JDK 1.8):

public class StringPoolExample {public static void main(String[] args) {String s1 = new String("hello"); // 创建两个对象:一个 "hello" 字符串对象,一个 s1 引用String s2 = "hello"; // 直接从字符串常量池中获取引用String s3 = s1.intern(); // 将 s1 指向的字符串对象的引用添加到字符串常量池 (如果池中已存在,则返回池中的引用)System.out.println(s1 == s2); // false (s1 指向堆中的对象, s2 指向字符串常量池中的引用)System.out.println(s2 == s3); // true (s2 和 s3 都指向字符串常量池中的同一个引用)String s4 = new String("world") + new String("!"); // 创建多个对象String s5 = "world!";String s6 = s4.intern(); // 将 "world!" 字符串对象的引用添加到字符串常量池System.out.println(s4 == s5); // falseSystem.out.println(s5 == s6); // trueString s7 = new String("java"); String s8 = s7.intern(); String s9 = "java";System.out.println(s7 == s8);   // false, 在 OpenJDK/HotSpot 中, 首次出现的 "java" 字符串, 是由 `sun.misc.Version` 类加载的System.out.println(s8 == s9);   // true}
}

为什么要将字符串常量池移到堆中?

  • 避免 PermGen 溢出: 永久代大小固定,容易发生 OutOfMemoryError: PermGen space。将字符串常量池移到堆中,可以减少 OOM 的风险。
  • 更容易进行垃圾回收: 堆是垃圾回收的主要区域,将字符串常量池移到堆中,可以更有效地进行垃圾回收。
  • 简化 JVM 结构: 移除永久代可以简化 JVM 的实现。

总结:

字符串常量池的位置在不同的 JDK 版本中有所不同。从 JDK 1.7 开始,字符串常量池被移到了 Java 堆中。 字符串常量池中存储的是字符串对象的引用(JDK 1.7 及之后),而不是字符串实例本身。 String.intern() 方法可以将字符串添加到字符串常量池中(或从池中获取引用)。

http://www.dtcms.com/wzjs/367785.html

相关文章:

  • 网站页面分类东莞做好网络推广
  • 深圳网站建设代理商百度软件中心
  • 怎样用hbuilder做网站搜索引擎优化内容包括哪些方面
  • 自助建站网站建设网站设计培训
  • 中国五大网站建设公司短视频矩阵seo系统源码
  • 备案 网站建设方案书百度知道客服
  • 宁波网站设计公司seo优化服务价格
  • 做网站的windowlcd最新清远发布
  • 创建主题资源网站的学习_你觉得在主题资源建设方面有哪些收获?抖音流量推广神器软件
  • 长安网站建设推广公司福州百度快速优化
  • 余姚网站建设报价营销案例分析报告模板
  • 物流公司网站怎么做网站推广内容
  • 哪些网站可以做外部锚文本周口网站制作
  • 网站建设维护概括总结余姚网站制作公司
  • 哪些网站做财金的好河南百度关键词优化排名软件
  • 花钱想贷款结果成了做网站上海百度推广优化排名
  • 怎么做网站图片的切换图优化教程网站推广排名
  • 广州帮人网站建设上海seo推广方法
  • 南昌建站模板头条热点新闻
  • 电子商务市场的发展前景seo搜索引擎优化到底是什么
  • 学做网站论坛插件惠州百度seo哪家好
  • edd次元的避风港网站代理互联网广告销售好做吗
  • 东莞哪家网站建设比较好企业危机公关
  • 淘宝店铺装网站导航怎么做今日冯站长之家
  • 品牌策划公司属于什么行业网站seo运营
  • 专做企业的p2p网站友链交换平台
  • 网站怎么做定时任务企业网站排名优化
  • 礼品兑换网站怎么做潍坊百度关键词优化
  • 邯郸网站建设推广百度2022第三季度财报
  • 太平保宝app免费下载二维码长春网络推广优化