Есть ли способ узнать, сколько памяти было запрошено
Не по предоставленной информации.Возможно, совсем нет.
и сколько памяти было доступно во время запроса?
Согласно журналу GC, это когда вы исчерпали память:
3429.458: [Full GC (Allocation Failure)
[PSYoungGen: 3495918K->3495908K(6990848K)]
[ParOldGen: 20969872K->20969870K(20971520K)]
24465790K->24465778K(27962368K),
[Metaspace: 56727K->56723K(1101824K)], 0.4597426 secs]
[Times: user=0.90 sys=0.01, real=0.46 secs]
В этой строке 24465790K->24465778K(27962368K)
указано, что:
- пробел, использованный до GC 24465790K
- пробел, использованный после GC 24465778K
- пробел кучипосле GC 27962368K
Похоже, что 3496590K свободен из 27962368K.
(Другие тройки могут быть прочитаны таким же образом ...)
ItПохоже, старое поколение полно.Я подозреваю, что сбой GC вызван тем, что GC не может владеть объектами из пространства eden из-за этого.Также обратите внимание, что ни молодому, ни старому поколению не удалось освободить много памяти, как и Full GC.
Таким образом, общий диагноз состоит в том, что ваша куча заполнена.По какой-то причине распределитель не смог поместить новый объект в пространство eden.Возможно, он больше, чем доступное свободное пространство в eden, или может быть больше, чем порог большого объекта.