我在Mountain Lion上使用IDEA 12 Leda.我想增加IDE可以使用的最大内存.我将Info.plist文件中的VMOptions设置为
-Xmx2048m -ea -XX:+HeapDumpOnOutOfMemoryError -Xverify:none -Xbootclasspath/a:../lib/boot.jar
当我打开IDEA时,我仍然看到最大内存为711m.
jps -v 显示我的VMOptions已加载,但它已被以下选项取代.
29388 **-Xmx2048m** -ea -XX:+HeapDumpOnOutOfMemoryError -Xverify:none -Xbootclasspath/a:../lib/boot.jar -Xms128m **-Xmx800m** -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=64m -XX:+UseCodeCacheFlushing -XX:+UseCompressedOops -Didea.paths.selector=IdeaIC12 -Dsun.java2d.noddraw=true -Didea.max.intellisense.filesize=2500 -Didea.dynamic.classpath=false -Didea.jars.nocopy=false -Dsun.java2d.d3d=false -Dapple.awt.fullscreencapturealldisplays=false -Dapple.laf.useScreenMenuBar=true -Djava.endorsed.dirs= -Dswing.bufferPerWindow=false -Didea.fatal.error.notification=enabled -Didea.cycle.buffer.size=1024 -Didea.popup.weight=heavy -Didea.xdebug.key=-Xdebug -Dapple.awt.graphics.UseQuartz=true -Dsun.java2d.pmoffscreen=false -Didea.no.launcher=false -DCVS_PASSFILE=~/.cvspass -Didea.use.default.antialiasing.in.editor=false -Dcom.apple.mrj.application.live-resize=false -Didea.smooth.progress=false
29392 Jps -Dapplication.home=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home -Xms8m
Run Code Online (Sandbox Code Playgroud)
哪里-Xmx800来的?我需要删除它.
具体来说,为什么修复PermGen OutOfMemoryError问题会有所帮助?
此外,答案的奖励积分指向我关于JVM参数的文档......
我需要检查是否可以传递给JVM的某个选项是显式设置还是具有默认值.
更具体一点:
我需要创建一个具有比默认堆栈大更高的本机堆栈大小的特定线程,但是如果用户希望通过指定-Xss选项来自己处理这些事情,我想创建具有默认堆栈大小的所有线程(这将由用户在-Xss选项中指定).
我检查类,如java.lang.System和java.lang.Runtime,但这些都没有给我有关的信息-Xss.
有没有办法获得我需要的信息?
我认为在_JAVA_OPTIONS和之间进行比较会很棒JAVA_TOOL_OPTIONS.我一直在寻找一个,但我找不到任何东西,所以我希望我们能在Stackoverflow上找到这方面的知识.
JAVA_OPTS包括完整性.它不是JVM的一部分,但在野外有很多问题.
到目前为止,我发现:
JAVA_OPTSJDK不使用它,而是由许多其他应用程序使用(请参阅此文章).JAVA_TOOL_OPTIONS并且_JAVA_OPTIONS是将JVM参数指定为环境变量而不是命令行参数的方法.
java和javac_JAVA_OPTIONS (覆盖其他人)JAVA_TOOL_OPTIONS (被其他人覆盖)JAVA_TOOL_OPTIONS和_JAVA_OPTIONSJAVA_TOOL_OPTIONS和之间是否存在任何其他差异_JAVA_OPTIONS(优先级除外).JAVA_TOOL_OPTIONS和_JAVA_OPTIONS(除了java和javac)JAVA_TOOL_OPTIONS和_JAVA_OPTIONS我找不到任何关于的文档_JAVA_OPTIONS.该文件JAVA_TOOL_OPTIONS没有说明差异:
由于无法始终访问或修改命令行,例如在嵌入式VM中或仅在脚本内深入启动的VM,因此提供了JAVA_TOOL_OPTIONS变量,以便在这些情况下可以启动代理.
...
这是我用来解决这个问题的代码.控制台输出包含在注释中:
export JAVA_OPTS=foobar
export JAVA_TOOL_OPTIONS=
export _JAVA_OPTIONS="-Xmx512m -Xms64m"
java -version
# Picked up JAVA_TOOL_OPTIONS:
# Picked up _JAVA_OPTIONS: -Xmx512m -Xms64m
# …Run Code Online (Sandbox Code Playgroud) 我想增加Jenkins的可用堆空间.但由于它作为服务安装,我不知道该怎么做.
通常要将debuger附加到正在运行的jvm,您需要使用如下参数启动jvm:
> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n
Run Code Online (Sandbox Code Playgroud)
现在,如果我想调试未在调试模式下启动的进程,我该怎么办?
当生产系统(即没有调试args启动)表现出"随机"(我使用松散术语)错误时,就会出现这种情况.所以我不能用适当的参数重启jvm,因为没有人知道如何再次重现bug.在这种情况下是否无法连接到JVM?
只是为了澄清它是不可能使用像jdb这样的工具连接到已经运行的JVM,除非它们是在调试模式下启动的
来自JVM手册页
使用jdb的另一种方法是将其附加到已经运行的Java VM.必须使用以下选项启动要使用jdb调试的VM:
我需要运行一个使用超过2GB的Java内存密集型应用程序,但是我遇到了增加堆最大大小的问题.到目前为止,我尝试了以下方法:
设置-Xmx参数,例如-Xmx3000m.这种方法在创建JVM时失败.从我用Google搜索,看起来-Xmx必须小于2GB.
使用-XX:+ AggressiveHeap选项.当我尝试这种方法时,我得到一个"内存不足"错误,告诉堆大小为1273.4 MB,即使我的计算机有8GB内存.
是否有另一种方法可以尝试增加JVM的最大堆大小?以下是计算机规格的摘要:
Run Code Online (Sandbox Code Playgroud)java version "1.6.0_18" Java(TM) SE Runtime Environment (build 1.6.0_18-b07) Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
它们是年轻一代垃圾收集的算法.
第二个(UseParNewGC)通过并发tenured generation垃圾收集自动激活(参见Java Concurrent and Parallel GC),但两个并行算法之间是否存在差异?
首先,我有一个8GB的内存盒,所以我怀疑总内存是什么问题.此应用程序在6GB或更低的机器上运行良好.
我试图在Eclipse的Run Configurations中的"VM Arguments"下使用-Xmx3G保留3GB的空间.
每次我尝试保留超过1500mb时,我都会收到此错误:"VM初始化期间出错; 无法使用-Xmx3G为对象堆保留足够的空间
这里发生了什么?
jvm-arguments ×10
java ×9
jvm ×7
classloader ×1
debugging ×1
eclipse ×1
heap ×1
jenkins ×1
macos ×1