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

标签 java memory heap-memory

我有一个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/

相关文章:

java - JsonView 序列化取决于某些条件/属性名称等

python - Scipy 稀疏特征求解器 : MemoryError after multiple passes through loop without anything new being written during loop

c++ - 堆分配类的成员是否在堆中自动分配?

java - 在java中测试DB2顺序

java - 内部类/接口(interface)中定义的泛型类型是否绑定(bind)到外部类泛型类型定义?

java - 面向方面的编程 - 什么是 'cflow' ?

c++ - 使用 curl 下载到内存时出错

c++ - 双端队列内存分配可以稀疏吗?

尽管堆保持不变,Java RAM 却增加了?

c++ - 限制客户端在堆 C++ 上分配对象