我有一个简单的问题。
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/