java将double[]转换为不可变列表的成本更低的方法
我想将数组double[]
转换为不可变的集合,以便在值对象中使用。然而,我处理的是一个非常大的数组,我不断得到错误java.lang.OutOfMemoryError: Java heap space
我目前正在使用
Collections.unmodifiableList(DoubleStream.of(myArray).boxed().collect(Collectors.toList()));
我想正是因为这个原因,我的程序内存不足。有没有更便宜的方法将double[]转换为不可变列表
# 1 楼答案
流对于函数式编程和可读性非常好,但当性能是主要考虑因素时,应该避免流。它们会创建不必要的额外对象
同样令人惊讶的是,双基元类型的数组比它们的包装类双数组(ref:https://www.baeldung.com/java-primitives-vs-objects)消耗更多内存
使用
Double
对象数组而不是双原语,然后运行:我比较了这两种方法
stream方法使用48Mb,而Double方法使用28Mb