[关闭]
@x-power 2023-02-06T05:36:14.000000Z 字数 531 阅读 300

项目改进

面试


可以将Gson和StringBuilder分开讲。

最初是InputStreamReader(multipartFile.inputStream).readText()
通过inputStream获取multipartFile的输入流,通过InputStreamReader将原本的字节流转化为字符流然后通过readText将其转化为字符串。

字节流和字符流之间的转化经过当时限定堆内存的测试是没有问题的,根据报错的OutofMemory然后向上寻找发现,问题出现在了readText里面有在使用StringBuffer,问题就出在StringBuffer这里,其继承了AbstractStringBuilder其中扩容的时候使用方法是新字符串长度的二倍加2,这样的话就会造成原先内存的三倍大小(加上原来的字节流)。

其中的Gson是通过StringReader将字符流在转化为字节流去进行toObject

这样的话大概就有四倍的内存占用。

第一种方案是改进StringBuilder的扩容方案,不让他直接申请二倍大小,而是不够的话 按照几k的大小进行扩容。

在持久化存储的时候需要写为txt文件,其也可以使用字节流直接存储

解决方案是直接使用字节流从头到尾进行操作

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注