0

これは少し複雑な問題であり、私が提供できる情報はほとんどないため、我慢するか無視してください。

私は小さな Swing/JOGL プログラムを開発しており、ユーザーの JVM セットアップを簡素化できるように、プログラム内に Java ランタイムを含めようとしています。私のプログラムは、パッケージ化された java.exe を呼び出すバッチ ファイルから実行されており、それが私の jar ファイルを実行します。

プログラムは数時間正常に実行され、その時点で「Microsoft Visual C++ ランタイム ライブラリ」エラーで終了します。

   Runtime Error!
   Program: \<path>\java.exe

   abnormal program termination

私の質問は次のとおりです。

  1. JRE をフォルダーとしてプログラムに含めることは、プログラムを実行するための安定した一貫性のある JVM を保証するという、問題に対する「正しい」解決策ですか? ユーザーに最初に Java をインストールさせた方がよいでしょうか?

  2. 自分のプラットフォーム用の jre ビルドの bin フォルダーを単に含めるだけで、何らかの構成の問題に直面していますか? java.exe の実行時にコマンド ライン オプションを使用する以外に、構成情報を保存する方法はありますか?

  3. C++ エラー メッセージと異常なプロセス終了エラーが発生する条件のおかげで、それは私の JOGL ライブラリに関係していると推測しますが、プログラムは APT まで完全に正常に動作し、まったく同じものを使用すると、オンライン インストーラーを使用して Java のバージョンを変更すると、プログラムはエラーなしで完全に正常に動作します。

  4. これはもっと基本的なことでしょうか?JREインストールのbinフォルダーを使用しているだけなので、ガベージコレクションが正しくないか、GC構成が正しく設定されていない可能性はありますか?

4

1 に答える 1

4

一晩かかることを考えると、最も可能性の高い原因は、メモリリークか、ビデオドライバに問題があることです。

ビデオドライバーとDirectXが最新であることを確認します。Microsoftの自動更新だけでは不十分です。ビデオドライバについてはベンダーのサイトを、 DirectXについてはMicrosoftのサイトを確認する必要があります。

それでも解決しない場合は、メモリリークの可能性があります。

アプリケーションを起動します。
VisualVmを起動します。jdb/binディレクトリに.という名前でありjvisualvm.exeます。
注:これらは同じユーザーとして実行されている必要があります

アプリケーションは、Localアプリケーションの下のブランチの下に表示されます。
右クリックしてを選択しますEnable Heap Dump on OOME
右クリックしてを選択しますOpen
次に、[モニター]タブを調べます。

アプリが実行されると、ヒープとスレッドは安定し、タスクが処理されてGCが実行されるときに、周期的な鋸歯状のほぼ直線として表示されます。

ただし、これらの線のいずれかが上昇傾向にある場合は、問題があります。

より詳細に調べることができるヒープおよびスレッドダンプを取得するためのコントロールもあります。

于 2010-03-31T17:03:53.483 に答える