方法区内存溢出测试

 

package com.jfans;

import java.util.ArrayList;
import java.util.List;

/*
 * 如果要向运行时常量池(位于方法区Method Area)中添加内容,最简单的做法是使用String.intern()这个Native方法了。
 * 由于常量池分配 在方法区(持久代),我们可以通过-XX:PermSize和-XX:MaxPermSize限制方法区的大小,从而间接限制其中常量池的容量
 *
 * VM参数:-XX:PermSize10M -XX:MaxPermSize10M
 *
 * 抛出如下异常:
    Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
 at java.lang.String.intern(Native Method)
 at com.jfans.RuntimeConstantPoolOOM.main(RuntimeConstantPoolOOM.java:26)
 
 从运行结果可以看到,运行时常量池溢出,在OutOfMemoryError后面跟随的提示信息是"PermSize space",说明运行时常量属于方法区(HotSpot虚拟
         机中的永久代)的一部分。
        
     另外,还有方法区溢出,本机直接内存溢出等。
 */
public class RuntimeConstantPoolOOM {

 
 /**
  * @param args
  */
 public static void main(String[] args) {


  //使用List保持着常量池引用,避免Full GC回收常量池行为
  List<String> list = new ArrayList<String>();
  
  int i=0;
  while(true){
   list.add(String.valueOf(i++).intern());
  }


 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值