0
i am calling java code in c++ using jni ,i alloted 60GB as max heap memory ,but while running its using less memory because of that its taking much time .

私はwindows7 OS、VS2008を使用しています。

コンソールを使用してJavaを実行するのと同じことです。割り当てられたメモリを使用しています。すばやく実行できますか?

更新された説明:

次の 2 つの方法で試した、メモリ集約型の Java アプリケーションがあります。

1. JNI を使用した C++ アプリケーションから。

2.コマンドプロンプトから直接実行。

どちらの場合も、jvm に 60GB のヒープ メモリ サイズを割り当てました。上記の 2 つの実行方法には、次の違いがあることがわかりました。

1. JNI を使用する c++ アプリケーションは、最大 40GB のメモリに達します (実行が遅い)。

2.コマンドプロンプトから実行すると、約60GBのメモリに達します。(高速実行)

メモリ使用量の違いの理由は何ですか??.

jVM の初期化:

JavaVMInitArgs vm_args;
 JavaVMOption options[3];

 options[0].optionString = "-Djava.class.path=c:\\Application\\bin-7.0\\morpher\\app.jar;";
 options[1].optionString = "-Xms1024m";
 options[2].optionString = "-Xmx50000m";

 vm_args.version = JNI_VERSION_1_6;
 vm_args.nOptions = 3;
 vm_args.options = options;
 vm_args.ignoreUnrecognized = 0;
 JNI_GetDefaultJavaVMInitArgs(&vm_args);
 int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args);
4

1 に答える 1

1

あなたの質問にそのままの形で答えることは不可能ですが、私はあなたにそれを伝えることができます.

  • 毎秒 400 MB 以上の非常に小さなオブジェクトのヒープを非常に高速に割り当てることができます。大きなオブジェクトの場合ははるかに高速です。
  • eden のサイズを大きくすると、トリガーされる GC の数が減るため、オブジェクトを割り当てる速度が速くなることがあります。
  • 速度を落としている可能性が高いのは、ヒープ コレクションです。ByteBuffers とメモリ マップ ファイルを使用して大量のデータをネイティブ メモリに配置することで、eden サイズを増やすと同時にヒープを減らすことをお勧めします。
  • 500 GB のメモリ マップ ファイルを数秒以内に添付できます。
  • 数百または数百万のオブジェクトを作成している場合は、行ベースのテーブルではなく列ベースのテーブルを使用するなど、オブジェクトの数を減らすために設計を再検討する価値があります。(数十の列しかないかもしれませんが、数百万の行と数十の配列を作成する方が、数百万のオブジェクトを作成するよりも高速です)
于 2012-12-11T08:44:32.457 に答える