Java 如何使基于Eclipse的应用程序使用用户计算机上的所有内存?

Java 如何使基于Eclipse的应用程序使用用户计算机上的所有内存?,java,memory-management,Java,Memory Management,我正在发布一个基于Eclipse的应用程序,希望拥有最大的堆大小。如何使我的应用程序使用不同机器上的所有可用内存。到目前为止,我所发现的只是设置heapsize的参数,我可以发送给JVM,但这些参数都是硬编码的。基本上,我希望JVM使用机器上可用的任何内存。硬编码还不够好 有没有一种简单的方法可以做到这一点?使用标准JVM功能是不可能的。JVM参数指定要保留的内存量(-Xmx…),不能指定“获取所有可用内存”。您可以尝试一个合理的值,比如1.2GB,这是WindowsXP32位的上限。问题是操作

我正在发布一个基于Eclipse的应用程序,希望拥有最大的堆大小。如何使我的应用程序使用不同机器上的所有可用内存。到目前为止,我所发现的只是设置heapsize的参数,我可以发送给JVM,但这些参数都是硬编码的。基本上,我希望JVM使用机器上可用的任何内存。硬编码还不够好


有没有一种简单的方法可以做到这一点?

使用标准JVM功能是不可能的。JVM参数指定要保留的内存量(-Xmx…),不能指定“获取所有可用内存”。您可以尝试一个合理的值,比如1.2GB,这是WindowsXP32位的上限。问题是操作系统无法保留JVM所需的所有内存,因此您必须更加保守


另一种方法是从外部计算可用内存(脚本、本机实用程序),然后使用该值设置JVM参数。不知道像Install4J这样的安装程序是否可以实现这一点。

您是否安装了Eclipse RCP应用程序(富客户端平台)?我想问一下,为什么要为客户端应用程序分配最大可能的堆大小?一般来说,应该知道给定应用程序所需的最小/最大堆?是的,我指的是富客户机平台。是的,在最好的世界里,我会有一种记忆需要的感觉。然而,由于重算法的实现不够理想,而且不知道我的用户想要运行什么数据集,这就不那么容易了。最好是让他们能够使用他们实际购买的任何内存……我认为这是一个关于JVM的有争议的问题。根据设计,似乎您必须指定所需的内存量,而不允许消耗所有的机器内存,以便使java“更安全”,并避免JVM耗尽机器资源。您可以有几个init脚本文件(eclipse.ini),并使用一些安装程序或本机工具安装一个或另一个init脚本。