标签:通过 就是 ret ring 字符串 ges 冗余 pre 内存占用
我们发现 String.substring()所返回的 String 仍然会保存原始 String,其实substring中生成的字符串与原字符串共享内容数组是一个很棒的设计,这样避免了每次进行substring重新进行字符数组复制。这种设计在很多时候可以很大程度的节省内存,因为这些 String 都复用了原始 String,只是通过 int 类型的 start, end 等值来标识每一个 String。而对于上面的案例,从一个巨大的 String 截取少数 String 为以后所用,这样的设计则造成大量冗余数据。
既然导致大量内存占用的根源是 String.substring()返回结果中包含大量原始 String,那么一个显而易见的减少内存浪费的的途径就是去除这些原始 String。办法有很多种,在此我们采取比较直观的一种,即再次调用 new String构造一个的仅包含截取出的字符串的 String
String newString = new String(largeString.substring(0,2));
在Java 7 中substring的实现抛弃了之前的内容字符数组共享的机制,对于子字符串(自身除外)采用了数组复制实现单个字符串持有自己的应该拥有的内容。
--------------------- 本文来自 麦田 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/itmyhome1990/article/details/77647800?utm_source=copy
标签:通过 就是 ret ring 字符串 ges 冗余 pre 内存占用
原文地址:https://www.cnblogs.com/paper-file/p/9744268.html