什么是java的Compact Strings特性,什么情况下使用

简介: Java 9引入了紧凑字符串特性,优化了字符串的内存使用。它通过将字符串从UTF-16字符数组改为字节数组存储,根据内容选择更节省内存的编码方式,通常能节省10%至15%的内存。

在Java 9中引入了紧凑字符串(Compact Strings)特性,用来优化字符串的内存使用。简单来说,Java改进了字符串的存储方式,将之前的UTF-16字符数组改为字节数组,使得字符串能根据内容使用更节省内存的编码方式。以下是这个特性的核心内容:

什么是紧凑字符串

  1. 内部结构
  • 在Java 8及之前,字符串是用char[]字符数组存储的,每个字符占两个字节(UTF-16编码)。
  • Java 9开始,字符串改为byte[]字节数组。对于只包含Latin-1(ISO-8859-1)字符的字符串,每个字符只需一个字节;若包含其他字符则仍使用两个字节(UTF-16)。
  1. 编码标识
  • Java 9中的每个字符串对象都有一个编码标识(coder),用于指示当前字符串的编码方式:
  • LATIN1(值为0):只包含Latin-1字符。
  • UTF16(值为1):包含其他字符(如中文)。
  1. 内存优化
  • 因为大多数字符串仅含Latin-1字符,这一特性大幅减少内存占用,一般能节省10%到15%的内存,降低垃圾回收的频率。

示例代码

以下代码展示了紧凑字符串的存储方式:

java

代码解读

复制代码

public class CompactStringExample {
    public static void main(String[] args) {
        String latinString = "Hello"; // 仅包含Latin-1字符
        String utf16String = "你好"; // 包含UTF-16字符

        // 打印每个字符串的内部字节数组长度
        System.out.println("Latin String Length: " + latinString.getBytes().length); // 输出5
        System.out.println("UTF-16 String Length: " + utf16String.getBytes().length); // 输出6
    }
}

分析

  • latinString仅包含ASCII字符,因此会被存储为一个5字节的数组。
  • utf16String包含中文字符,每个字符用两个字节表示,因此存储为6字节的数组。

如何判断字符串是否使用紧凑模式

可以使用反射或调试工具查看字符串对象的coder字段:若coder为0,则该字符串使用紧凑模式;若为1,则使用UTF-16。

总结

Java 9的紧凑字符串特性通过优化字符串存储方式,减少了内存占用,并提高了程序性能。这一特性默认启用,帮助开发者在处理大量文本时获得更高效的内存使用。


转载来源:https://juejin.cn/post/7436691610371522569

相关文章
|
8月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
Java API 开发者
277 0
|
10月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
445 1
|
10月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
939 1
|
10月前
|
缓存 安全 Java
Java 并发新特性实战教程之核心特性详解与项目实战
本教程深入解析Java 8至Java 19并发编程新特性,涵盖CompletableFuture异步编程、StampedLock读写锁、Flow API响应式流、VarHandle内存访问及结构化并发等核心技术。结合电商订单处理、缓存系统、实时数据流、高性能计数器与用户资料聚合等实战案例,帮助开发者高效构建高并发、低延迟、易维护的Java应用。适合中高级Java开发者提升并发编程能力。
473 0
|
10月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
426 1
|
10月前
|
IDE Java API
Java 17 新特性与微服务开发的实操指南
本内容涵盖Java 11至Java 17最新特性实战,包括var关键字、字符串增强、模块化系统、Stream API、异步编程、密封类等,并提供图书管理系统实战项目,帮助开发者掌握现代Java开发技巧与工具。
605 1
|
10月前
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
298 2