Это может быть как-то связано с тем, что ваше пространство в раю слишком мало. Пространство eden - это часть кучи, где новые объекты размещаются и остаются до тех пор, пока они не пережили GC.
Пространство рая не очень большое. (у меня нет значения по умолчанию, но при настройке по умолчанию с кучей 1 ГБ это всего 64 МБ)
Ваш файл, вероятно, будет загружен в пространство eden. Либо нет 200 МБ свободного места, либо байтовый массив выделен небольшому количеству и нуждается в увеличении. Единственный способ для массива расти в Java - это выделить новый и больший массив и сделать memcopy. Это приведет к росту от 100 МБ до 200 МБ, очевидно, что потребуется 300 МБ общего пространства кучи eden.
Вы можете попробовать установить -XX:NewSize=4196M
, который выделит 4 ГБ пространства кучи eden.
Я должен сказать, что я не знаю, что Tomcat работает в каком-либо серверном режиме, который использует другую стратегию GC / heap.
Вы можете использовать visualgc
из jvmstat 3.0 (не дистрибутив в комплекте с Java 5 и 6) для мониторинга кучи и определения того, какое пространство кучи заполнено.
Вы также можете проверить: Настройка сборки мусора с помощью виртуальной машины Java [tm] 5.0 *
Если вы решите эту проблему, вы все равно столкнетесь с низкой производительностью и не масштабируемым решением. Вы, вероятно, будете лучше с какой-то прямой потоковой передачей. Это не должно быть трудно реализовать простой сервлет для этой цели.