Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取Windows加载值_Java_Windows_Nio_Cpu Usage - Fatal编程技术网

Java 如何获取Windows加载值

Java 如何获取Windows加载值,java,windows,nio,cpu-usage,Java,Windows,Nio,Cpu Usage,我想使用Java从Windows获取有关CPU、RAM、HDD、网络和进程(服务)列表的数据。如何在不使用第三方库或JNI的情况下获取这些系统值 在Windows中是否有类似于/proc的东西,我可以在其中获取所有必要的值并使用它们?我不认为您可以从标准java API中的单个位置获得所需的一切,但是您可以使用以下类来满足某些需求: 有关处理器/处理器统计/内存等的数量: \ 有关物理磁盘等的信息: 另一个非常丑陋的选择是通过流程对象对实用程序进行特定于平台的调用,并解析它们的输出。例如,通过

我想使用Java从Windows获取有关CPU、RAM、HDD、网络和进程(服务)列表的数据。如何在不使用第三方库或JNI的情况下获取这些系统值


在Windows中是否有类似于/proc的东西,我可以在其中获取所有必要的值并使用它们?

我不认为您可以从标准java API中的单个位置获得所需的一切,但是您可以使用以下类来满足某些需求:

有关处理器/处理器统计/内存等的数量:

\

有关物理磁盘等的信息:


另一个非常丑陋的选择是通过流程对象对实用程序进行特定于平台的调用,并解析它们的输出。例如,通过进程调用top命令,读取并解析其输出。

对于此类内容,有Windows Management Instrumentation API(WMI)。请参见此处的网络绑定:

类似问题的旧堆栈溢出答案如下:

寻找更新的Java绑定。曾经有J#作为与Java在源代码级别兼容的.NET语言之一。因此,从理论上讲,找到合适的Java应该不是什么大问题→.网→WMI网桥

这个API非常强大,除了一些基本功能,如进程、声音设备、磁盘驱动器等。您可以访问与运行
msinfo 32.exe
获得的信息大致相同的信息集

所以这不是特定于Java的答案,而是特定于Windows的答案。所有Windows版本都支持.NET,并且.NET可以通过WMI轻松访问该信息

例如,流程列表可以通过

过去有专门的Win32 API用于本机二进制文件,尽管现在仍然支持它们,但它们已经成为历史。将一个命令行应用程序的输出管道化到另一个命令行应用程序的输入并不是连接进程的常用方法。如果真的需要的话


我希望这将帮助您找到问题的一些解决方案

您可以使用本机API使用JNI

您还可以使用Apache许可库,它的功能远远超出您的要求。它将本机调用包装在Java API中,这样您就不必知道JNI的内部工作原理


您还可以从代码内部生成进程来运行特定于操作系统的命令,以便收集系统统计信息,例如systeminfo |查找“可用物理内存”或windows或Linux cat/proc/meminfo上的wmic命令。这可以通过java.lang.ProcessBuilder实现。

在java中获取系统信息有几个选项(运行时
类、
java.lang.management
包等)

然而,这通常是非常有限的信息,并且往往不包括您似乎需要的东西

你应该考虑使用第三方解决方案,例如:

  • SIGAR-(需要安装本机DLL)
  • 奥什-

好吧,我建议您试试JavaSysMon:

使用Java跨平台管理操作系统进程并获取cpu和内存统计数据。因此,它的优点是,它跨平台。 目前它支持Mac OS X、Linux、Windows和Solaris。 这是一个积极的结果。如果这可以完成您的工作,那么您实际上可以为您的应用程序使用跨平台功能


也许它不如Sigar好,但试一试。

这个问题与java 8有什么关系?这不可能重复吗?Linux中有类似于/proc的文本文件吗?我不相信。注册表存储windows的大部分信息,系统信息可通过任务管理器或MMC获得,但据我所知,任务管理器不引用任何虚拟文件,如/proc。这可能会有帮助:我发现:我可以从windows注册表中读取这些值吗?您可以给我一些有关
较新Java绑定的详细信息吗?如果你有机会,你能给我举一些基本的例子吗?@Peter我很抱歉搞混了。我所说的“更新的Java绑定”是指通过Java→“推荐的库…”链接文章中建议的WMI绑定,并检查是否有更新的版本可用,因为答案有点旧。e、 g jWMI是从2010年开始的,所以也许可以在他的网站上联系Henry Ranch,询问更新的版本或已知的问题等。我没有从Java使用WMI的个人实践经验,因此我不会给您更多帮助(顺便说一句:您也可以创建PowerShell脚本(它具有完全的.NET访问权限),您可以将其称为命令行应用程序)@Peter quick Google将我重定向到了可以找到更多关于Linux命令及其PowerShell替代品的地方。。