java读取200mb文件,在内存中加载时,需要多少内存?

时间:2012-03-23 11:05:25

标签: java memory heap

我有一个200mb的文件,文件格式如下

每一行是一个间隔为0,1,2,3的整数。

  

0 1 2 0 1 3 ...

那么,如果我想使用数组将此文件读入内存,使用Vector?还是使用ByteArray?或字符串? 可以估计一下内存的大小,以便我设置合适的java堆大小?足够256mb?

1 个答案:

答案 0 :(得分:0)

对于字符串大小x 2 - 字符串为每个字节使用char(可以将虚拟机标志设置为使用字节)

-XX:+UseCompressedStrings   
   Use a byte[] for Strings which can be represented as pure ASCII. 
   (Introduced in Java 6 Update 21 Performance Release)

对于List - 计算多少整数。对于每个整数,它创建一个指向int的指针(4个字节或8个字节依赖于平台 - 您可以设置jvm选项以在64位机器上使用32位地址-XX:+UseCompressedOops

整数数x((一个整数的大小)+(指向列表中整数的指针))= 2 *(整数个数)*(一个指针的大小)

ByteBuffer - 与文件相同的大小

最好的解决方案是原始数组 - byte,short或int。它依赖于整数精度。对于byte,你有(int的数量)字节 - 可以小于文件大小。