java - 如何获取cpu、gpu和os全名
问题描述
是否有可能在Java中获得CPU、GPU和OS的全称?
例如:
- 中央处理器:
Intel(R) Core(TM) i3-8100 CPU @ 3.60GHZ 3.60GHZ
- 显卡:
NVIDIA GeForce GTX 980 Ti 6GB
- 操作系统:
Windows 10 PRO x64 2004
解决方案
System.getProperty("os.arch")
给你类似的东西x86_64
。
System.getProperty("os.name")
给你类似的东西Mac OS X
。
System.getProperty("sun.cpu.endian")
得到你little
(这是一个非标准的属性名称)。
除此之外,答案大多是“不,你不能那样做”。
您可以做的是检查您在哪个操作系统上,并启动操作系统和体系结构特定工具,通过本机接口 (JNI) 或使用ProcessBuilder
执行已知默认安装在您所在操作系统上的命令行工具以获取此信息。
例如,如果您知道您正在安装一些 posix(例如,mac 或 linux),您可以使用 processbuilder 来运行/usr/bin/uname -a
,这会得到类似的东西:
Darwin YourSystemName.local 19.5.0 Darwin Kernel Version 19.5.0: Tue May 26 20:41:44 PDT 2020; root:xnu-6153.121.2~2/RELEASE_X86_64 x86_64
你可以跑去/usr/sbin/sysctl -n machdep.cpu.brand_string
得到类似的东西Intel(R) Core(TM) i7-1060NG7 CPU @ 1.20GHz
。
但是,/usr/sbin/sysctl
可能不在您的系统上。它绝对不会出现在 Windows 机器上,它可能不会出现在各种风格的 linux 上。
尝试测试这样的设置将非常棘手。您需要数百个部署(您希望支持的所有版本的 linux、各种 mac 版本、一堆 Windows 版本等等)。
换句话说,这是一个相当复杂的项目!
我会考虑使用处理所有这些的库,例如OSHI。OSHI 是一个免费的基于JNA(本机)的 Java 操作系统和硬件信息库。
推荐阅读
- java - 如何将 TelephonyManager 移动到不同的类然后 MainActivity
- azure - 使用现有令牌调用 Microsoft.Azure.Fluent API
- reactjs - 如何在 Typescript 中将类型传递给 React 上下文使用者
- sql - 删除所有以以下开头的行:INSERT INTO `mdl_logstore_standard_log` VALUES
- discord - discord.js 更改服务器所有者的昵称
- html - 这个多余的水平空间是从哪里来的?
- angular - 以角度在组件之间传递数据
- c# - 使用 HtmlAgilityPack 拆分 HTML 字符串
- spring - 使用 AsyncRabbitTemplate 添加非阻塞消费者
- python - 在过滤器中使用 django 查询集中的变量或清空过滤器