Что означает org.hibernate.hql.internal.ast.tree.Node в дампе кучи jmap
У меня есть приложение весенней загрузки, которое использует данные весны. У меня есть собственные запросы и методы запросов. Видимо я сталкиваюсь с проблемой памяти из моего приложения. Я попытался сделать jmap -histo, чтобы определить класс, который использует много ресурсов.
На моем первом jmap-дампе это результат (первый день)
Тогда на второй день это результат
Обратите внимание, что org.hibernate.hql.internal.ast.tree.Node начинает появляться.
Потом на третий день
Размер org.hibernate.hql.internal.ast.tree.Node увеличивается.
Надеюсь, что вы можете мне помочь, или любое предложение? Я не опубликовал код, так как не выделил тот, который вызвал это. Кстати, ночью никаких операций не происходит, поэтому я ожидаю, что сбор мусора должен быть запущен.
0 ответов
Я тоже столкнулся с той же проблемой. Следующая конфигурация может помочь.
spring:
jpa:
properties:
hibernate:
query:
plan_cache_max_size: 64
plan_parameter_metadata_max_size: 32
Я не могу ответить, что было причиной этого. Однако обновление версии Spring Boot (которая, в свою очередь, обновляла версию Hibernate) до 2.2.1.RELEASE, похоже, решило эти проблемы для меня.
По-видимому, hibernate кэширует все свои запросы, поэтому hibernate не будет перекомпилировать подготовленный оператор, однако, если у вас есть динамический запрос, это приведет к переполнению памяти.
Пример:
Подготовленное заявление
Select * from employee where id = :id
-> это нормально, поскольку спящий режим просто кэширует подготовленный оператор, но если вы сделаете что-то вроде этого
select * from employee where id = 1
select * from employee where id = 2
select * from employee where id = 3
-> Hibernate будет кэшировать этот 3 оператор, следовательно, переполнение памяти.