Использование памяти алгоритма в Scala

#scala #memory

#scala #память

Вопрос:

Я использую Scala, и мне нужно отслеживать память, используемую алгоритмом, выполняемым в моем приложении (модель Spark MLlib). Если я использую Java Runtime class ( runtime.totalMemory() - runtime.freeMemory() ), я получаю память, используемую всем приложением в JVM, в то время как меня интересует только память, используемая при вызове model.fit(data) . Я также знаю VisualVM, но не понимаю, есть ли программный способ получить эту информацию с помощью кода в моем приложении. Есть предложения?

Ответ №1:

Вы можете использовать JAMM, который требует запуска с агентом Java, а также извлечения зависимости. Обратите внимание, что фактический размер объектов во время выполнения несколько зависит от конкретной виртуальной машины Java, на которой вы работаете (и может даже варьироваться в зависимости от параметров виртуальной машины: например, в зависимости от того, сжала ли 64-разрядная виртуальная машина OpenJDK OOPs, ссылка на другой объект может занимать 4 или 8 байт), вот почему только агент Java может измерить использование памяти произвольного графа объектов.