运行jar文件前,我需要设置java虚拟机虚拟内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行jar文件前,我需要设置java虚拟机虚拟内存相关的知识,希望对你有一定的参考价值。

在控制台打java -jar -Xms512m -Xmx1024m firstproject_fat.jar可以运行,那怎么把这两步和在一起生成一个exe文件,双击直接运行呢?

设置JVM内存的参数有四个:
-Xmx   Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;
-Xms   Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
-Xmn   Java Heap Young区大小,不熟悉最好保留默认值;
-Xss   每个线程的Stack大小,不熟悉最好保留默认值;
2. 如何设置JVM内存分配:
(1)当在命令提示符下启动并使用JVM时(只对当前运行的类Test生效):
java -Xmx128m -Xms64m -Xmn32m -Xss16m Test
(2)当在集成开发环境下(如eclipse)启动并使用JVM时:
a. 在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的JVM内存分配):
-vmargs  
-Xms40m  
-Xmx256m
-vmargs表示以下为虚拟机设置参数,可修改其中的参数值,也可添加-Xmn,-Xss,另外,eclipse.ini内还可以设置非堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。
此处设置的参数值可以通过以下配置在开发工具的状态栏显示:
在eclipse根目录下创建文件options,文件内容为:org.eclipse.ui/perf/showHeapStatus=true
修改eclipse根目录下的eclipse.ini文件,在开头处添加如下内容:
-debug  
options  
-vm  
javaw.exe
重新启动eclipse,就可以看到下方状态条多了JVM信息。

参考技术A 设置JVM内存的参数有四个:
-Xmx Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;
-Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
-Xmn Java Heap Young区大小,不熟悉最好保留默认值;
-Xss 每个线程的Stack大小,不熟悉最好保留默认值;
2. 如何设置JVM内存分配:
(1)当在命令提示符下启动并使用JVM时(只对当前运行的类Test生效):
java -Xmx128m -Xms64m -Xmn32m -Xss16m Test
(2)当在集成开发环境下(如eclipse)启动并使用JVM时:
a. 在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的JVM内存分配):
-vmargs
-Xms40m
-Xmx256m
-vmargs表示以下为虚拟机设置参数,可修改其中的参数值,也可添加-Xmn,-Xss,另外,eclipse.ini内还可以设置非堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。
此处设置的参数值可以通过以下配置在开发工具的状态栏显示:
在eclipse根目录下创建文件options,文件内容为:org.eclipse.ui/perf/showHeapStatus=true
修改eclipse根目录下的eclipse.ini文件,在开头处添加如下内容:
-debug
options
-vm
javaw.exe
重新启动eclipse,就可以看到下方状态条多了JVM信息。
b. 打开eclipse-窗口-首选项-Java-已安装的JRE(对在当前开发环境中运行的java程序皆生效)
编辑当前使用的JRE,在缺省VM参数中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m
c. 打开eclipse-运行-运行-Java应用程序(只对所设置的java类生效)
选定需设置内存分配的类-自变量,在VM自变量中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m
注:如果在同一开发环境中同时进行了b和c设置,则b设置生效,c设置无效,如:
开发环境的设置为:-Xmx256m,而类Test的设置为:-Xmx128m -Xms64m,则运行Test时生效的设置为:
-Xmx256m -Xms64m
(3)当在服务器环境下(如Tomcat)启动并使用JVM时(对当前服务器环境下所以Java程序生效):
a. 设置环境变量:
变量名:CATALINA_OPTS
变量值:-Xmx128m -Xms64m -Xmn32m -Xss16m
b. 打开Tomcat根目录下的bin文件夹,编辑catalina.bat,将其中的�TALINA_OPTS%(共有四处)替换为:-Xmx128m -Xms64m -Xmn32m -Xss16m
参考技术B 需要工具我用的这个工具jsmooth-0.9.9-7本回答被提问者采纳 参考技术C 使用exe4j。教程自己网上搜。追问

exe4j可以设置虚拟机最大内存么?我看教程都没写这部分的……

追答

exe4j可以将jar包变成exe。

Java 虚拟机启动器错误:Jar 文件无效或损坏

【中文标题】Java 虚拟机启动器错误:Jar 文件无效或损坏【英文标题】:Java Virtual Machine Launcher Error: Invalid or Corrupt Jar file 【发布时间】:2015-11-14 14:32:01 【问题描述】:

我正在使用 netbeans 创建一个 jar 文件。然后我使用lanch4j 创建这个jar 文件的exe。当我在我的计算机上运行此 exe 文件时,它运行良好但是当我在其他计算机上运行此 exe 时它给了我警告

无法验证发布者。你想运行这个软件吗

当点击运行时,exe文件运行良好。

我通过使用 windows sdk 附带的 signtool.exe 将证书添加到我的 exe 文件来删除该警告。它成功地将证书添加到我的 exe 文件

但是现在当我运行我的 exe 文件时,它给了我错误

"Java 虚拟机启动器 错误:Jar 文件无效或损坏"

请帮帮我。

谢谢。

【问题讨论】:

How to be a verified publisher? 的可能副本 【参考方案1】:

由于您的应用程序尚未签名,因此引发此警告。您没有在本地计算机上看到错误,因为您从未传输过应用程序。您在其他机器上看到它大概是因为您将它上传到某个地方,然后将其下载到另一台机器上。

查看其他问题了解更多信息:Signing a Windows EXE file

【讨论】:

感谢 dzylich。我有一个扩展名为 .pfx 的证书。但我不知道如何将该证书安装到我的 exe 文件中。 我将证书添加到我的 exe。它已成功添加,但是当我运行该 exe 文件时出现错误“Java 虚拟机启动器错误:无效或损坏的 jar 文件” 嘿@UsmanAli,我不确定是什么导致了这个错误。我对专门为 Java 包签名不太熟悉,不知道是什么原因造成的。 感谢@dzylich 的帮助 我已通过 ksign 登录,但仍然显示错误。还有其他的吗?【参考方案2】:

使用sign4j验证launch4j exe.. 它避免了 jar 损坏..

sign4j signtool sign /s MyCertStore /n My_cert sample.exe

验证此链接.. 它会帮助你.. Sign a launch4j executable in ant with sign4j and jsign

【讨论】:

sign4j 是 launch4j 中用于签署 exe 的工具。 它存在于 lauch4j 文件夹中。详细步骤:验证此博客:【参考方案3】:

使用 LAUNCH4J 将 JAR 的 EXE SIGNER 封装在一个 EXE 中:

1.CERTIFICATION CREATION 与普通 EXE SIGNER 相同。

makecert -r -pe -ss MyCertStore -n "CN=MyTestCert" MyTestCert.cer

(注意:将此证书导入到 windows 中 certmgr.msc 中的受信任证书部分。)

只有它不会在本地系统显示未知发布者。

验证:

在windows中,在开始窗口搜索框中输入certmgr.msc,屏幕上会提示certmgr.msc,打开后在受信任的证书部分检查证书是否导入成功。)

2.使用 SIGNTOOL 和 SIGN4J 登录 EXE:

sign4j signtool sign /s MyCertStore /n MyTestCert  "sample.exe"

【讨论】:

以上是关于运行jar文件前,我需要设置java虚拟机虚拟内存的主要内容,如果未能解决你的问题,请参考以下文章

java中怎样设置虚拟机的内存大小

理解JAVA虚拟机(下)

怎样在电脑上运行JAR文件文件?

Java 虚拟机启动器错误:Jar 文件无效或损坏

Java 虚拟机原理Dalvik 虚拟机 ( 打包 Jar 文件和 Dex 文件 | 反编译 Dex 文件 | 分析 Dex 文件反编译结果 )

如何把一个java程序打包成exe文件,运行在没有java虚拟机的机器上?