Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么从命令行运行的可执行jar比从Eclipse运行的同一项目使用更多的ram?_Java_Eclipse - Fatal编程技术网

Java 为什么从命令行运行的可执行jar比从Eclipse运行的同一项目使用更多的ram?

Java 为什么从命令行运行的可执行jar比从Eclipse运行的同一项目使用更多的ram?,java,eclipse,Java,Eclipse,为什么从命令行运行的可执行jar要比从Eclipse运行的同一个项目使用更多的RAM(在我的例子中大约是7倍) 在开发项目时,我从Eclipse(run->run)运行应用程序,它使用了大约60mb的ram(我查看了刚刚创建的javaw.exe进程),而如果我创建一个可执行JAR并从命令行(Windows)运行它,ram的使用量约为450mb。此外,从命令行运行时,ram使用变化的幅度比从Eclipse的run->run运行时更大。在Eclipse中,它必须与其他服务/应用程序共享ram。但在命

为什么从命令行运行的可执行jar要比从Eclipse运行的同一个项目使用更多的RAM(在我的例子中大约是7倍)


在开发项目时,我从Eclipse(run->run)运行应用程序,它使用了大约60mb的ram(我查看了刚刚创建的javaw.exe进程),而如果我创建一个可执行JAR并从命令行(Windows)运行它,ram的使用量约为450mb。此外,从命令行运行时,ram使用变化的幅度比从Eclipse的run->run运行时更大。

在Eclipse中,它必须与其他服务/应用程序共享ram。但在命令行上它没有限制。在命令行中,您还可以通过启动应用程序来限制ram。 你可以通过这样做来限制它

java -Xmx256M -Xms256M -cp /*.jar

这可能与Eclipse启动应用程序时使用的JVM设置有关。在启动Jar时,Java将对内存使用的设置进行最佳猜测。您可以通过控制台上的
java
命令更改使用的内存大小:

java -Xms64m -Xmx256m -cp your.jar
-Xms??m
以mb为单位设置最小堆大小。
-Xmx??m
以mb为单位设置最大堆大小


Java可能会自动选择一个更大的堆大小,因为它不是由eclipse指定的。

是的,我想可能是这样的,但是数学计算不正确。Eclipse本身使用了190mb+60mb,用于我的应用程序==大约250,这肯定不接近450。也许还有其他原因?没有其他解释。尝试使用java-Xmx256M-Xms256M-cp/*.jar启动应用程序,您会发现它将超出分配的限制。如果您满意,请接受答案并投赞成票。感谢从Eclipse启动时,应用程序通常会获得自己的JVM,因此它与从命令行启动时一样。然而。Eclipse通常会将初始堆设置为8M,而命令行可能有不同的默认值(我的机器默认为64M)。可以使用“jps-v”从命令行查看流程和启动参数