如何使用命令行为JAVA分配空间[重复]
Posted
技术标签:
【中文标题】如何使用命令行为JAVA分配空间[重复]【英文标题】:How to allocate space to JAVA using command line [duplicate] 【发布时间】:2014-01-09 23:25:08 【问题描述】:我在将大型数据集加载到 Jena 时遇到了堆错误。 `有什么方法可以给 JVM(Java) 分配一个大的堆空间。
我知道我可以通过对 eclipse.ini 进行更改来实现这一点。但是有什么方法可以让我在 linux 中使用命令行增加 Java 堆大小(我使用 64GB RAM 服务器:运行 12.04 Ubuntu LTS 服务器)?
由于堆空间较少,我得到的错误是:超出线程主 gc 开销限制中的异常。
另外,我如何找到可以为我的系统设置的最大堆空间量
我尝试了 export JAVA_OPTS= -Xms4096m -Xmx4096m 但最终得到了错误:
bash:导出:-Xms4096m': not a valid identifier
bash: export:
-Xmx4096m':不是有效的标识符
【问题讨论】:
研究Xmx
和Xms
选项
@JarrodRoberson 我试过但通过 JVM_OPTIONS 设置它们对我不起作用。另外,我怎样才能找到可以为我的系统设置的最大堆空间量。非常感谢您的回复...我在发布问题之前阅读了该帖子..但由于我是 linux 的新手..我没有得到太多
这种信息很容易用任何搜索引擎找到。
@Leo Ya 我试过了...但作为一个新手我无法理解很多
@AliceEverett 您可以尝试在 bash 提示符下运行命令 free
。
【参考方案1】:
试试(注意引号不是可选的两个单词)
export JAVA_OPTS="-Xms4096m -Xmx4096m"
或者,甚至
export MIN="4096m" # <-- Those quotes are (one word).
export MAX="4096m"
export JAVA_OPTS="-Xms$MIN -Xmx$MAX" # <-- single quotes would break variable expansion
【讨论】:
我有 64 GB RAM..如果我为 Java 堆空间分配 16GB RAM 可以吗 @AliceEverett 测试一下,但我可能会更高...(取决于我在做什么)... export JAVA_OPTS="-Xms4096m -Xmx4096"..signify..我只是有点好奇..非常感谢到目前为止的帮助 @AliceEverett 兆字节... export JAVA_OPTS="-Xms4096m -Xmx4096"中-Xmx4096后是否应该有m【参考方案2】:java -Xms4096m -Xmx4096m [YourAppHere]
此命令将在开始时分配 4GB(或 4096 MB)的堆内存(-Xms4096m 选项),并且最大堆内存大小为 4GB(-Xmx4096m 选项)。
显然,您可以将数字更改为您想要的任何大小。如果计算机必须增加内存大小会产生开销(每次增加内存大小时,分配都会加倍)所以如果你有那么多内存,你最好在应用程序的开头分配它。
【讨论】:
[YourAppHere] 表示什么。也感谢您的回答:) 你正在运行的java文件 实际上我正在运行 java 字节码(即 C++ 的可执行等效项)..我可以在这里指定可执行文件名称 还有一种方法可以让我在一段时间内永久设置java堆大小 java 总是作为字节码运行,无论是刚刚编译的还是压缩到 jar 中。 Java 在虚拟机上运行,并且只理解专门为它制作的字节码。这些命令会将堆大小设置为您想要的任何值,并且只要应用程序正在运行,它就会保持不变。如果您需要快捷方式,请编写一个调用该命令的 sh 脚本,而不是每次都键入它以上是关于如何使用命令行为JAVA分配空间[重复]的主要内容,如果未能解决你的问题,请参考以下文章
java程序是在编译的时候分配空间的吗,如果不是那程序在啥时候给变量分配内存空间?