JDK 7之后将在堆上创建字符串池,而不是PermGen。现在我的问题是,是否会收集垃圾?
另外据说String对象总是在堆上创建,String pool保持对这些对象的引用。那么String池如何在内部实现它是否使用任何hashMap或其他东西来缓存引用。
答案 0 :(得分:0)
你的问题的第二部分在这里得到解答 - How does Java implement String pooling?
很抱歉让你失望但是Java String-Pool不是一个真正的Java类,而是在JVM中实现的某个地方,即它被写为C ++代码。如果你看一下String类的源代码(几乎一直都是这样),你会发现intern()方法是原生的。您将不得不通过一些JVM代码来获取更多信息。
修改:可在此处找到一些实施(C++ header,C++ implementation)。搜索StringTable。