其中intern()是本地native方法的一种;
具体的验证过程见下图:
一直到后期去不断的去增加intern()
直到将方法区溢出:
通过VM对程序进行监控
如下所示:
显示如下:
此时进行内存溢出的时PerGem space的这种情况:
详细验证代码如下:
import java.util.ArrayList;
import java.util.List;
/**
* 运行时常量池溢出
* -Xx:permsize和-Xx:MaxperSize是可以用来限制方法区大小的
*/
public class RuntimeconstantpoolOOM {
public static void main(String[] args){
List<String > ss=new ArrayList<>();
//使用list来保持常量池引用,避免发生full GC的操作:
int i=0;
while (true){
ss.add(String.valueOf(i++).intern());
//其中intern()是一个native的方法,而且是一个外部引用的方法:
}
}
}