论坛首页 Java企业应用论坛

JVM内存管理:深入Java内存区域与OOM

浏览 53639 次
该帖已经被评为精华帖
作者 正文
   发表时间:2011-01-04  
楼主,多写点类似的文章,好文.呵呵
0 请登录后投票
   发表时间:2011-01-14  
如果能支持自己真的delete对象以及强制调用gc就好了。
0 请登录后投票
   发表时间:2011-01-25   最后修改:2011-01-25
/**

 * VM Args:-XX:PermSize=10M -XX:MaxPermSize=10M

 * @author zzm

 */

public class RuntimeConstantPoolOOM {

 

       public static void main(String[] args) {

              // 使用List保持着常量池引用,压制Full GC回收常量池行为

              List<String> list = new ArrayList<String>();

              // 10M的PermSize在integer范围内足够产生OOM了

              int i = 0; 

              while (true) {

                     list.add(String.valueOf(i++).intern());//个人认为在此种特殊情况下,你只要创建了新的String对象常量池都会产生新的对象,是否调用intern方法是不会有影响的,因为intern方法会查找常量池中已经存在的字符串,如果有存在就直接返回,如果不存在才会进一步锁住常量池进行添加的行为
              }

       }

}
0 请登录后投票
   发表时间:2011-03-04  
学习了。写的很好。
0 请登录后投票
   发表时间:2011-04-14  
首先,赞楼主功力深厚,最近看了一篇文章,上面提到了不同的观点,后来咨询了许多人,得到的答案也是不一致,心里一直在纠结着,希望得到楼主以及其他前辈的解答。

问题引出:类变量是在java虚拟机启动后就被初始化好了???

//注:个人最近在接触和学习java底层的一些知识,通过看了网上的许多文章,有了下面的一段想法,但无奈,网上文章议论不一,自己心里又不确定。所以请教楼主指出问题,我好接着努力。

  类变量(静态变量),它是不和某个具体的对象绑定在一起的,是属于类的;当需要使用到该类时,就会被加载到内存中,静态变量就会被初始化。也就是说,一个应用程序执行了(底层实例化好了一个java虚拟机实例,支持着这个应用程序的执行),但是并不一定就初始化好了各个类的静态成员变量。//支持错误的观点。

0 请登录后投票
   发表时间:2011-06-08  
赞一个,需要这样的讲jvm的文章。
0 请登录后投票
   发表时间:2011-08-01  
这个书我也买了,非常不错
0 请登录后投票
   发表时间:2011-10-27  
太强了,不服不行
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics