Я собираюсь начать использовать стороннюю библиотеку с закрытым исходным кодом для загрузки группы данных и хотел проверить, насколько она быстра и сколько памяти требуется для загрузки одного «набора» данных.Я написал этот простой способ, чтобы вызвать загрузку данных и рассчитать его, и использовал YourKit, чтобы быстро взглянуть на использование памяти и вникнуть во время процессора.
Я запускаю его на Windows 7, используя Eclipse на JDK8 без аргументов виртуальной машины.
public static void main(String[] args){
long start = System.currentTimeMillis();
// There are a few more calls involved, but not much
BlackBoxDataProvider bd = new BlackBoxDataProvider("c:\\thedata");
BlackBoxData = bd.loadTheData();
System.out.println(System.currentTimeMillis() - start + "ms");
// Keep the application alive so I can have a quick look at memory usage
while(true) {
Thread.sleep(1000);
}
}
Вот снимок памяти YourKit после завершения загрузки:
Затем я использовал YourKit для «принудительной» сборки мусора, и это произошло:
Очевидно, что это не реальный сценарий, потому что я застрял в методе main, в главном потоке, поэтому некоторые из моих ссылок не будут очищены, но я не могу понять, почему выделение памяти будет увеличиваться.
Каждый раз, когда я нажимаю «Force System GC», распределение увеличивается.Я получил 11,9 ГБ, прежде чем он прекратил увеличиваться.
Почему это происходит?