java - 在文本文件中缓存行后 Java 中 ArrayList 的大小
问题描述
文本文件的大小为 15 MB。我正在将文本行缓存到ArrayList<String>
.
这是简单的缓存,没有转换等......
我得到了 ArrayList 的大小,ObjectSizeCalculator.getObjectSize()
它给了我 51mb
假设我正确使用 ObjectSizeCalculator.getObjectSize() 进行计算,文件中的 15 mb 数据如何膨胀到 51 mb?
public static void main(String[] args) throws IOException {
List<String> stringList = new ArrayList<>();
try (BufferedReader newBufferedReader = Files.newBufferedReader(Paths.get(INPUT_PATH))) {
newBufferedReader.lines().forEach(x -> {
stringList.add(x);
});
}
System.out.println("Size: " + ObjectSizeCalculator.getObjectSize(stringList)/1000000);
}
解决方案
虽然文本文件本身可能被编码为一堆,比如 Unicode 代码点,但您的 ArrayList. 但是,您的 ArrayList 包含大量 String 对象。虽然 String 基本上是 a 的包装器char[]
,但它仍然比简单数组占用更多空间。由于您的文本文件中有多少行(我假设可能有数百行),这种差异会成倍增加。由于 ArrayList 本身是一个对象,因此还添加了一些内容,但与 Strings 添加的内容相比,这可能可以忽略不计。
推荐阅读
- linux - 如何在 .bashrc 脚本文件中定期运行函数?
- python - 编写根据参数执行不同计算的函数的最佳方法是什么?
- node.js - 尝试刷新令牌时出现 invalid_grant 错误
- vba - 将带引号的不可编辑文本放在字符串变量中
- python-3.x - 如何确保在较大的子字符串中找不到较小的子字符串(即包含“she”的单词也不会标记为具有“he”)
- javascript - 解析的 XML 数据无法使用 javascript 显示
- spatialite - 如何在GPKG中使用spatialite创建带有几何列的表?
- python - 在类别 PD 中获得排名
- powershell - 更新对象数组中的对象
- keras - 具有线性激活的层和没有激活的层有什么区别?