我有一个小程序检查网站的更新,它是通过将网站的HTML加载到String对象,然后在字符串中搜索模式来实现的,但是因为网站占用了相当大的空间我已经注意到了随着每次扫描,应用程序的内存使用量都在增长。我认为这是因为它不是重写旧字符串的内容而是创建一个新字符串,并且我不知道旧字符串是什么,而不是删除它。
这是我写的代码
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Scanner;
/**
* Created by zaers on 15-Apr-16.
*/
public class PageSearch {
public static void main(String[] args){
while(true) {
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
System.exit(1); //OS screwed our program
}
try {
String out = new Scanner(new URL("http://blog.dota2.com/").openStream(), "UTF-8").useDelimiter("\\A").next();
if(out.contains("6.87")){
java.awt.Desktop.getDesktop().browse(new URI("http://www.youtube.com/watch?v=-kcOpyM9cBg&t=7m21s"));
break;
}
else continue;
} catch (IOException e) {
System.exit(2); //Blog is kill
} catch (URISyntaxException e) {
System.exit(3); //YouTube is kill
}
}
}
}
我注意到了这一点,因为首次运行该应用程序需要8.5mb,但它目前为27.8并随着每次检查而增长。
答案 0 :(得分:0)
将XmX设置为您感觉舒适的东西。 Xmx = B标志告诉您的JVM使用最大量的B内存,当您达到该内存量时它将触发GC。小心这一点,如果你通过某种奇迹实际上需要的不仅仅是Xmx并且JVM无法分配新的内存,它会因内存不足而崩溃。
只有在你自己已经正确清理后才能使用它!
更多信息: