广告
返回顶部
首页 > 资讯 > 精选 >JDK9对String字符串怎么进行优化
  • 305
分享到

JDK9对String字符串怎么进行优化

2023-06-14 06:06:32 305人浏览 八月长安
摘要

小编给大家分享一下jdk9对String字符串怎么进行优化,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!String类可以说是Java编程中使用最多的类了,如果能对String字符串的性能进行优化,那么程序的性能必然能大幅

小编给大家分享一下jdk9对String字符串怎么进行优化,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

String类可以说是Java编程中使用最多的类了,如果能对String字符串的性能进行优化,那么程序的性能必然能大幅提升。

这不JDK9就对String字符串进行了改进升级,在某些场景下可以让String字符串内存减少一半,进而减少JVMGC次数。

String的底层存储

面试的时候我们通常会说String字符串有不可变的特性,每次都要创建新的字符串。那么,为什么String字符串是不可变的呢?

先来看一下String字符串的底层存储结构:

public final class String  implements java.io.Serializable, Comparable<String>, CharSequence {    private final char value[];  public String() {    this.value = "".value;  }  public String(String original) {    this.value = original.value;    this.hash = original.hash;  }  // ...}

看到什么了?当我们new一个String对象时,对应的字符串其实是以char数组的形式存储在String对象内部。而这个char数组是final的,也就是说不可变的。

这也就是为什么我们说String字符串拥有不可变的特性,当字符串改变了,char数组不可变,就只能创建一个新的对象,新的char数组了。

底层存储的优化

上面说的情况是JDK8及以前版本,到了JDK9,String中字符串的存储不再用char数组了,改用byte数组。

public final class String  implements java.io.Serializable, Comparable<String>, CharSequence {  @Stable  private final byte[] value;  private final byte coder;    @Native static final byte LATIN1 = 0;  @Native static final byte UTF16 = 1;    static final boolean COMPACT_STRINGS;   public String() {    this.value = "".value;    this.coder = "".coder;  }  @HotSpotIntrinsicCandidate  public String(String original) {    this.value = original.value;    this.coder = original.coder;    this.hash = original.hash;  }    // ...}

不仅将char数组改为byte数组,而且新增了一个coder的成员变量。

在程序中,绝大多数字符串只包含英文字母数字等字符,使用Latin-1编码,一个字符占用一个byte。如果使用char,一个char要占用两个byte,会占用双倍的内存空间。

但是,如果字符串中使用了中文等超出Latin-1表示范围的字符,使用Latin-1就没办法表示了。这时JDK会使用UTF-16编码,那么占用的空间和旧版(使用char[])是一样的。

coder变量代表编码的格式,目前String支持两种编码格式Latin-1和UTF-16。Latin-1需要用一个字节来存储,而UTF-16需要使用2个字节或者4个字节来存储。

据说这一改进方案是JDK的开发人员用大数据和人工能智能,调研了成千上万的应用程序的heapdump信息后,得出:大部分的String都是以Latin-1字符编码来表示的,只需要一个字节存储就够了,两个字节完全是浪费。

COMPACT_STRINGS属性则是用来控制是否开启String的compact功能。默认情况下是开启的。可以使用-XX:-CompactStrings参数来对此功能进行关闭。

改进的好处

改进的好处是非常明显的,首先如果项目中使用Latin-1字符集居多,内存的占用大幅度减少,同样的硬件配置可以支撑更多的业务。

当内存减少之后,进一步导致减少GC次数,进而减少Stop-The-World的频次,同样会提升系统的性能。

随着JDK的迭代String字符串的内存结构及方法等也在不断地进行演变。这是因为String字符串往往是JVM中占用内存最多的类,通过对它的改造升级,对性能的提升会更加明显。

看完了这篇文章,相信你对“JDK9对String字符串怎么进行优化”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: JDK9对String字符串怎么进行优化

本文链接: https://www.lsjlt.com/news/268279.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JDK9对String字符串怎么进行优化
    小编给大家分享一下JDK9对String字符串怎么进行优化,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!String类可以说是Java编程中使用最多的类了,如果能对String字符串的性能进行优化,那么程序的性能必然能大幅...
    99+
    2023-06-14
  • JDK9对String字符串的新一轮优化
    String类可以说是Java编程中使用最多的类了,如果能对String字符串的性能进行优化,那么程序的性能必然能大幅提升。 这不JDK9就对String字符串进行了改进升级,在某些...
    99+
    2022-11-11
  • JDK9对String字符串的新一轮优化是什么
    JDK9对String字符串的新一轮优化是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。String类可以说是Java编程中使用最多的类了,如果能对Stri...
    99+
    2023-06-15
  • java怎么对string字符串排序
    在Java中,你可以使用`Arrays`类的`sort`方法对字符串进行排序。以下是一个示例:```javaimport java....
    99+
    2023-09-14
    string java
  • Mysql怎么对字符串进行排序
    Mysql对字符串进行排序的方法示例:利用ORDER BY关键字进行排序。语法:SELECT column_name,column_nameFROM table_nameORDER BY column_name,column_nam...
    99+
    2022-10-16
  • 如何​对JavaScript数组进行字符串化
    这篇文章主要介绍了如何对JavaScript数组进行字符串化的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何对JavaScript数组进行字符串化文章都会有所收获,下面我们一...
    99+
    2022-10-19
  • PHP中怎么对字符串进行分割
    这篇文章将为大家详细讲解有关PHP中怎么对字符串进行分割,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PHP分割字符串代码示例:< php $str =&...
    99+
    2023-06-17
  • 利用Struts2怎么对字符串进行截取
    这篇文章给大家介绍利用Struts2怎么对字符串进行截取,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在开发中,经常会遇到字符串太长,需要适当截取后再显示的问题,其实实现方式有几种:· 在后台截取后之后再传回页面显示·...
    99+
    2023-05-31
    struts2 字符串
  • 怎么在Shell中对字符串进行排序
    怎么在Shell中对字符串进行排序?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。【方法一】按ASCII正向排序备注:1) tr将子字符串中的空白转换为换行符,再...
    99+
    2023-06-09
  • Java中怎么对字符串进行utf-8编码
    本篇内容介绍了“Java中怎么对字符串进行utf-8编码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!java对字符串进行utf-8编码我们...
    99+
    2023-07-06
  • java怎么对字符串做归一化
    在Java中,可以使用String类的一些方法对字符串进行归一化处理。下面是一些常用的归一化方法:1. 去除字符串中的空格:可以使用...
    99+
    2023-10-20
    java
  • php怎么将string(字符串)转为二进制
    php将string(字符串)转为二进制的步骤:1、使用bin2hex()函数将字符串转为16进制值,语法“bin2hex(string)”;2、使用base_convert()函数将16进制值转为二进制值即可,语法“b...
    99+
    2022-06-14
    php
  • 在java项目中怎么对字符串进行反转
    在java项目中怎么对字符串进行反转?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java 字符串反转的实例详解new StringBuffer(“abcde”).revers...
    99+
    2023-05-31
    java 字符串反转 ava
  • 怎么在R语言中对字符串进行拼接
    这篇文章将为大家详细讲解有关怎么在R语言中对字符串进行拼接,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在R语言中 paste 是一个很有用的字符串处理函数,可以连接不同类型的变量及常量。函...
    99+
    2023-06-14
  • php中怎么对字符串进行编码和解码
    这篇文章将为大家详细讲解有关php中怎么对字符串进行编码和解码,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Uuencode是将二进制文件转换为文本文件的过程。转换后的文件可以通过纯文本电子...
    99+
    2023-06-20
  • vue怎么进行字符串转换
    VueJS是一个流行的JavaScript框架,可以帮助开发者构建动态用户界面。在VueJS中,可以使用数据绑定来保持数据和界面的同步。然而,在某些情况下,需要将VueJS中的数据转换为不同的格式,比如字符串类型。本文将介绍VueJS的st...
    99+
    2023-05-14
  • php怎么进行字符串替换
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑在 PHP 中,可以对一个字符串中的特定字符或子串进行替换,这是非常常用的功能。php进行字符串替换方法1:str_ireplace() 和 str_replace()...
    99+
    2020-02-14
    php 字符串替换
  • Java 性能优化中如何进行字符串过滤
    本篇文章给大家分享的是有关Java 性能优化中如何进行字符串过滤,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。★一个简单的需求  首先描述一下需求:给定一个 String 对象...
    99+
    2023-06-02
  • jquery怎么将对象转化为字符串
    本篇内容主要讲解“jquery怎么将对象转化为字符串”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jquery怎么将对象转化为字符串”吧!   一。Json对...
    99+
    2022-10-19
  • 在Java中怎么将 Base64编码与String字符串进行转换
    这篇文章给大家介绍在Java中怎么将 Base64编码与String字符串进行转换,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体方法如下:package com.duanlian.daimengmusic...
    99+
    2023-05-31
    java string base64
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作