定义一个大对象,直接放入OLD区(对象占用的对内存占总的设置的内存一半以上),容易发生FGC

原创 2012年03月21日 10:56:40
public class GcDemo {

    private static List<MemoryObject> list = new ArrayList<MemoryObject>();
    public static void main(String[] args) throws Exception {
            Thread.sleep(10000 * 2);
            happenMinorGC(111);
    }

    private static void happenMinorGC(int happenMinorGCIndex) throws Exception {
        for (int i = 0; i < happenMinorGCIndex; i++) {
             Thread.sleep(1000);
             MemoryObject m = new MemoryObject(1024 * 1024 * 7);
             list.add(m );
             if(list.size() >= 4){
                System.out.println('5');
                list.clear();
             }
        }
    }
}

class MemoryObject {
    private byte[] bytes;
    public MemoryObject(int objectSize) {
        this.bytes = new byte[objectSize];
    }
}


分析: 采用 java -XX:+UseSerialGC -Xms40M -Xmx40M -Xmn16M -verbose:gc -XX:+PrintGCDetails -XX:SurvivorRatio=6 GcDemo 执行:发生FGC


  S0        S1     E        O         P     YGC   YGCT  FGC   FGCT    GCT   
  0.00   0.00   2.00   0.00  10.65      0    0.000     0    0.000    0.000
  0.00   0.00   2.00   0.00  10.65      0    0.000     0    0.000    0.000
  0.00   0.00   2.00   0.00  10.65      0    0.000     0    0.000    0.000
  0.00   0.00   2.00   0.00  10.65      0    0.000     0    0.000    0.000
  0.00   0.00   2.00   0.00  10.65      0    0.000     0    0.000    0.000
  0.00   0.00  60.33   0.00  10.66      0    0.000     0    0.000    0.000
  0.00   5.68  60.33  29.17  10.70      1    0.007     0    0.000    0.007
  5.68   0.00  58.33  58.33  10.70      2    0.013     0    0.000    0.013
  0.00   5.68  59.37  87.50  10.70      3    0.020     0    0.000    0.020
  0.00   0.00  58.33   0.47  10.70      4    0.020     1    0.003    0.023
  0.00   0.00  58.33  29.64  10.70      5    0.023     1    0.003    0.026
  0.00   0.00  58.33  58.81  10.70      6    0.028     1    0.003    0.031
  0.00   0.00  59.02  87.97  10.70      7    0.031     1    0.003    0.035
  0.00   0.00  58.33   0.47  10.70      8    0.031     2    0.007    0.038
  0.00   0.00  58.33  29.64  10.70      9    0.035     2    0.007    0.041
  0.00   0.00  58.33  58.81  10.70     10    0.038     2    0.007    0.045
  0.00   0.00  58.79  87.97  10.70     11    0.042     2    0.007    0.048
  0.00   0.00  58.33   0.47  10.70     12    0.042     3    0.010    0.052
  0.00   0.00  58.33  29.64  10.70     13    0.046     3    0.010    0.056
  0.00   0.00  58.33  58.81  10.70     14    0.049     3    0.010    0.059
  0.00   0.00  58.63  87.97  10.70     15    0.053     3    0.010    0.063
  0.00   0.00  58.33   0.47  10.69     16    0.053     4    0.014    0.067
  0.00   0.00  58.33  29.64  10.69     17    0.057     4    0.014    0.071
  0.00   0.00  58.33  58.81  10.69     18    0.061     4    0.014    0.075
  0.00   0.00  58.53  87.97  10.69     19    0.064     4    0.014    0.078
  0.00   0.00  58.33   0.47  10.69     20    0.064     5    0.017    0.081

参考: http://xianqi-h.iteye.com/blog/1346491


相关文章推荐

精确计算一个Java对象占用的内存大小

转载于:http://blog.csdn.net/hoszb/article/details/5846069   《java优化占用内存的方法 -- 雪的痕迹》一文中提到: " java做的...
  • zgmzyr
  • zgmzyr
  • 2012年05月22日 23:03
  • 656

C# 能否获取一个对象所占内存的大小

今日,在项目重构的时候忽然想到一个问题,一个类哪些成员的增加,会影响一个类所占内存的大小?C#有没有办法知道一个对象占多少内存呢?      第一个问题:很快想到是类的非静态的字段、属性。 ...

一个java对象到底占多大内存?

最近在读《深入理解Java虚拟机》,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好:http:...

一个Java对象到底占用多大内存?

一个Java对象到底占用多大内存? 最近在读《深入理解Java虚拟机》,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用...

Java计算一个对象占用内存的大小

Java计算一个对象占用内存的大小

一个Java对象到底占用多大内存?

大家可以用这个代码边看边验证,注意的是,运行这个程序需要通过javaagent注入Instrumentation,具体可以看原博客。我今天主要是总结下手动计算Java对象占用字节数的基本规则,做为基本...

在预先定义的内存位置构造一个对象

常常有人问这样一个C++问题:如何在预先定义的内存位置构造一个对象?在预先定义的内存缓冲构造一个对象有许多有用的应用。例如,一个定制的垃圾搜集器能使用一个大的预分配内存缓冲,用户在这个缓冲中构造其对象...

在预先定义的内存位置构造一个对象

常常有人问这样一个C++问题:如何在预先定义的内存位置构造一个对象?在预先定义的内存缓冲构造一个对象有许多有用的应用。例如,一个定制的垃圾搜集器能使用一个大的预分配内存缓冲,用户在这个缓冲中构造其对象...

new一个Object对象占用多少内存?

/***************************************************  * TODO: description .  * @author: gao_ch...

JAVA内存使用--如何计算一个Java对象占用的字节数

原文地址:点击打开链接 ,翻译有出入之处,请以原文为准 本文中,我们讨论一个问题:如何计算(或者说,估算)一个Java对象占用的内存数量? 通常,我们谈论的堆内存使用的前提是以“一般情况”为背景的...
  • kp034
  • kp034
  • 2011年12月18日 21:07
  • 2765
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:定义一个大对象,直接放入OLD区(对象占用的对内存占总的设置的内存一半以上),容易发生FGC
举报原因:
原因补充:

(最多只允许输入30个字)