Java小程序可以发现多少硬件细节?

Java小程序可以发现多少硬件细节?,java,operating-system,benchmarking,Java,Operating System,Benchmarking,我正在编写一个Java小程序,以便在不同的硬件下以不同的方式运行。例如,如果我知道一台计算机有大量的RAM,但处理器很弱,我可以改变一些时间-内存权衡的平衡。能够发现运行小程序的CPU的确切品牌和型号可能会有所帮助。拥有这些信息将使我能够针对不同的系统对软件进行基准测试,并找到瓶颈 一般来说,我想要的是: 核心和/或处理器的数量 32位与64位CPU CPU缓存线大小 一级、二级、三级缓存的大小 设置缓存的关联性 TLB的大小 CPU上的确切品牌/型号信息 金融稳定委员会资料 内存量 交换/虚

我正在编写一个Java小程序,以便在不同的硬件下以不同的方式运行。例如,如果我知道一台计算机有大量的RAM,但处理器很弱,我可以改变一些时间-内存权衡的平衡。能够发现运行小程序的CPU的确切品牌和型号可能会有所帮助。拥有这些信息将使我能够针对不同的系统对软件进行基准测试,并找到瓶颈

一般来说,我想要的是:

  • 核心和/或处理器的数量
  • 32位与64位CPU
  • CPU缓存线大小
  • 一级、二级、三级缓存的大小
  • 设置缓存的关联性
  • TLB的大小
  • CPU上的确切品牌/型号信息
  • 金融稳定委员会资料
  • 内存量
  • 交换/虚拟内存量
  • 运行小程序的JVM
  • 运行JVM的操作系统
  • 系统负载
  • 已使用/未使用的内核线程数
  • 因特网连接带宽
  • 可用内存
  • 使用中的图形卡
  • 如果操作系统正在可视化
  • 使用中的网络资源
将这些信息烘焙到Java小程序中。有图书馆可以找到这些信息吗?小程序基准测试工具,以发现/猜测其中一些?你能想出什么妙招吗

他们的计算机硬件的任何方面都是阻塞的。也就是说,Java小程序是否可以通过尝试访问某个对象并被拒绝(可能是特定的TCP端口或图形加速器)来检测该对象是否正在使用或不可用

免责声明:我知道关心硬件与不关心硬件的Java思想背道而驰。虽然评论指出这可能对其他看到这个问题的读者有所帮助,但请注意这些答案并不是我想要的

编辑

补充补充资料:

java.lang.提供了运行JVM的系统的各种信息

java.lang.management。提供:

  • 可用处理器的数量相等
  • 系统上的平均负载为最后一分钟的系统平均负载
  • java.lang.management。

  • 返回GarageCollectorMXBeans的列表。可以查询每个数据库以获取以下信息:

  • 使用此命令发生的gc数 豆子
  • 经过的大致累计时间 在gc之间,以毫秒为单位。(注: Java虚拟机 实现可能会使用一个高 分辨率计时器,用于测量 经过的时间。)
  • 内存管理器的名称
  • 此gc管理的内存池
  • 返回提供以下内容的:

  • 返回当前线程的总CPU时间(纳秒)。如果实现区分用户模式时间和系统模式时间,则返回的CPU时间是当前线程在用户模式或系统模式下执行的时间量
  • 返回
  • Java虚拟机的正常运行时间(毫秒)
  • Java虚拟机的启动时间(毫秒)
  • 返回传递给Java虚拟机的输入参数,该虚拟机不包括主方法的参数
  • 返回
  • JIT的名称
  • 编译代码所用的时间(毫秒)

  • 通过(或)方法获取的信息非常简单

    例如,
    os.name
    将返回操作系统的名称。在我的系统上,我得到的结果是
    windowsxp

    小程序似乎可以访问的一些可用信息包括:

    • java.vm.version
      ——JVM的版本
    • java.vm.vendor
      ——JVM的供应商名称
    • java.vm.name
      ——JVM的名称
    • os.name
      ——操作系统的名称。(例如
      Windows XP
    • os.arch
      ——系统架构。(例如,
      x86
    • os.version
      ——操作系统的版本。(例如
      5.1
    • java.specification.version
      ——JRE规范版本
    以上不是一个全面的列表,但它可以提供一些关于系统是什么样的想法

    需要注意的是,并非所有通过
    系统可用的属性。getProperties
    都可以读取,对于某些属性,安全管理器将导致
    AccessControlException
    。当我试图读取
    java.home
    属性时,抛出了一个异常

    要获取默认情况下导致访问控制异常的属性,可能需要采取步骤授予小程序执行某些信息的权限。(此处是指向“发件人”部分的链接。)

    运行时
    类可以提供以下信息:

    • 通过该方法可供JVM使用的处理器(或内核,或逻辑线程)的数量
    • Java虚拟机的内存信息,如,和
    除了默认的
    系统
    运行时
    提供的信息之外,类可能需要调用操作系统,这取决于平台

    编辑

    来自的页面提供了可读取的属性列表和小程序无法读取的属性列表。

    以下是更多内容:

    可能能够告诉屏幕分辨率,甚至可能更多关于图形卡的信息(从使用的颜色模型)

    您还可以分配一些更大的字节数组,并测量对数据的访问时间