アプリケーションに PermSize および OldGen スペース用の十分なスペースがある場合、OutOfMemoryErrors が発生する可能性はありますか?
質問する
82 次
2 に答える
1
はい。あなたのコードベースの誰かがそれをスローするか、Sun ... er Oracle ;) がスローする可能性があります。たとえば、ByteArrayOutputStream の次のコードを見てください。
/**
* Increases the capacity to ensure that it can hold at least the
* number of elements specified by the minimum capacity argument.
*
* @param minCapacity the desired minimum capacity
*/
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = buf.length;
int newCapacity = oldCapacity << 1;
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity < 0) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
newCapacity = Integer.MAX_VALUE;
}
buf = Arrays.copyOf(buf, newCapacity);
}
http://www.docjar.com/html/api/java/io/ByteArrayOutputStream.java.html
于 2012-11-02T15:05:06.293 に答える
1
Perm Gen と Old Gen に加えて、JVM は非ヒープ メモリを使用する場合があります (たとえば、ダイレクト メモリ バッファ用)。非ヒープ メモリの量は、-XX:MaxDirectMemorySize
オプションによって制限されます。それを超えると OutOfMemoryError がスローされます。
于 2012-11-03T07:46:52.250 に答える