Max memory = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss]
здесь максимальная память кучи как -Xmx, минимальная память кучи как -Xms, стек памяти как -Xss и -XX maxPermSize
Следующий пример иллюстрирует эту ситуацию. Я запустил свой tomcat со следующими параметрами запуска:
-Xmx168m -Xms168m -XX:PermSize=32m -XX:MaxPermSize=32m -Xss1m
Оба ваших конструктора копирования для ObjectAllocator
создают новый экземпляр boost::pool
каждый раз, когда их вызывают.
Когда std::allocate_shared
копирует распределитель ( cppreference ), экземпляр ObjectAllocator
, использованный для выделения std::shared_ptr
, разрушается вместе с его пулом до уничтожения shared_ptr
.
Смежный вопрос: Проблемы с выделением памяти в C ++ с удалением выделения памяти
Возможно, это не связано с вашей проблемой, но есть и несколько других проблем:
thread1
в main
. Это вызовет std::terminate
и приведет к сбою вашей программы. boost::pool<> ObjectAllocator<T>::pool_(block_size);
- часть ObjectAllocator<T>::
является лишней и нестандартной. (afaik принимается только в MSVC)