我想永久设置Java堆大小,并且不希望运行带有选项的每个jar文件.我使用Windows和Java 1.7.
当我尝试编译(不执行)我的一个项目时,我最近收到以下错误:
Tool /usr/bin/java execution started with arguments: -jar /Applications/android-sdk-mac_x86/platform-tools/lib/dx.jar --no-strict --dex --output=obj/Debug/android/bin/classes.dex obj/Debug/android/bin/classes /Developer/MonoAndroid/usr/lib/mandroid/platforms/android-8/mono.android.jar FlurryAnalytics/Jars/FlurryAgent.jar Jars/android-support-v4.jar
UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: Java heap space
at com.android.dx.rop.code.RegisterSpecSet.<init>(RegisterSpecSet.java:49)
at com.android.dx.rop.code.RegisterSpecSet.mutableCopy(RegisterSpecSet.java:383)
at com.android.dx.ssa.LocalVariableInfo.mutableCopyOfStarts(LocalVariableInfo.java:169)
at com.android.dx.ssa.LocalVariableExtractor.processBlock(LocalVariableExtractor.java:104)
at com.android.dx.ssa.LocalVariableExtractor.doit(LocalVariableExtractor.java:90)
at com.android.dx.ssa.LocalVariableExtractor.extract(LocalVariableExtractor.java:56)
at com.android.dx.ssa.SsaConverter.convertToSsaMethod(SsaConverter.java:50)
at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:99)
at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:73)
at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:273)
at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:134)
at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:87)
at com.android.dx.command.dexer.Main.processClass(Main.java:487)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459)
at com.android.dx.command.dexer.Main.access$400(Main.java:67)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
at com.android.dx.command.dexer.Main.processOne(Main.java:422)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333)
at com.android.dx.command.dexer.Main.run(Main.java:209)
at com.android.dx.command.dexer.Main.main(Main.java:174)
at com.android.dx.command.Main.main(Main.java:91)
Run Code Online (Sandbox Code Playgroud)
其他项目按预期建造.我想我需要增加这个java构建步骤的堆大小?但是怎么样?
我有一个用于搜索文件的java桌面应用程序,它通常很快就会达到默认的堆限制.我无法访问将要安装的所有系统,因此我想在应用程序本身中增加JVM堆大小.任何人都可以帮助我如何在我的应用程序中以编程方式执行此操作
我需要一种系统级方法java.awt.headless来true 为所有java调用设置属性.也就是说,使用-Djava.awt.headless=true不是一个选项,因为java是从我无法访问的地方调用的(例如来自用Java/C /等编写的另一个工具).
我正在使用一堆用Java编写的工具(特别是Adobe的Air ADT),这些工具依赖于AWT类.当我在控制台上运行这些工具时,它们工作正常.但是,当我从SSH会话中运行它们时,它们会失败java.lang.InternalError: Can't connect to window server - not enough permissions.谷歌搜索我发现将java.awt.headless设置为true将解决问题.它没有,这是因为ADT本身不会 产生儿童Java进程-Djava.awt.headless=true.
是否有任何系统级方法来确保在调用Java时设置此属性?也许一些系统awt属性文件或等价物?
最糟糕的情况我可以尝试替换/usr/bin/java添加此参数的shell脚本,"$@"但我希望避免这种情况.(更新:为了确保我的理论是正确的,尝试这个shell脚本破解它确实解决了问题.只是希望有一个更清洁的解决方案)
我在Ubuntu台式机上工作,我想增加Java的堆大小.RAM为16GB,当前Max Heap Size为3GB
我查了这篇帖子后增加Tomcat堆大小
关于Ubuntu的发现不多,所以我尝试了这个命令:
java -Xmx10000m -X2000m -XshowSettings:all
Run Code Online (Sandbox Code Playgroud)
结果是:
Min Heap Size: 1.95G
Max Heap Size: 9.77G
Run Code Online (Sandbox Code Playgroud)
然后 sudo gedit /etc/tomcat7/default
并将此lino更改为:
JAVA_OPTS="-Djava.awt.headless=true -Xmx10000m -XX:MaxPermSize=2000m"
Run Code Online (Sandbox Code Playgroud)
但后来我重新启动了机器,检查了最大尺寸:
java -XshowSettings:all
Run Code Online (Sandbox Code Playgroud)
这表明:
Max Heap Size (Estimated): 3.80GB
Run Code Online (Sandbox Code Playgroud)
我想利用我得到的高RAM(16 GB).还有什么我能做的吗?
Java是否有一个默认的系统环境变量,在我们设置它时将始终读取/追加?CATALINA_OTPS/ JAVA_OPTSetc似乎只适用于TOMCAT/JBOSS等.
更新:添加了项目#4和5.从标题中删除操作系统以使我的问题更清晰.
更新2:在查看Perception的答案后,似乎我的第2项和第3项可以通过实现System.getenv.如何实现第4项和第5项?
以下是场景示例:Imagine现在JAVA_DEFAULT_OPTS是一个环境变量,将由Java读取,因为它现在已成为标准.在开发台式机上,我设置JAVA_DEFAULT_OPTS=-DLOG_LEVEL=DEBUG -Xmx384m; 在生产服务器机器上,客户设置JAVA_DEFAULT_OPTS=-DLOG_LEVEL=INFO -Xmx1024m.当我/用户双击Windows上的jar文件时,应用程序将运行不同的log4j级别和最大内存堆大小.
我的服务器中有许多运行在crons中的小型java程序.我有一个openvz VPS,而java与内存和openvz非常混淆.
到目前为止,我提出的最佳解决方案是运行我的程序:
java -Xmx16m class
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我有很多程序正在运行,我想为所有系统设置默认的最大堆,这样我就不会更改所有启动脚本,也不必记得每次写时都这样做一个新的.
我试图找到一种方法来设置/更改我的CentOS系统的全局默认值,但我没有运气!
如果有人能帮助我,我将不胜感激.
谢谢.
我用线程开发了聊天应用程序.但是当我启动我的应用程序时,系统行为非常缓慢,并且有时异常发生堆已满.我想增加Java虚拟机的堆大小.我该怎么做?
我有java jar文件和内存的问题.
我使用netbeans 6.7开发一个应用程序,这个应用程序需要更多的内存来运行,因为它转换了另一个文件.每当这个应用程序转换一个6-10 MB的文件时,它就会崩溃.所以我设置netbeans VM选项:-Xms32m -Xmx256m,应用程序可以转换6-10mb文件没有问题.
我清理并构建项目,以便它可以生成我的应用程序的jar文件.我在计算机上运行jar并使用jconsole监视内存.应用程序使用的最大内存为256 MB.但每当我将它移动到其他计算机时,它在jconsole上显示65-66 mb,并且在转换6-10 mb文件时应用程序将崩溃.所以我需要使用命令提示符:java -jar -Xmx256m myjar.jar来执行具有最大内存的jar
为什么会发生这种情况,在我的计算机中,最大内存显示为256 MB,而另一台计算机显示为65-66 mb?我可以强制另一台计算机为我的应用程序提供额外的最大内存吗
谢谢您的回答.对不起英语不好,我很抱歉.如果你们都觉得我的问题很难理解,请告诉我.
最好的祝福
丹尼
ps:fyi我用来开发应用程序的计算机有2gb ram,在我测试的其他计算机上有1-2 gb ram.
我当时正在使用一个工具。JVM 选项是可配置的。
最近,我收到 OutOfMemoryError 因此我在选项配置中添加 -Xmx1024m ,如下所示。
config.properties:JVM_OPTION =“-Xmx4096m -XX:-UseGCOverheadLimit”
之前的cmd日志:java -Xms16777216 -Xmx50m com.f.Startmain
现在的cmd日志:java -Xms16777216 -Xmx50m com.f.Startmain -Xmx4096m -XX:-UseGCOverheadLimit
该工具现在仍然内存不足,因为 -Xmx4096m 没有覆盖旧的。该工具不可修改,配置只是在命令末尾添加新选项。
有人知道在 JVM 选项中覆盖 -Xmx50m 的方法吗?
java ×9
heap ×2
size ×2
air ×1
android ×1
build ×1
headless ×1
heap-memory ×1
jar ×1
jvm ×1
linux ×1
monodevelop ×1
netbeans ×1
performance ×1
tomcat ×1
ubuntu-12.04 ×1
windows ×1
xamarin ×1