6

2GB の物理メモリと 2GB のスワップを備えた Solaris 10 X86 で実行する Java プログラムがあります。

このプログラムは Linux 64 ビットで正常に動作し、約 450MB のメモリしか消費しません。

ただし、Solaris で実行すると、常に OutOfMemoryError が報告されます。エラーが発生する直前に、4 GB を超える仮想メモリを使用しようとしていたことがわかりました。これは 32 ビット システムでは絶対に不可能です。

では、なぜ JVM はそれほど多くの仮想メモリを使用しようとするのでしょうか? それほど多くの仮想メモリを使用しないように JVM に指示する方法はありますか?

ありがとうございました。

編集:

みんなの意見ありがとう!完全なエラー メッセージは次のとおりです。

#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 32756 bytes for ChunkPool::allocate
# Possible reasons:
#   The system is out of physical RAM or swap space
#   In 32 bit mode, the process size limit was hit
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Use 64 bit Java on a 64 bit OS
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
#  Out of Memory Error (allocation.cpp:211), pid=1052, tid=16
#
# JRE version: 6.0_26-b03
# Java VM: Java HotSpot(TM) Server VM (20.1-b02 mixed mode solaris-x86 )

---------------  T H R E A D  ---------------

Current thread (0x081a3400):  JavaThread "C2 CompilerThread1" daemon
4

2 に答える 2

3

この量のメモリを使用するパラメータを JVM に渡している可能性があります。

正確なエラーに応じて - ヒープ領域の問題ですか、それとも permgen 領域の問題ですか? - -Xms512m と -Xmx512m、または -XX:PermSize=128m と -XX:MaxPermSize=128m などのパラメーターを jvm に渡すと、システムの問題が解決する場合があります。

于 2012-08-19T09:47:25.617 に答える
2

jvm param-Xmx1gを設定して、使用量を最大 1 ギガバイトに制限してみてください。

于 2012-08-19T09:41:18.273 に答える