如何用Java覆盖String?

时间:2016-04-15 15:50:21

标签: java string memory jvm

我有一个小程序检查网站的更新,它是通过将网站的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并随着每次检查而增长。

1 个答案:

答案 0 :(得分:0)

将XmX设置为您感觉舒适的东西。 Xmx = B标志告诉您的JVM使用最大量的B内存,当您达到该内存量时它将触发GC。小心这一点,如果你通过某种奇迹实际上需要的不仅仅是Xmx并且JVM无法分配新的内存,它会因内存不足而崩溃。

只有在你自己已经正确清理后才能使用它!

更多信息:

Xmx and Xms