java.lang.OutOfMemoryError: Failed to allocate a 103511048 byte allocation with 37060344 free bytes and 35MB until OOM, target footprint 402653184, growth limit 402653184
at com.alibaba.fastjson.serializer.SerializeWriter.expandCapacity(SerializeWriter.java:308)
原因,本地存储的json数据过大,导致了fastson解析出来直接报OOM。
我存储的是温度传感器的温度数据,虚拟了24小时的数据量。测试出来的这问题。
解决方法:
限制存储的数据大小
温度数据使用LTTB算法精简后存储
温度数据与设备数据分开存储
同时遇到的问题:
使用CopyOnWriteArrayList来存储数据,但是CopyOnWriteArrayList不能初始化容量。在超大数据量的面前,由于放在了主线程执行,直接触发了ANR
at java.lang.System.arraycopy(Native method)
at java.util.Arrays.copyOf(Arrays.java:3555)
at java.util.Arrays.copyOf(Arrays.java:3522)
at java.util.concurrent.CopyOnWriteArrayList.add(CopyOnWriteArrayList.java:436)
解决方案:
由LTTB算法精简,限制数据量
放在其他线程中执行
思考:
在超大数据量的面前,可能导致内存紧张,需要将这些工作内容放在其他进程中。
注意数据操作不能放在主线程