2

アプリケーションに PermSize および OldGen スペース用の十分なスペースがある場合、OutOfMemoryErrors が発生する可能性はありますか?

4

2 に答える 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 に答える