Мне любопытно, как удаляются значения из пула строк?Как удалить незафиксированные значения из пула строк?
предполагают:
String a = "ABC"; // has a reference of string-pool
String b = new String("ABC"); // has a heap reference
b = null;
a = null;
В случае GC, «ABC» из кучи получает собраны, но «ABC» по-прежнему в бассейне (потому что его в PermGen и GC не влияет на это).
Если мы продолжаем добавлять значения, как:
String c = "ABC"; // pointing to 'ABC' in the pool.
for(int i=0; i< 10000; i++) {
c = ""+i;
// each iteration adds a new value in the pool. Previous values don't have a pointer.
}
То, что я хочу знать:
- Будет ли бассейн удалить значения, которые не охватываемые? Если нет, это означает, что в пуле есть ненужная память.
- В чем смысл тогда, когда JVM использует пул?
- Когда это может представлять опасность для производительности?
только ' "ABC" и' "" '(второй пример) являются постоянными, я подозреваю, но я не эксперт. –
'c' не находится в пуле, а строки неизменяемы. Вы создаете новую строку каждый раз, когда вы объединяетесь, и это не в пуле. –
вся строка литерала идет в пул. C будет в пуле. , если мы создадим объект с новым ключевым словом. он идет в кучу –