- 论坛徽章:
- 0
|
今天参考了一些资料,写了一段JAVA垃圾回收的代码,感觉还行,放上来分享一下,当然,水平有限,也别期望太高了,呵呵。这段代码主要是运行在长时间运行的服务器端,定时的进行垃圾回收。
需要调用的时候,在你的MAIN里加上以下语句:
SystemGC sc = new SystemGC();
sc.start();
import java.util.Calendar;
import java.util.Date;
import org.apache.log4j.Logger;
/**
*定时清理系统,完成内存垃圾回收和释放
*/
public class SystemGC extends Thread{
private static final Logger logger = Logger.getLogger(SystemGC.class);
public void run()
{
logger.info("Start System Clean...");
while (true)
{
try
{
Calendar c = Calendar.getInstance();
c.setTime(new Date());
int currentHour = c.get(Calendar.HOUR_OF_DAY);
if (currentHour == 1)
{
StringBuffer str = new StringBuffer();
Runtime rt = Runtime.getRuntime();
str.append("Before Garbage Collection, Memory Usage: Total Memory = ");
str.append(rt.totalMemory());
str.append(", Free Memory = ");
str.append(rt.freeMemory());
str.append(", Max Memory = ");
str.append(rt.maxMemory());
logger.info(str.toString());
System.gc();
//休眠30秒,让系统进行资源回收
sleep(30 * 1000);
str.setLength(0);
rt = Runtime.getRuntime();
str.append("After Garbage Collection, Memory Usage: Total Memory = ");
str.append(rt.totalMemory());
str.append(", Free Memory = ");
str.append(rt.freeMemory());
str.append(", Max Memory = ");
str.append(rt.maxMemory());
logger.info(str.toString());
//休眠60分钟
sleep(3600 * 1000);
}
//休眠10分钟,在后继续进行时间判断,以确定是否进行资源回收
sleep(10 * 60 * 1000);
}
catch (Exception e)
{
logger.error(e.getMessage(), e);
}
}
}
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17899/showart_178174.html |
|