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

java读取200mb文件,当加载到内存中时,需要多少内存?,java,memory,heap,Java,Memory,Heap,我有一个200mb的文件,文件格式如下 每行是一个间隔为0,1,2,3的整数 0 1 2 0 1 3 所以,如果我想用数组,向量把这个文件读入内存?还是使用ByteArray?还是绳子? 可以估计内存的大小,以便设置适当的java堆大小吗?256mb足够吗?对于字符串大小x 2-每个字节使用字符串字符(您可以将虚拟机标志设置为使用字节) -XX:+使用压缩环 将字节[]用于可以表示为纯ASCII的字符串。 (在Java6Update21PerformanceRelease中引入) 对于列表-计算

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

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

0 1 2 0 1 3

所以,如果我想用数组,向量把这个文件读入内存?还是使用ByteArray?还是绳子?
可以估计内存的大小,以便设置适当的java堆大小吗?256mb足够吗?

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

-XX:+使用压缩环 将字节[]用于可以表示为纯ASCII的字符串。 (在Java6Update21PerformanceRelease中引入) 对于列表-计算有多少个整数。对于每个整数,它创建一个指向int的指针(4字节或8字节取决于平台-您可以设置jvm选项以在64位机器上使用32位地址
-XX:+UseCompressedOops

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

ByteBuffer-与文件大小相同


最好的解决方案是基元数组-字节、short或int。它取决于整数精度。对于您拥有的字节(int数)字节-可以小于文件大小。

最好的方法是配置应用程序。试着在命令行上运行“jvisualvm”。通常我会避免将200mb的文件加载到内存中。也就是说,你可能解决了错误的问题;我对将一个200米的文件加载到内存没有问题——这完全取决于您实际使用它做什么,访问模式是什么,等等。此外,根据对它所做的操作,操作系统可能会将它保存在内存中。我使用Vector读取数据,然后它变为1.6G?是原来的八倍多。我知道Integer对象需要16个字节来表示一个数字,那么它是800m而不是1.6GSee来表示文件0 1 2 0 1 3-它是12个字节。它将被转换为6个整数。6 x 16=96字节。所以你还有8次:) -XX:+UseCompressedStrings Use a byte[] for Strings which can be represented as pure ASCII. (Introduced in Java 6 Update 21 Performance Release)