Javaアプレットが検出できるハードウェアの詳細はいくつですか?
-
06-07-2019 - |
質問
異なるハードウェアで異なる動作をするJavaアプレットを書いています。たとえば、コンピューターに大量のRAMがあり、プロセッサーが弱いことがわかっている場合、時間とメモリーのトレードオフのバランスを変更できます。アプレットが実行されているCPUの正確なメーカーとモデルを発見できると便利です。このような情報があれば、ソフトウェアをさまざまなシステムに対してベンチマークし、ボトルネックを見つけることができます。
一般的に私が探しているのは:
- コアおよび/またはプロセッサの数
- 32ビットと64ビットCPU
- CPUキャッシュの行サイズ
- L1、L2、L3キャッシュのサイズ
- キャッシュの結合性を設定
- TLBのサイズ
- CPUの正確なメーカー/モデル情報
- FSB情報
- RAMの量
- スワップ/仮想メモリの量
- アプレットが実行されているJVM
- JVMを実行しているオペレーティングシステム
- システム負荷
- 使用済み/未使用のKernalスレッドの数
- インターネット接続の帯域幅
- 使用可能なメモリ
- 使用中のグラフィックカード
- オペレーティングシステムが視覚化されている場合
- 使用中のネットワークリソース
これらの情報は、Javaアプレットに焼き付けられています。この情報を見つけるためのライブラリはありますか?アプレットのベンチマークツールは、その一部を発見/推測しますか?あなたが考えることができる巧妙なトリックはありますか?
ブロックしているコンピューターハードウェアの側面はありますか。つまり、Javaアプレットは、アクセスしようとして拒否される(特定のTCPポートまたはグラフィックアクセラレータである可能性がある)ことにより、何かが使用中または使用不可であることを検出できます。
免責事項:ハードウェアを気にかけることは、ハードウェアを気にしないというJavaのイデオロギーに反することを知っています。これを指摘するコメントは、この質問を読んでいる他の読者には役立つかもしれませんが、そのような答えは私が探しているものではないことに注意してください。
編集
追加情報を追加:
java.lang。管理 は、JVMが実行されているシステムに関するあらゆる種類の情報を提供します。
java.lang.management。 OperatingSystemMXBean は以下を提供します。
- getAvailableProcessors() 利用可能なプロセッサーの数 Runtime.availableProcessors()
- getSystemLoadAverage() システムの平均負荷、最後の1分間のシステム負荷の平均。
java.lang.management。 ManagementFactory
-
getGarbageCollectorMXBeans () は、GarbageCollectorMXBeanのリストを返します。各 GarbageCollectorMXBean を照会できます次の情報:
- getCollectionCount() 発生したgcの数
解決
入手が非常に簡単なのは、 System.getProperties
(または System.getProperty
)メソッド。
たとえば、 os.name
はオペレーティングシステムの名前を返します。私のシステムでは、結果として Windows XP
を取得しました。
< code> 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
を引き起こすこれらのプロパティを取得するには、これらの情報の一部を実行するためにアプレットに許可を与えるための手順が必要になるでしょう。 (セキュリティ制限セクションへのリンクです。
Runtime
クラスは、次のような情報を提供できます。
-
Runtime.availableProcessors
メソッド。 -
freeMemory
、maxMemory
、およびtotalMemory
。
デフォルトの System
および Runtime
クラスが提供する情報を超えると、おそらくプラットフォームに依存するオペレーティングシステムを呼び出す必要があります。
編集
システムプロパティの取得ページ< a href = "http://java.sun.com/docs/books/tutorial/deployment/applet/index.html" rel = "nofollow noreferrer">
他のヒント
さらにいくつかあります:
java.awt.Toolkit 画面の解像度やグラフィックカードに関する詳細(使用されているカラーモデルから)を伝えることができる場合があります。
より大きなバイト配列を割り当ててアクセス時間を測定し、キャッシュに関するおおよその情報を取得することもできます(過去にこれで遊んで、メモリキャッシュトリックがJavaで動作するかどうかを確認しました;動作します)。ただし、これらのテストではアプレットがしばらくハングする可能性があるため、実行していることをユーザーに通知する必要があります。
モデリングを行うアプレットは、経過したリアルタイムに対する経過した仮想時間の比率を測定できます。遅いシステムを検出した後、アプレットは統合ステップと同様の定数を増やして、CPU時間が少なくて済みますが、出力は完全ではありません。 こちらがあります鳥の群れの動作のシミュレーションでステップ速度を調整するこのような自己調整コードの例。
getNetworkInterfaces を使用すると、システム内のネットワークインターフェイスを列挙できます。
http://www.browserleaks.com/java
ネットワークアダプタ名や接続名などの重要な情報が表示される場合があります。