Используя JDK 1.8 и VisualVM, я увидел, что сохраненный размер строки равен 0. Согласно этому article, это означает, что память, выделенная для строки, равна 0. Означает ли это, что строка уже прошла сборку мусора? Если это уже был GC, почему он все еще отображается? Если нет, что означает сохраненный размер = 0? Означает ли это, что «если JVM GC эту строку, она может освободить только 0 КБ памяти»?
Пример кода:
public class Main {
private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
private static ExecutorService executorService = Executors.newFixedThreadPool(3);
public static void main(String[] args) throws InterruptedException {
AAAAAAAA a = new AAAAAAAA();
a.setString();
Thread.sleep(55555555); // I dump it when it's asleep.
}
}
class AAAAAAAA {
String string = "wawawawa";
public void setString() {
string = "hahahahaha";
}
}