我有一个200mb的文件,文件格式如下
每行是一个间隔为 0,1,2,3 的整数。
0 1 2 0 1 3...
所以,如果我想把这个文件读入内存,我应该使用数组,使用 Vector<Integer>
?或使用ByteArray
?或String
?
如何估算内存成本,以便适当设置 java 堆大小? 256mb 够吗?
最佳答案
对于字符串大小 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)
对于列表 - 计算有多少个整数。对于每个整数,它都会创建一个指向 int 的指针(4 字节或 8 字节取决于平台 - 您可以设置 jvm 选项以在 64 位机器上使用 32 位地址-XX:+UseCompressedOops
)
整数个数 x ((一个整数的大小) + (指向列表中整数的指针)) = 2 * (整数个数) * (一个指针的大小)
ByteBuffer - 与文件大小相同
最好的解决方案是原始数组 - byte、short 或 int。它取决于整数精度。对于字节,您有(int 数)字节 - 可以小于文件大小。
关于java读取200mb文件,加载到内存中时,需要多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9838139/