首页 > 解决方案 > 在文本文件中缓存行后 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);
}

标签: javaarraylist

解决方案


虽然文本文件本身可能被编码为一堆,比如 Unicode 代码点,但您的 ArrayList. 但是,您的 ArrayList 包含大量 String 对象。虽然 String 基本上是 a 的包装器char[],但它仍然比简单数组占用更多空间。由于您的文本文件中有多少行(我假设可能有数百行),这种差异会成倍增加。由于 ArrayList 本身是一个对象,因此还添加了一些内容,但与 Strings 添加的内容相比,这可能可以忽略不计。


推荐阅读