Утечка памяти при использовании JDK-компилятора во время выполнения

Я пытаюсь добавить javaeditor в мою программу, чтобы расширить программу во время выполнения. Все работает нормально, за исключением случаев интенсивного использования программы (я моделировал 1000-10000 выполнений компилятора). Использование памяти растет и растет, похоже, что есть утечка памяти.

В моей программе класс загружается, конструктор исполняется, а класс выгружается (нет оставшегося экземпляра, и classLoader становится недействительным, когда я устанавливаю указатель на ноль). Я проанализировал процесс с помощью JConsole, классы выгружаются при выполнении сборщика мусора.

Я сделал heapdum открыл его в анализаторе памяти, проблема, кажется, внутри java.net.FactoryURLClassLoader (в объекте com.sun.tools.javac.util.List). Поскольку (com.sun.tools.javac) является частью JDK, а не в JRE, а SystemToolClassLoader является объектом FactoryURLClassLoader, я бы где-нибудь там обнаружил утечку. Количество загруженных классов в SystemToolClassLoader возрастает с 1 до 521, когда я запускаю компилятор в первый раз, но после остается неизменным.

Таким образом, я понятия не имею, где утечка, есть ли способ сбросить SystemToolClassLoader? Как я мог найти утечку более точно.

РЕДАКТИРОВАТЬ: Хорошо, я узнал, что это также происходит в очень очень простом примере. Так что, похоже, это часть компиляции, я неt нужно загрузить класс или создать его экземпляр:

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;


public class Example {   

public static void main(String[] args)
{
    for (int i =0; i

Ответы на вопрос(5)

Ваш ответ на вопрос