Что я должен настроить в своем приложении Java, чтобы оно перестало падать? - PullRequest
0 голосов
/ 21 января 2019

вне зависимости от того, сколько памяти я выделяю 4, 8 или 10 гигабайт, мое приложение имеет паттерн потребления большей части памяти - 96% - и каждые несколько дней останавливается, так как ему не хватает памяти для GC.

Мы отслеживаем и запускаем ручные GC, чтобы облегчить боль, но я ожидаю, что JVM предвидит это и GC в свое время.

Какие флаги мне следует рассмотреть, чтобы вызвать GC, скажем, на 80% - и правильный ли этот откровенный подход?

1 Ответ

0 голосов
/ 21 января 2019

Сначала проверьте, есть ли у вас:

StackOverFlowErrorсвязан со стеком:

Выдается при переполнении стека из-за слишком глубокого повторения приложения.

OutOfMemoryError связан с кучей:

Брошенный, когда виртуальная машина Java не может выделить объект, потому что ему не хватает памяти, и сборщик мусора больше не мог сделать доступной память.

Если у вас есть StackOverFlowError, возможно, у вас есть проблема, связанная с не завершающейся рекурсией.Поэтому проверьте свои условия выхода, чтобы убедиться, что у вас есть правильные условия выхода.Другая возможность состоит в том, чтобы два (или более) метода вызывали друг друга.

Если у вас есть ошибка OutOfMemoryError, вы, вероятно, храните много объектов в своей памяти.Это происходит, например, если вы храните объекты на карте (например, используя карту в качестве системы кэш-памяти), не удаляя их.

...