我正在编写一个Java applet,在不同的硬件下运行不同.例如,如果我知道计算机有大量的RAM但是处理器很弱,我可以改变一些时间内存权衡的平衡.能够发现运行applet的CPU的确切品牌和型号可能会有所帮助.拥有这些信息将使我能够针对不同的系统对我的软件进行基准测试并找到瓶颈.
一般来说我正在寻找的是:
核心和/或处理器的数量
32位与64位CPU
CPU缓存行大小
L1,L2,L3缓存的大小
设置缓存的关联性
TLB的大小
关于CPU的精确制造/型号信息
FSB信息
RAM的数量
交换/虚拟内存量
正在运行applet的JVM
运行JVM的操作系统
系统负载
已使用/未使用的Kernal线程数
互联网连接的带宽
内存可用
显卡正在使用中
如果正在显示操作系统
正在使用的网络资源
是否有任何此类信息都嵌入到Java Applet中.是否有用于查找此类信息的库?Applet基准测试工具来发现/猜测其中的一些?你能想到任何聪明的技巧吗?
他们的计算机硬件的任何方面都是阻塞的.也就是说,Java applet可以通过尝试访问它并被拒绝(可能是特定的TCP端口或图形加速器)来检测某些内容正在使用或不可用.
免责声明:我知道关心硬件违背了不关心硬件的Java意识形态.虽然评论指出这可能对其他阅读此问题的读者有所帮助,但请注意,这些答案并非我所期待的.
编辑
添加了其他信息:
java.lang中.management提供有关运行JVM的系统的各种信息.
java.lang.management.OperatingSystemMXBean提供:
getAvailableProcessors()可用处理器的数量等效Runtime.availableProcessors()
getSystemLoadAverage()系统平均负载最后一分钟的系统负载平均值.
java.lang.management.ManagementFactory
getGarbageCollectorMXBeans()返回GarbageCollectorMXBeans列表.可以查询每个 GarbageCollectorMXBean以获取以下信息:
getCollectionCount()使用此bean发生的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()编译代码所用的时间(以毫秒为单位).
coobird.. 6
很容易获得的是通过System.getProperties
(或System.getProperty
)方法可访问的信息.
例如,os.name
将返回操作系统的名称.在我的系统上,我得到Windows XP
了结果.
一些System.getProperties
似乎可由applet访问的信息包括:
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规范版本.
以上不是一个全面的列表,但它可以提供一些关于系统是什么的想法.
应该注意的是,并非所有通过它可用的属性都System.getProperties
可以被读取,因为对于某些属性,安全管理器将导致AccessControlException
.当我尝试读取该java.home
属性时,抛出异常.
要获取导致AccessControlException
默认情况的属性,可能必须采取措施为applet提供权限以执行其中一些信息.(这里是一个链接到安全限制一节的课:小应用程序从Java教程.)
该Runtime
课程可以提供以下信息:
此Runtime.availableProcessors
方法可供JVM使用的处理器(或核心,或逻辑线程)数量.
Java虚拟机的内存信息,如freeMemory
,maxMemory
和totalMemory
.
除了默认System
和Runtime
类提供的信息之外,可能还需要调用操作系统,这与平台有关.
编辑
" 课程:Java教程的小程序"中的 " 获取系统属性"页面提供了可以读取的属性列表,以及小程序无法读取的属性列表.
很容易获得的是通过System.getProperties
(或System.getProperty
)方法可访问的信息.
例如,os.name
将返回操作系统的名称.在我的系统上,我得到Windows XP
了结果.
一些System.getProperties
似乎可由applet访问的信息包括:
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规范版本.
以上不是一个全面的列表,但它可以提供一些关于系统是什么的想法.
应该注意的是,并非所有通过它可用的属性都System.getProperties
可以被读取,因为对于某些属性,安全管理器将导致AccessControlException
.当我尝试读取该java.home
属性时,抛出异常.
要获取导致AccessControlException
默认情况的属性,可能必须采取措施为applet提供权限以执行其中一些信息.(这里是一个链接到安全限制一节的课:小应用程序从Java教程.)
该Runtime
课程可以提供以下信息:
此Runtime.availableProcessors
方法可供JVM使用的处理器(或核心,或逻辑线程)数量.
Java虚拟机的内存信息,如freeMemory
,maxMemory
和totalMemory
.
除了默认System
和Runtime
类提供的信息之外,可能还需要调用操作系统,这与平台有关.
编辑
" 课程:Java教程的小程序"中的 " 获取系统属性"页面提供了可以读取的属性列表,以及小程序无法读取的属性列表.