ska*_*man 18 java performance garbage-collection
我还在调查我在GC调整中遇到的问题(参见前面的问题),这涉及到大量的阅读和实验.
Sun Java5 + JVM尝试根据环境自动选择最佳GC策略和参数,这很好,但我无法弄清楚如何查询正在运行的JVM以找出这些参数是什么.
理想情况下,我想查看VM自动选择的各种GC相关-XX选项的值.如果我有这个,我可以有一个基线来开始调整.
有人知道从正在运行的VM恢复这些值吗?
Sco*_*rey 27
-XX:+ PrintCommandLineFlags打印在命令行上传递或由人体工程学(自动调整大小)功能配置的标志.
-XX:+ PrintFlagsInitial转储所有默认标志和值.
-XX:+ PrintFlagsFinal在处理命令行和人体工程学之后转储所有标志.
所以我认为后者会为你做,只需将它添加到你的命令行脚本.
Kev*_*vin 18
以下示例将打印出选项的值以及值是DEFAULT还是VM_CREATION:
import java.lang.management.ManagementFactory;
import javax.management.ObjectName;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataSupport;
public class HotSpotTest {
public static void main(String [] args) throws Exception {
printHotSpotOption("MaxHeapFreeRatio");
printHotSpotOption("SurvivorRatio");
printHotSpotOptions();
}
private static void printHotSpotOption(String option) throws Exception {
ObjectName name = new ObjectName("com.sun.management:type=HotSpotDiagnostic");
String operationName = "getVMOption";
Object [] params = new Object [] {option};
String [] signature = new String[] {String.class.getName()};
Object result = ManagementFactory.getPlatformMBeanServer().invoke(name, operationName, params, signature);
CompositeDataSupport data = (CompositeDataSupport) result;
System.out.println(option);
System.out.println("- Value: "+data.get("value"));
System.out.println("- Origin: "+data.get("origin"));
}
private static void printHotSpotOptions() throws Exception {
ObjectName name = new ObjectName("com.sun.management:type=HotSpotDiagnostic");
String attributeName = "DiagnosticOptions";
Object result = ManagementFactory.getPlatformMBeanServer().getAttribute(name, attributeName);
CompositeData [] array = (CompositeData[]) result;
for (CompositeData d : array) {
System.out.println(d.get("name"));
System.out.println("- Value: "+d.get("value"));
System.out.println("- Origin: "+d.get("origin"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想查看VM自动选择的各种GC相关-XX选项的值.如果我有这个,我可以有一个基线来开始调整.
仅从提供的命令行标志推断出精确的堆配置通常并不简单.
如果您需要了解堆配置并且您处于非Windows环境中,则可以使用jmap -heap此博客条目中所述的内容.
以下是提供的信息示例:
using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 1073741824 (1024.0MB)
NewSize = 268435456 (256.0MB)
MaxNewSize = 268435456 (256.0MB)
OldSize = 805306368 (768.0MB)
NewRatio = 7
SurvivorRatio = 6
PermSize = 21757952 (20.75MB)
MaxPermSize = 88080384 (84.0MB)
| 归档时间: |
|
| 查看次数: |
9703 次 |
| 最近记录: |