我需要检查是否可以传递给JVM的某个选项是显式设置还是具有默认值.
更具体一点:
我需要创建一个具有比默认堆栈大更高的本机堆栈大小的特定线程,但是如果用户希望通过指定-Xss选项来自己处理这些事情,我想创建具有默认堆栈大小的所有线程(这将由用户在-Xss选项中指定).
我检查类,如java.lang.System和java.lang.Runtime,但这些都没有给我有关的信息-Xss.
有没有办法获得我需要的信息?
我想在我的JVM上尝试CompressedOops.不,我想知道它是否可以默认启用.我在debian/squeeze上运行这个jvm:
$ java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)
Run Code Online (Sandbox Code Playgroud)
有人说它默认启用,有人说它不是:
来自:http://forums.yourkit.com/viewtopic.php?f = 3&t = 3185
是的,你是对的,我也检查了它,并且在646位Java6u21中默认没有激活Compressed Oops,我不明白为什么它在我提供的链接中这么说.
我尝试用jconsole/JMX检查它,但没有运气找到名为CompressedOops或类似的属性.
有没有人知道我在哪里获得具有默认值的特定构建的所有jvm选项的列表?
关于Janning
通过Oracle JRE安装程序安装JRE时,安装程序会创建一个共享存档,以启用类数据共享(CDS),从而减少JRE进程的启动时间和内存占用.
如果我们的安装程序通过复制JRE目录来安装JRE,那么我们是否会丢失类数据共享?
如果是这样,可以通过java -Xshare:dump从我们自己的安装程序重新生成共享存档(使用)来解决吗?
Java代码中是否有一种机制来检测类数据共享是否处于活动状态?
我们的安装包括一个共享存档(例如,jre/bin/client/classes.jsa),它可能是在我们使用Oracle安装程序安装Java的原始机器上创建的.这有用,无害还是有害?
我们正在使用Java 7.至少在某些机器上,我们使用的是HotSpot客户端VM.
"Java代码是保存在本地编译的类数据共享存档(classes.jsa)中还是字节码?" - 接受的答案说原生,但似乎有点猜测.
有没有办法获取正在运行的 JVM 的 GC 设置?
我正在尝试查看运行 SerialGC、ParallelGC、ParallelOldGC、ConcurrentMarkSweepGC 等的 GC 算法。