package chapter3;
/**
* 测试使用的是Serial / Serial Old收集器
* VM args: -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:+UseSerialGC
* Created by zhaoshiqiang on 2017/7/23.
*/
public class testAllocation {
private static final int _1MB = 1024 * 1024;
public static void main(String[] args) {
byte[] allocation1,allocation2,allocation3,allocation4,allocation5,allocation6,allocation7;
allocation1 = new byte[ 2 * _1MB];
allocation2 = new byte[ 2 * _1MB];
allocation3 = new byte[ 2 * _1MB];
allocation1 = null;
/*
* 出现一次Minor GC,这是因为给allocation4分配所需的2M内存时,发现Eden已经被占用7.8MB(6MB对象,其他为程序所需空间),
* 剩余空间已经不足以分配allocation4的2MB内存,所以发生MinorGC。
* 不过,因为allocation2,allocation3都有引用,所以这次GC总内存占用量减少了allocation1的2M(7645K->4714K)
* GC期间JVM发现已有的2个2MB大小的对象全部无法放入Survivor空间(Survivor空间只有1MB大小),
* 所以只好通过担保机制提前转移到老年代了(tenured generation total 10240K, used 4096K )
* */
allocation4 = new byte[ 2 * _1MB];
allocation5 = new byte[ 2 * _1MB];
allocation6 = new byte[ 2 * _1MB];
allocation5 = null;
allocation6 = null;
allocation2 = null;
/*
* 这里再出现一次Minor GC,出现的原因同上。
* allocation5,allocation6被清空,
* allocation4无法放入Survior区,所以通过担保机制进入老年代,此时新生代为空(7004K->1K(9216K))
* 虽然老年代中的allocation2已经失效,但是因为老年代的GC没有触发,
* 所以老年代被占用6MB(tenured generation total 10240K, used 6760K)
*
* */
allocation7 = new byte[ 2 * _1MB];
allocation7 = null;
//经过这次System.gc(),老年代将把失效的allocation2空间删除,整理后为4MB(Tenured: 6763K->4710K(10240K))
System.gc();
}
}
baidu_16992441
- 粉丝: 311
- 资源: 1041
最新资源
- 适用于 Python 的 LINE 消息 API SDK.zip
- 适用于 Python 的 AWS 开发工具包.zip
- 适用于 Python 3 的 Django LDAP 用户身份验证后端 .zip
- 基于PBL-CDIO的材料成型及控制工程课程设计实践与改革
- JQuerymobilea4中文手册CHM版最新版本
- 适用于 Python 2 和 3 以及 PyPy (ws4py 0.5.1) 的 WebSocket 客户端和服务器库.zip
- 适用于 AWS 的 Python 无服务器微框架.zip
- 适用于 Apache Cassandra 的 DataStax Python 驱动程序.zip
- WebAPI-案例-年会抽奖.html
- 这里有一些基础问题和一些棘手问题的解答 还有hackerrank,hackerearth,codechef问题的解答 .zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈