oku*_*ane 152 java jvm jvm-arguments
我需要检查是否可以传递给JVM的某个选项是显式设置还是具有默认值.
更具体一点:
我需要创建一个具有比默认堆栈大更高的本机堆栈大小的特定线程,但是如果用户希望通过指定-Xss
选项来自己处理这些事情,我想创建具有默认堆栈大小的所有线程(这将由用户在-Xss选项中指定).
我检查类,如java.lang.System
和java.lang.Runtime
,但这些都没有给我有关的信息-Xss
.
有没有办法获得我需要的信息?
小智 189
在启动时通过这个 -Dname=value
然后在你的代码中你应该使用
value=System.getProperty("name");
Run Code Online (Sandbox Code Playgroud)
获得这个价值
Dav*_*ler 174
使用此代码,您可以获取JVM参数:
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
...
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMxBean.getInputArguments();
Run Code Online (Sandbox Code Playgroud)
我发现 HotSpot 列出了管理 bean 中除 -client 和 -server 之外的所有 VM 参数。因此,如果您从 VM 名称推断 -client/-server 参数并将其添加到运行时管理 bean 的列表中,您将获得完整的参数列表。
这是 SSCCE:
import java.util.*;
import java.lang.management.ManagementFactory;
class main {
public static void main(final String[] args) {
System.out.println(fullVMArguments());
}
static String fullVMArguments() {
String name = javaVmName();
return (contains(name, "Server") ? "-server "
: contains(name, "Client") ? "-client " : "")
+ joinWithSpace(vmArguments());
}
static List<String> vmArguments() {
return ManagementFactory.getRuntimeMXBean().getInputArguments();
}
static boolean contains(String s, String b) {
return s != null && s.indexOf(b) >= 0;
}
static String javaVmName() {
return System.getProperty("java.vm.name");
}
static String joinWithSpace(Collection<String> c) {
return join(" ", c);
}
public static String join(String glue, Iterable<String> strings) {
if (strings == null) return "";
StringBuilder buf = new StringBuilder();
Iterator<String> i = strings.iterator();
if (i.hasNext()) {
buf.append(i.next());
while (i.hasNext())
buf.append(glue).append(i.next());
}
return buf.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想要List<String>
.
最后一点:我们可能还想扩展它以处理在命令行参数中包含空格的罕见情况。
归档时间: |
|
查看次数: |
142815 次 |
最近记录: |