有多少硬件细节可以一个Java小程序发现?(How many hardware details ca

2019-06-23 13:05发布

我正在写一个Java小程序到不同的硬件下运行不同。 举例来说,如果我知道一台计算机有大量的RAM,但微弱的处理器,我可以改变一段时间内存权衡的平衡。 能够发现在其上运行applet可帮助CPU的确切品牌和型号。 有了这样的信息,让我到基准我针对不同的系统软件,并找到瓶颈。

一般来说就是我要找的是:

  • 核心和/或处理器数量
  • 32位和64位CPU
  • CPU缓存行大小
  • L1,L2,L3高速缓存的大小
  • 缓存的设置关联
  • TLB的大小
  • 确切让不同的CPU /型号信息
  • FSB信息
  • RAM容量
  • 交换/虚拟存储器的量
  • 其中小程序正在运行的JVM
  • 操作系统上运行的JVM
  • 系统负载
  • 二手/闲置籽粒线程数
  • 互联网连接的带宽
  • 可用内存
  • 在使用显卡
  • 如果操作系统正在显现
  • 在使用网络资源

任何的烤成Java Applets的信息。 是否有发现任何的信息库? 小程序基准测试工具来发现/猜出一些呢? 任何聪明的技巧,你能想到的?

是他们被阻止计算机硬件的任何方面。 也就是说,可能的Java小程序检测到一些正在使用或不可用,试图访问它和被拒绝(可能是特定的TCP端口或图形加速器)。

免责声明:我知道,我们在乎的硬件违背不关心硬件的Java的思想。 虽然评论指出这一点可能对于看这个问题的其他读者有帮助,请注意,这样的答案是不是我所期待的。

编辑

添加了更多的信息:

java.lang中。 管理提供了在JVM上运行的系统上的各种信息。

java.lang.management。 OperatingSystemMXBean规定:

  1. getAvailableProcessors()可用的处理器当量数Runtime.availableProcessors()
  2. getSystemLoadAverage()系统中的系统负载平均为最后一分钟上的平均负载。

java.lang.management。 ManagementFactory

  1. getGarbageCollectorMXBeans()返回一个列表ofGarbageCollectorMXBeans。 每个GarbageCollectorMXBean可以查询以下信息:

    1. getCollectionCount() GC的数目已使用此豆发生。
    2. getCollectionTime()近似毫秒气相色谱仪之间经过累计时间。 (注:Java虚拟机实现可能使用高分辨率定时器,以测量经过的时间。)
    3. 的getName()的内存管理器的名称。
    4. getMemoryPoolNames()的内存池,这个GC管理。
  2. getThreadMXBean()返回ThreadMXBean的 ,其提供:

    1. getCurrentThreadCpuTime()返回总CPU时间在纳秒当前线程。 如果实现用户模式时间和系统模式时间区分,返回的CPU时间是当前线程在用户模式或系统模式中执行的时间量。
  3. getRuntimeMXBean返回RuntimeMXBean
    1. getUptime()以毫秒为单位的Java虚拟机的正常运行时间。
    2. getStartTime()启动Java虚拟机的时间(ms)。
    3. getInputArguments()返回传递给其中不包括的参数与主方法的Java虚拟机中的输入参数。
  4. getCompilationMXBean返回CompilationMXBean
    1. 的getName()的JIT的名字
    2. getTotalCompilationTime()以毫秒为单位花费的时间编译代码。

Answer 1:

这是非常简单的,以获得的那些是通过访问的信息System.getProperties (或System.getProperty )方法。

例如, os.name将返回操作系统的名称。 在我的系统,我得到了Windows XP的结果。

通过提供一些信息System.getProperties ,这似乎是由小应用程序可以访问包括:

  • 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默认情况下,人们可能将不得不给的权限采取小程序来执行其中的一些信息的步骤。 (这里是一个链接到安全限制一节的课:小应用程序从Java教程 。)

Runtime类可以提供的信息,例如:

  • 处理器数量(或核,或逻辑线程,大概)可用于由该JVM Runtime.availableProcessors方法。
  • Java虚拟机内存中的信息,诸如freeMemorymaxMemorytotalMemory

除了由默认提供的信息SystemRuntime类可能会需要做操作系统,这将是依赖于平台的调用。

编辑

在获取系统属性从页面课:小程序的Java教程提供属性的列表可以读取,而不能由小程序读取属性的列表。



Answer 2:

这里有一些更多:

java.awt.Toolkit中也许能够告诉屏幕分辨率,甚至更多的东西有关图形卡(从使用的颜色模型)。

您还可以分配的字节一些较大的阵列和测量访问时间,以获取有关高速缓存的大致信息(在过去,我们与此发挥到检查内存缓存的技巧与Java在所有的工作,他们这样做)。 然而所以你需要告知你正在做的用户这些测试可能会挂起你的小应用程序一段时间。

小程序做造型可以测量通过虚拟时间在通过实时的比率。 检测慢行系统后,小程序可以增加积分步和类似常量需要较少的CPU时间,即使是不完美的输出为代价。 这里有一种调整所述步进速度在鸟群行为的模拟这种自调谐码的例子。



Answer 3:

通过getNetworkInterfaces你可以在你的系统枚举网络接口:

http://www.browserleaks.com/java

它可能会显示一个显著的信息,如网络适配器名称和连接名称。



文章来源: How many hardware details can a Java Applet Discover?