Java 字符串 : how the memory works with immutable Strings

标签 java android string memory-management stringbuffer

我有一个简单的问题。

byte[] responseData = ...;
String str = new String(responseData);
String withKey = "{\"Abcd\":" + str + "}";

上面代码中,这三行是不是占用了3X内存。例如,如果 responseData 是 1mb,那么第 2 行将占用额外的 1mb 内存,然后第 3 行将占用额外的 1mb + xx。这是真的?如果不是,那么它将如何工作。如果是,那么解决此问题的最佳方法是什么。 StringBuffer 在这里有帮助吗?

最佳答案

是的,听起来不错。可能更多,因为您的 1MB 字节数组需要转换为 UTF-16,因此根据编码,它可能更大(如果输入为 ASCII,则为 2MB)。

请注意,一旦使用它的变量超出范围,垃圾收集器就可以回收内存。您可以尽早将它们设置为 null 以帮助它尽可能及时地完成此操作(例如 responseData = null; 在您构造字符串之后)。

if yes, then what is the optimal way to fix this

“修复”意味着有问题。如果你有足够的内存是没有问题的。

the problem is that I am getting OutOfMemoryException as the byte[] data coming from server is quite big,

如果不这样做,则必须考虑一个更好的替代方法来在内存中保留 1MB 的字符串。也许您可以从文件中流式传输数据?还是直接处理字节数组?这是什么数据?

关于Java 字符串 : how the memory works with immutable Strings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17937120/

相关文章:

java - 检查对象是否为空,然后检查该对象是否持有对另一个对象的非空引用

java - Thread.yield() 有更好的解决方案吗?

android - Bug 录制视频 android

java - 如何从 JSONObject 获取所有数组?

android - 通过自己的IP通过RTP进行Android实时音频流传输

c++ - 在 C++ 中通过赋值初始化自己的 String 类

c# - 查找String中最长的重复字符

java - Intellij - 无法在外部驱动器 : java. nio.file.AccessDeniedException 中启动项目

java - 在eclipse中分离编辑器

Java Swing JComboBox,mouseListener 不工作