от
Я написал функцию, ГК тестирования пауза, и нашли давно СТВ(>1.5 S) с большим хранилище HashMap(~ 3 млн. записей.) при вызове системы.ГК() явно. И я пробовал большую коллекцию ArrayList, и это показали те же длинные задержки GC также(короче, чем на карте). Тестирование коды, как показано ниже:
package tool.gc;

import java.util.HashMap;
import java.util.Map;

public class HashMapTest {
  Map map = new HashMap<>();

  public static void main(String[] args) throws Exception {
    HashMapTest test = new HashMapTest();
    test.gcTestWithMap();
    System.out.println("prepare to gc, now:"   System.currentTimeMillis());
    while (true) {
      System.gc();
      System.out.println("finish a round of gc");
      Thread.sleep(4000);
    }
  }

  public void gcTestWithMap() {
    for (int i = 0; i < 3000000; i  ) {
      byte[] bytes = new byte[2000];
      for (int j = 0; j < bytes.length; j  ) {
        bytes[j] = 1;
      }
      map.put(i, bytes);
    }
  }
}
Параметры запуска JVM:
java 

Некоторые журналы ГК, как показано ниже:

2019

В моем понимании, HashMap объект может быть одним из ГХ корни, но не все записи. Мой вопрос: что может быть первопричиной длительного СТВ.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
...