java - 在 Java 9 中查询交换空间

标签 java java-9 telemetry

由于我使用的 sigar 库版本中存在错误(返回虚假的交换值),我尝试使用 com.sun.management.OperatingSystemMXBean 代替。这工作正常并给了我想要的结果(在 Windows 上)。

Class<?> sunMxBeanClass = Class.forName("com.sun.management.OperatingSystemMXBean");
sunMxBeanInstance = sunMxBeanClass.cast(ManagementFactory.getOperatingSystemMXBean());
getFreeSwapSpaceSize = getMethodWithName(sunMxBeanClass, "getFreeSwapSpaceSize");
getTotalSwapSpaceSize = getMethodWithName(sunMxBeanClass, "getTotalSwapSpaceSize");

然而,这与 java 9 不兼容。是否有另一种使用 java 查询交换文件/分区信息的方法? 我不想引入新的库或 sigar 版本

赞赏跨平台解决方案,但 Windows 就足够了:--)

谢谢

最佳答案

您可以尝试动态发现可用的 MX 属性:

public class ExtendedOsMxBeanAttr {
    public static void main(String[] args) {
        String[] attr={ "TotalPhysicalMemorySize", "FreePhysicalMemorySize",
                        "FreeSwapSpaceSize", "TotalSwapSpaceSize"};
        OperatingSystemMXBean op = ManagementFactory.getOperatingSystemMXBean();
        List<Attribute> al;
        try {
            al = ManagementFactory.getPlatformMBeanServer()
                                  .getAttributes(op.getObjectName(), attr).asList();
        } catch (InstanceNotFoundException | ReflectionException ex) {
            Logger.getLogger(ExtendedOsMxBeanAttr.class.getName())
                  .log(Level.SEVERE, null, ex);
            al = Collections.emptyList();
        }
        for(Attribute a: al) {
            System.out.println(a.getName()+": "+a.getValue());
        }
    }
}

这里没有对 com.sun 类的依赖,甚至没有反射访问。

关于java - 在 Java 9 中查询交换空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48325706/

相关文章:

c# - 我可以告诉 Application Insights 对遥测进行下采样,但不对异常进行采样吗?

java - 如何从 Google Cloud Platform Java Flexible Environment 下载应用程序

java - jshell中C选项有什么用

python - 扩展 ctypes 以指定字段重载

azure - 如何增加 Azure Analytics Applicationinsights 中分析查询结果的限制

java - JDK 9+ 内置类加载器 ModuleReference 解析将使用类路径(而不是 Jar)来查找资源

java - 在 Java 中使用自增和自减运算符的混淆

Java在eclipse中读取文本文件

java - 无法对非静态方法进行静态引用

java - 我应该在 Java 9 中要求哪个模块才能使用 JPA?