来看看关于gc()的一个小程序

[复制链接]
查看11 | 回复9 | 2007-10-15 12:41:14 | 显示全部楼层 |阅读模式
public class MemoryDemo
{

public static void main(String[] args)

{

Runtime r=Runtime.getRuntime();

long mem1,mem2;

Integer someints[]=new Integer[1000];



System.out.println("Total memory is: "+r.totalMemory());



mem1=r.freeMemory();

System.out.println("Initial free memory is: "+mem1);



r.gc();

mem1=r.freeMemory();

System.out.println("Free memory after garbage collection: "+mem1);




for(int i=0;i<1000;i++)

someints=new Integer(i);



mem2=r.freeMemory();

System.out.println("Free memory after allocation: "+mem2);

System.out.println("Memory used by allocation: "+(mem1-mem2));




for(int i=0;i<1000;i++)

someints=null;



r.gc();



mem2=r.freeMemory();

System.out.println("Free memory after collecting discarded Integers "+mem2);





}
}
这里面取得的memory是字节吗?是当前JVM的memory?
一般JVM的memory有多少呢?
还有在第二次r.gc()前如果不将someints置为空,进行gc(),JVM的memory也会增大,这是为什么?
回复

使用道具 举报

千问 | 2007-10-15 12:41:14 | 显示全部楼层
鸭鸭表跑,问你一个问题
为什么你的BLOG的首页文章都是只显示开头一部分内容,然后有一个(阅读全文连接),而我的就都把所有的内容统统显示出来?
这个在那里设置啊?偶一直没找到


回复

使用道具 举报

千问 | 2007-10-15 12:41:14 | 显示全部楼层


又遛了


回复

使用道具 举报

千问 | 2007-10-15 12:41:14 | 显示全部楼层
最初由 臧圩人 发布
[B]鸭鸭表跑,问你一个问题
为什么你的BLOG的首页文章都是只显示开头一部分内容,然后有一个(阅读全文连接),而我的就都把所有的内容统统显示出来?
这个在那里设置啊?偶一直没找到

[/B]

霍霍,在设置里面有滴
偶刚想说你的blog的首页也忒长了些吧。
进入管理界面以后
有一个“设定”,点击
然后往下拉
您放在首页的文章只要显示「正文」部分,而不要显示「延伸正文」?
选择一下不要显示就行啦
回复

使用道具 举报

千问 | 2007-10-15 12:41:14 | 显示全部楼层
偶知道了,是偶发贴时把文章全贴正文里了


谢谢鸭鸭




回复

使用道具 举报

千问 | 2007-10-15 12:41:14 | 显示全部楼层



肥猫昨天没有来报到过闹!
回复

使用道具 举报

千问 | 2007-10-15 12:41:14 | 显示全部楼层
最初由 echo_huang 发布
[B]


肥猫昨天没有来报到过闹! [/B]

等肥猫


回复

使用道具 举报

千问 | 2007-10-15 12:41:14 | 显示全部楼层
咳咳, 不怎么用RUNTIME 现学现卖一下

这里面取得的memory是字节吗?是当前JVM的memory?
是JVM的MEMORY
一般JVM的memory有多少呢?
JVM的MEMORY有三个指标
最大使用量, 如果没有设定一般是64M
初期使用量, 如果没有设定则由JVM自己决定
线程堆栈用MEMORY, 这是JVM自身使用的MEMORY, 缺省为512K

还有在第二次r.gc()前如果不将someints置为空,进行gc(),JVM的memory也会增大,这是为什么?
someints是一组对象的参照, 在当前线程运行完毕之前JVM会认为这些对象不是垃圾, 而把参照设置成NULL之后, 对象没有了参照, 就成了垃圾, 被清理掉了

在启动JAVA的时候可以优化JVM
比如说,
java -Xmx256M -Xms128M -Xss128k ......
这样JAVA的最大许容内存就变成了128M
初期内存128M
而自用的部分128k
回复

使用道具 举报

千问 | 2007-10-15 12:41:14 | 显示全部楼层
谢谢肥猫


回复

使用道具 举报

千问 | 2007-10-15 12:41:14 | 显示全部楼层
最初由 lodge 发布
[B]咳咳, 不怎么用RUNTIME 现学现卖一下

这里面取得的memory是字节吗?是当前JVM的memory?
是JVM的MEMORY
一般JVM的memory有多少呢?
JVM的MEMORY有三个指标
最大使用量, 如果没有设定一般是64M
初期使用量, 如果没有设定则由JVM自己决定
线程堆栈用MEMORY, 这是JVM自身使用的MEMORY, 缺省为512K

还有在第二次r.gc()前如果不将someints置为空,进行gc(),JVM的memory也会增大,这是为什么?
someints是一组对象的参照, 在当前线程运行完毕之前JVM会认为这些对象不是垃圾, 而把参照设置成NULL之后, 对象没有了参照, 就成了垃圾, 被清理掉了

在启动JAVA的时候可以优化JVM
比如说,
java -Xmx256M -Xms128M -Xss128k ......
这样JAVA的最大许容内存就变成了128M
初期内存128M
而自用的部分128k [/B]

1、那我的web应用服务器有没有必要优化一下JVM呢?
2、gc()的问题,我是说,在将对象置 为空以前,应该引用还是存在的对不对,而这时候进行垃圾收集,memory也会增加,为什么呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行