Java 确定可用内存等的调用是否可靠?

Java 确定可用内存等的调用是否可靠?,java,memory,runtime,Java,Memory,Runtime,我正在使用以下电话: Runtime.getRuntime().freeMemory() Runtime.getRuntime().maxMemory() Runtime.getRuntime().totalMemory() 但是关于maxMemory我注意到的是,当我使用命令行选项为内存指定50Gig时,在一台内存远小于此值的机器上,50Gig就是这个调用显示的数字。这有什么意义吗?有。只要当前可用内存足够,JVM就不关心最大可用内存。一旦堆大小增加,根据平台的不同,地狱可能会崩溃。From

我正在使用以下电话:

Runtime.getRuntime().freeMemory()
Runtime.getRuntime().maxMemory()
Runtime.getRuntime().totalMemory()

但是关于maxMemory我注意到的是,当我使用命令行选项为内存指定50Gig时,在一台内存远小于此值的机器上,50Gig就是这个调用显示的数字。这有什么意义吗?

有。只要当前可用内存足够,JVM就不关心最大可用内存。一旦堆大小增加,根据平台的不同,地狱可能会崩溃。From-返回Java虚拟机将尝试使用的最大内存量。如果没有固有限制,则返回Long.MAX_值。。将尝试使用。谢谢。这是我面临的问题。我使用的是一台内存充足的linux机器,但当我创建一个包含一百万个1k字符串的数组时,内存不足,这大概是我认为的一个gig。如果机器有16 gig内存,它会自动获取该内存吗?还是需要使用cmd line参数指定16 gig,我正在尝试,但没有成功?1。无法创建大于INTEGER.MAX\u值的数组。接下来,是的,您可以告诉jvm要使用多少内存。有增加最大可用内存的选项元素数量只有一百万。整数最大值为2 gig,因此数组内存中的大小应小于该值。您使用的是jdk 6还是jdk 5?。您是在堆上还是在字符串常量池上创建字符串?