1

私はJavaでロールプレイングゲームを書いています。人間のプレイヤーはコンピューターと対戦するため、プレイヤーとコンピューターはそれぞれ制御するヒーローとモンスターのセットを持っています。私は、ターゲット取得、パス検索、スキル、精度、および健康のための一連のパス検索およびその他のアルゴリズムを実装しました。問題は、異なるキャラクターのアルゴリズムを同時に実行すると、ゲームが使用可能なすべてのメモリをすぐに消費し、Java ヒープ スペース エラーが発生することです。これで、次のスクリプト (java -Xmx1g Program) を使用してコードを実行し、Java ヒープの量を増やすことができますが、ゲームで使用できるメモリの量がわからず、量を誤って計算すると、コードで同じエラーが発生し、ハングします。私の質問は:実行時に使用可能なメモリの量を計算する方法はありますか? また、Java では実行時にヒープ領域を増やすことができないことも知っています。私の問題に対する他の解決策はありますか?

注:SOに関する次の質問を読みましたが、解決策が見つかりませんでした:

Java でヒープ サイズを増やす

java.lang.OutOfMemoryError: Java ヒープ領域

動的に増加する Java ヒープ領域

4

3 に答える 3

2

実行時に空き容量を確認できます。

Runtime.getRuntime().freeMemory();

しかし、それを増やすことはできません。

于 2013-08-09T16:01:15.627 に答える
0
Runtime.getRuntime().freeMemory();

jvm で利用可能な空きメモリを提供します。

これまでにアプリがどれだけ使用されたかを確認するには、次のことができます-

Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

動的に増やすことはできません。できたとしても、クライアントのマシンで他にどのようなプロセスが実行されているかがわからないため、お勧めできません。これは、恐ろしいほど遅い経験になります。

目標は、対象ユーザーを考慮して、ゲーム アプリが使用できる適切なメモリ量を見つけることです。モバイルゲーム開発の観点から言えます。ミッドレンジのデバイスをサポートしたい場合、ゲームは Android デバイスで 20MB を超えてはなりません。

アプリの任意のセクションを最適化できるかどうかを確認するために、いつでもメモリ プロファイリングを実行できます。

于 2013-08-09T16:16:34.370 に答える