【发布时间】:2010-11-03 21:47:09
【问题描述】:
我正在编写一个 Java 小程序以在不同的硬件下以不同的方式运行。例如,如果我知道一台计算机有大量 RAM 但处理器较弱,我可以改变一些时间-内存权衡的平衡。能够发现运行小程序的 CPU 的确切品牌和型号可能会有所帮助。有了这些信息,我就可以针对不同的系统对我的软件进行基准测试并找到瓶颈。
一般我要找的是:
- 内核和/或处理器的数量
- 32 位与 64 位 CPU
- CPU 缓存行大小
- L1、L2、L3 缓存大小
- 设置缓存的关联性
- TLB 大小
- CPU 上的确切品牌/型号信息
- FSB 信息
- 内存量
- 交换/虚拟内存量
- 运行小程序的 JVM
- 运行 JVM 的操作系统
- 系统负载
- 已使用/未使用的内核线程数
- 互联网连接带宽
- 可用内存
- 正在使用的显卡
- 如果操作系统正在可视化
- 正在使用的网络资源
这些信息中是否有任何信息被嵌入到 Java Applet 中。是否有图书馆可以找到这些信息? Applet 基准测试工具来发现/猜测其中的一些?你能想到什么妙招?
是他们阻碍的计算机硬件的任何方面。也就是说,Java 小程序是否可以通过尝试访问它并被拒绝(可能是特定的 TCP 端口或图形加速器)来检测某些东西正在使用或不可用。
免责声明:我知道关心硬件与不关心硬件的 Java 意识形态背道而驰。虽然 cmets 指出这一点可能对看到此问题的其他读者有所帮助,但请注意,这些答案不是我想要的。
编辑
添加了附加信息:
java.lang.management 提供有关运行 JVM 的系统的各种信息。
java.lang.management.OperatingSystemMXBean 提供:
- getAvailableProcessors() 等效的可用处理器数量Runtime.availableProcessors()
- getSystemLoadAverage() 系统上的平均负载是最后一分钟的系统负载平均值。
java.lang.management.ManagementFactory
-
getGarbageCollectorMXBeans() 返回GarbageCollectorMXBean 列表。每个GarbageCollectorMXBean都可以查询到以下信息:
- getCollectionCount() 使用此发生的 gc 数量 豆子。
- getCollectionTime() 近似累计时间经过 以毫秒为单位的 gc 之间。 (笔记: Java 虚拟机 实施可以使用高 分辨率定时器来测量 经过的时间。)
- getName() 内存管理器的名称。
- getMemoryPoolNames() 此 gc 管理的内存池。
-
getThreadMXBean() 返回ThreadMXBean,它提供:
- getCurrentThreadCpuTime() 返回当前线程的总 CPU 时间(以纳秒为单位)。如果实现区分用户模式时间和系统模式时间,则返回的 CPU 时间是当前线程在用户模式或系统模式下执行的时间量。
-
getRuntimeMXBean 返回RuntimeMXBean
- getUptime() Java 虚拟机的正常运行时间(以毫秒为单位)。
- getStartTime() Java 虚拟机的启动时间,以毫秒为单位。
- getInputArguments() 返回传递给 Java 虚拟机的输入参数,其中不包括 main 方法的参数。
-
getCompilationMXBean 返回CompilationMXBean
- getName() JIT 的名称
- getTotalCompilationTime() 编译代码所需的时间(以毫秒为单位)。
【问题讨论】:
标签: java operating-system benchmarking