Ada*_*old 2 java memory string jvm permgen
假设我编写了一个程序,它创建了很多String对象和intern()它们:
String someString = param1 + param2;
someString.intern();
Run Code Online (Sandbox Code Playgroud)
这对于一小组字符串来说很好,但是如果我尝试创建十亿个字符串String呢?(或者说亿亿亿?)据我所知,JVM 在PermGen区域为s 维护一个常量池,而PermGen没有得到GC -ed.String
因此,如果我String在循环中创建了过多的对象,但是我删除了对它们的引用,那么它们将得到GC -ed(我将用尽PermGen空间)吗?这些String都是独一无二的,没有任何重复.
在Java 6中,您可以填写PermGen,它将被清理.
在Java 7中,实习字符串不在PermGen中,而是在堆中.
在Java 8中,没有PermGen.
文字池只包含常量,如果你创建一个新的字符串,它不是文字,所以它首先不在池中.
注意:String文字哈希映射不会调整大小.默认情况下,它通常约为10K元素.当您添加条目时,它变得越来越慢,因为它变成了一个链表的数组.
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |