Java 如何在运行的JVM上确定MaxDirectMemorySize?

Java 如何在运行的JVM上确定MaxDirectMemorySize?,java,garbage-collection,jvm,bytebuffer,Java,Garbage Collection,Jvm,Bytebuffer,我有一个使用DirectByteBuffers存储数据的应用程序,但我想知道MaxDirectMemorySize是什么,这样我就不会意外地超过它 如果不进行手动配置,我如何从程序中找出MaxDirectMemorySize是什么?YU可以使用 RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean(); List<String> args=RuntimemxBean.getInputArguments();

我有一个使用DirectByteBuffers存储数据的应用程序,但我想知道MaxDirectMemorySize是什么,这样我就不会意外地超过它


如果不进行手动配置,我如何从程序中找出MaxDirectMemorySize是什么?

YU可以使用

RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
List<String> args=RuntimemxBean.getInputArguments();

for(int i=0;i<args.size();i++) {
    System.out.println(args.get(i)); 
}
RuntimeMXBean RuntimeMXBean=ManagementFactory.getRuntimeMXBean();
List args=RuntimemxBean.getInputArguments();

对于(inti=0;iYuu,您可以使用

RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
List<String> args=RuntimemxBean.getInputArguments();

for(int i=0;i<args.size();i++) {
    System.out.println(args.get(i)); 
}
RuntimeMXBean RuntimeMXBean=ManagementFactory.getRuntimeMXBean();
List args=RuntimemxBean.getInputArguments();

对于(int i=0;i只有在命令行上明确指定了选项时,接受的答案才有效。从Java 6开始,您可以使用直接访问该选项。以下Java 7代码可以方便地读取该选项:

final HotSpotDiagnosticMXBean hsdiag = ManagementFactory
        .getPlatformMXBean(HotSpotDiagnosticMXBean.class);
if (hsdiag != null) {
    System.out.println(hsdiag.getVMOption("MaxDirectMemorySize"));
}
请注意,这可能返回一个值零,这意味着使用默认设置,该设置等于
Runtime.getRuntime().maxMemory()
。例如,对于Windows 7上的Oracle JDK 7u71 64位,这将返回3690987520


或者,如果您愿意访问
sun.misc
软件包,则可以通过调用直接访问该软件包。

只有在命令行上明确指定该选项时,接受的答案才有效。从Java 6开始,您可以使用直接访问该选项。以下Java 7代码可以方便地读取该选项:

final HotSpotDiagnosticMXBean hsdiag = ManagementFactory
        .getPlatformMXBean(HotSpotDiagnosticMXBean.class);
if (hsdiag != null) {
    System.out.println(hsdiag.getVMOption("MaxDirectMemorySize"));
}
请注意,这可能返回一个值零,这意味着使用默认设置,该设置等于
Runtime.getRuntime().maxMemory()
。例如,对于Windows 7上的Oracle JDK 7u71 64位,这将返回3690987520


或者,如果您愿意访问
sun.misc
包,可以通过调用直接访问它。

谢谢!这正是我所需要的。但是如果它没有在jvm参数中设置,您如何找到它的值呢?我相信它一直都是。至少每次我检查时都是这样。谢谢!这正是我所需要的。但是我如果它不是在jvm参数中设置的,那么如何找出该值呢?我相信总是这样。至少每次我检查时都是这样。在我的Windows 7机器上使用Oracle JDK 7u75时,我得到:5707923456,因此我认为该值是特定于机器的。在我的Windows 7机器上使用Oracle JDK 7u75时,我得到:5707923456,因此我认为该值是特定于机器的菲莎。