Как выгрузить стандартные библиотеки Java - PullRequest
2 голосов
/ 09 марта 2012

Можно ли выгрузить стандартные библиотеки Java - те, которые определены в пакетах java. *?

Мое приложение должно запускать тесты JUnit, каждый со своим собственным ClassLoader, например:

for(String testClass : testClasses) {
    CustomClassLoader cl = new CustomClassLoader(this.getClass().getClassLoader());
    Class<?> _class = cl.loadClass(testClass);
    JUnitCore junit = new JUnitCore();
    Result result = junit.run( _class );
    registerResult(result, cl);
}

Проблема, с которой я столкнулся, заключается в том, что некоторые классы не выгружаются - java. * Classes.

Если я не выгружу их, то что произойдет, если классы тестирования будут хранить объекты с использованием статических методов, подобных тем, которые предоставляются классом java.security.Security, тогда я получу ClassCastException.

Есть ли способ заставить меня разгрузить их?

Ответы [ 2 ]

3 голосов
/ 09 марта 2012

Невозможно форсировать выгрузку классов.Пока на класс или на экземпляр класса ссылаются, он не будет собран gc.Вам нужно будет удалить эти глобальные значения вручную до или после каждого теста.

Для модульных тестов вы можете попробовать запустить каждый тест в новой версии jvm.(это позволит избежать статических данных класса, но не избежать других глобальных остатков, таких как файлы).

Эти ссылки могут помочь:

Запуск каждого теста JUnit в отдельной JVM в Eclipse?

Как указать Maven2 для выполнения jUnitтестирует по одному в новом экземпляре JVM?

0 голосов
/ 09 марта 2012

Конечно, нет возможности выгрузить системные классы.Я думаю, что вы что-то упустили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...