研究垃圾回收机制,计算对象创建占用的内存
来源:互联网 发布:淘宝商家放单群 编辑:程序博客网 时间:2024/06/02 10:20
package tigers;
public class Tiger14 {
public static void main(String[] args) {
int[] timesArray = {10, 100, 1000, 10000};
execute("java.lang.StringBuffer", timesArray);
execute("java.lang.String", timesArray);
execute("java.lang.Object", timesArray);
}
private static void execute(String className, int[] timesArray) {
try {
System.out.println("<+>>>>>> Test: [" + className + "]");
for (int i : timesArray) {
long used = usedMemory(className, i);
System.out.println(used + "(" + i + " times)");
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static long usedMemory(String className, int times) throws Exception{
Class c = Class.forName(className);
int size = times;
Object[] obs = new Object[times];
// runGC();
rt.gc();
long start = rt.freeMemory();
for (int i = 0; i < size; i++) {
obs[i] = c.newInstance();
}
// runGC();
rt.gc();
long end = rt.freeMemory();
return (start - end) / size;
}
private static Runtime rt = Runtime.getRuntime();
private static void runGC() throws Exception{ //试图强制运行垃圾回收。
long past = Long.MAX_VALUE, now = rt.freeMemory();
for (int i = 0; (past > now) && (i < 500); i++) { //只有当垃圾回收确实执行以后,现在剩余的内存才会大于过去剩余的内存,for循环才会终止。
rt.runFinalization(); //强制调用对象的finalize()方法,为垃圾回收作准备。
rt.gc(); //试图激活垃圾回收线程。
Thread.yield(); //延迟当前线程,使垃圾回收线程得到执行机会。
past = now;
now = rt.freeMemory(); //更新当前内存使用状态
}
}
}
使用Runtime.gc()方法实现垃圾回收:
<+>>>>>> Test: [java.lang.StringBuffer]
112(10 times)
64(100 times)
64(1000 times)
63(10000 times)
<+>>>>>> Test: [java.lang.String]
184(10 times)
43(100 times)
40(1000 times)
35(10000 times)
<+>>>>>> Test: [java.lang.Object]
31(10 times)
14(100 times)
8(1000 times)
6(10000 times)
使用自定义的runGC()方法实现垃圾回收:
<+>>>>>> Test: [java.lang.StringBuffer]
-924(10 times)
61(100 times)
64(1000 times)
63(10000 times)
<+>>>>>> Test: [java.lang.String]
200(10 times)
38(100 times)
40(1000 times)
35(10000 times)
<+>>>>>> Test: [java.lang.Object]
47(10 times)
11(100 times)
6(1000 times)
8(10000 times)
- 研究垃圾回收机制,计算对象创建占用的内存
- 垃圾回收机制(对象的回收)
- Java的垃圾回收机制研究
- java的内存垃圾回收机制
- Java的内存和垃圾回收机制
- 对象的销毁与垃圾回收机制
- Java的内存回收——垃圾回收机制
- C++实现多线程对象内存池带垃圾回收机制
- JAVA内存垃圾回收机制
- JAVA内存垃圾回收机制
- JAVA内存垃圾回收机制
- java内存垃圾回收机制
- Java内存垃圾回收机制
- 内存分析#垃圾回收机制
- JVM内存垃圾回收机制
- 内存泄漏,垃圾回收机制
- Java中的垃圾回收问题以及在创建对象的时候的内存的分析
- Java内存回收 垃圾回收机制
- IBM WebSphere 网站专家 安装指南
- java.text和java.util的综合运用
- 字符集系列二之resin和tomcat之差异
- win2000和XP下得到硬盘剩余空间(用java调用windows命令)
- 字符集系列三之ISO8859_1、GBK、gb2312
- 研究垃圾回收机制,计算对象创建占用的内存
- 字符集系列之四总结
- 自定义ClassLoader的简单例子
- 从IT专业人士到管理者的过渡技巧
- 事件监听的简单例子
- c++资源之不完全导引
- 成员初始化的先后顺序
- SOFTWARE CONFIGIURATION MANAGEMENT GUIDBOOK(1995)
- Web搜索引擎设计和实现分析 (ZZ)