0

我正在开发一个加载文件并使用它们的信息来填充Model类的程序。这些文件的大小可以从几 KB 到几乎 1 GB。当它们的大小波动时,类使用的内存也会波动Model

当我加载一个足够大的文件时,我会收到OutOfMemoryError.

我能够拒绝用户加载文件的请求(基于文件大小)。如何检查文件、确定其大小,然后确定应用程序是否可以处理它?

有没有办法让它适应用户计算机上的 RAM 量?

4

2 回答 2

2
You can query the JVM to see how much free and used memory there is :

/* Total amount of free memory available to the JVM */
System.out.println("Free memory (bytes): " + 
Runtime.getRuntime().freeMemory());

/* This will return Long.MAX_VALUE if there is no preset limit */
long maxMemory = Runtime.getRuntime().maxMemory();
 /* Maximum amount of memory the JVM will attempt to use */
System.out.println("Maximum memory (bytes): " + 
(maxMemory == Long.MAX_VALUE ? "no limit" : maxMemory));

/* Total memory currently in use by the JVM */
System.out.println("Total memory (bytes): " + 
Runtime.getRuntime().totalMemory());
于 2013-09-26T21:10:46.467 回答
2

使用File.length()确定文件的大小,如果太大则拒绝。

你怎么知道它是否太大?使用Runtime.freeMemory()查看您还剩下多少堆。当然,加载文件并将其填充到您的Model类中会占用额外的内存,并且您实际上可能不会保留文件的全部内容。根据您对如何使用数据的了解,您应该留出足够的空间来加载类中的所有数据。

请注意,JVM 通常不会分配用户计算机中的所有内存,但可能默认为一些较小的数字。如果用户对默认设置不满意,可以使用 Xmx 选项对其进行修改。

于 2013-09-26T21:07:26.770 回答