栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何从Java中的字符串池中销毁引用?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何从Java中的字符串池中销毁引用?

不,通常您不能手动“从Java中的字符串池中破坏引用”。

我想为什么要定位它的主要原因是为了避免内存不足错误。在Java中,有6天时间,所有被嵌入的字符串都存储在PermGen中,PermGen是堆的固定大小部分,主要用于存储加载的类和字符串池。除了显式的固定字符串外,PermGen字符串池还包含程序中先前使用的所有文字字符串。Java
6中字符串池的最大问题是它的位置– PermGen。 PermGen 具有固定大小,无法在运行时扩展。您可以使用 -XX:MaxPermSize
= N
选项进行设置。这将导致内存泄漏和内存不足错误。

在Java 7中-字符串池已重定位到 。这意味着您不再受限于单独的固定大小的存储区。现在,所有字符串和大多数其他普通对象一样都位于堆中。

您还可以通过配置 -XX:StringTableSize = N来 增加字符串池的大小。如果不确定字符串池的使用情况,请尝试 -XX:+
PrintStringTableStatistics
JVM参数。程序终止时,它将打印您的字符串池使用情况。

在JDK中,还有一个 名为jmap的工具 ,可用于在您的应用程序中查找许多内联字符串。

jmap -heap process_id

例如:

jmap -heap 18974

与其他输出一起,此命令还输出内联字符串的数量及其所占的空间“ xxxxxx内联字符串占xxxxxx字节”

字符串池中对象的垃圾回收规则与其他 字符串或任何其他对象的 规则相同
。但是事实上,与String文字相对应的String对象通常总是可以访问的,因为在使用该文字的每种方法的代码中都有对字符串对象的隐式引用,因此通常它们不是垃圾回收的候选对象。然而,这并非总是如此。如果文字是在动态加载的类中定义的(例如,使用Class.forName(…)),则可以安排该类的卸载。如果发生这种情况,则文字的String对象将无法访问,并且在包含内部String的堆被GC回收时将被回收。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/455123.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号