获取运行时JVM可用的内存

seg*_*ult 3 java sorting

我正在尝试对一堆数据进行排序,以便输入到程序的数据大小可以大于JVM可用的内存,并且处理需要外部排序,这比Quicksort要慢得多.

有没有办法在运行时获取JVM可用的内存,这样我就可以尽可能地使用就地排序,并且只在数据输入太大时切换到Mergesort?

Ada*_*ski 8

java.lang.Runtime课程上查看这些方法:

freeMemory

totalMemory

maxMemory

Runtime rt = Runtime.getRuntime();
System.err.println(String.format("Free: %d bytes, Total: %d bytes, Max: %d bytes",
  rt.freeMemory(), rt.totalMemory(), rt.maxMemory()));
Run Code Online (Sandbox Code Playgroud)

另请注意,如果内存总量耗尽,您始终可以使用-XmxJVM参数以较大的堆分配来启动JVM; 例如

java -Xmx256M MyClass
Run Code Online (Sandbox Code Playgroud)