2016-11-30 6 views
1

У меня проблема с моим приложением. Когда я пытаюсь открыть страницу, приложение вызывает ошибку java.lang.OutOfMemoryError: Java heap space.Анализатор памяти Eclipse: java.lang.OutOfMemoryError: Java heap space

Мы используем Struts2 в качестве фреймворка, Tomcat 6 в качестве сервера и Openejb для подключения к базе данных.

Я попытался выяснить, почему он не хватает памяти с расширителем памяти Eclipse, но я должен сказать, что это непросто понять.

Вот отчет о анализаторе памяти:

Top consumers Description Shortest Paths to the accumulation point Accumulated Objects in dominator tree

Я не совсем уверен, о том, что поднять эту ошибку, но возможно, что подключение базы данных не закрыты и то карта, содержащая это соединение, становится большой для JVM.

Я решаю проблему, предоставляя больше пространства памяти для JVM, но я не уверен, что это хороший способ решить эту проблему.

Может ли кто-нибудь мне помочь?

Благодаря

+0

Часто бывает легче видеть, как все меняется. Рассмотрите возможность подключения visualvm к экземпляру tomcat, чтобы узнать, что происходит, когда ваше приложение выполняет фактическую работу. –

+0

Эта тема может быть полезна: http://stackoverflow.com/questions/29590527/how-to-analyze-mat-with-eclipse – Berger

ответ

0

Согласно снимкам, ваша проблема исходит от поля resourceEntries из WebappClassLoader, который в соответствии с Javadoc:

The cache of ResourceEntry for classes and resources we have loaded, keyed by resource name.

Другими словами, это кэш, который будет хранить все метаинформацию всех файлов и классов ресурсов, загружаемых через ClassLoader вашего веб-приложения, чтобы избежать сканирования всего пути к классам при каждом вызове, поскольку он потенциально очень медленный, особенно когда у вас много файлов jar.

Насколько я могу видеть из the source code, для меня не так много можно сделать, чтобы обойти его, кроме увеличения размера вашей кучи, как вы уже это делали.

+0

Итак, у меня нет решения для моей проблемы? Я не могу предотвратить кучу памяти JVM. Просто потому, что я пытаюсь загрузить много данных для памяти. –

Смежные вопросы