我正在编写一个Java applet,以便在不同的硬件下以不同的方式运行。例如,如果我知道计算机有大量的RAM但是处理器很弱,我可以改变一些时间内存权衡的平衡。能够发现运行applet的CPU的确切品牌和型号可能会有所帮助。拥有这些信息将使我能够针对不同的系统对我的软件进行基准测试,并找到瓶颈。
一般来说,我正在寻找的是:
是否有任何此类信息都嵌入到Java Applet中。是否有用于查找此类信息的库? Applet基准测试工具可以发现/猜测其中一些?你能想到的任何巧妙的技巧吗?
他们的计算机硬件的任何方面都是阻塞的。也就是说,Java applet可以通过尝试访问它并被拒绝(可能是特定的TCP端口或图形加速器)来检测某些内容正在使用或不可用。
免责声明:我知道关心硬件违背了不关心硬件的Java意识形态。虽然评论指出这可能对其他看到此问题的读者有所帮助,但请注意,这些答案并不是我想要的。
修改
添加了其他信息:
java.lang。management 提供有关运行JVM的系统的各种信息。
java.lang.management。OperatingSystemMXBean 提供:
java.lang.management。ManagementFactory
getGarbageCollectorMXBeans() 会返回GarbageCollectorMXBeans列表。可以查询每个GarbageCollectorMXBean以获取以下信息:
getThreadMXBean() 会返回提供的ThreadMXBean:
答案 0 :(得分: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提供权限以执行其中一些信息。 (以下是指向Security Restrictions Lesson: Applets的The Java Tutorials部分的链接。)
Runtime
类可以提供以下信息:
Runtime.availableProcessors
方法为JVM提供的处理器(或核心或逻辑线程)的数量。freeMemory
,maxMemory
和totalMemory
。除了默认的System
和Runtime
类提供的信息之外,可能还需要调用操作系统,这与平台有关。
修改强>
来自Getting System Properties的Lesson: Applets的The Java Tutorials页面提供了可以读取的属性列表,以及applet无法读取的属性列表。
答案 1 :(得分:1)
以下是其他内容:
java.awt.Toolkit或许可以告诉屏幕分辨率甚至更多关于显卡的信息(来自使用的颜色模型)。
你还可以分配一些更大的字节数组并测量访问时间,以获得有关缓存的近似信息(过去我们使用它来检查内存缓存技巧是否与Java一起工作;他们这样做)。但是,这些测试可能会暂停您的applet一段时间,因此您需要通知用户您正在做的事情。
进行建模的小程序可以测量传递的实时虚拟时间的比率。在检测到慢速系统之后,小程序可以增加集成步骤和类似的常量,从而需要更少的CPU时间,即使以不太完美的输出为代价。 Here有一个这样的自调整代码示例,用于调整鸟群行为模拟中的步速。
答案 2 :(得分:1)