2016-04-15 142 views
0

我有一個小程序,檢查網站的更新,它通過加載網站的HTML到一個字符串對象,然後搜索該字符串的模式,但是因爲該網站需要大量的空間我已經注意到每次掃描時,應用程序的內存使用量都在增長。我認爲這是因爲不是重寫舊字符串的內容而是創建一個新字符串,並且我不知道舊字符串的內容,但不刪除它。如何覆蓋Java中的字符串?

這是我寫的

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

技術上的堆空間,而不GC生長,直到它在伊甸園代 – AdamSkywalker

+3

足夠的自由空間,你爲什麼在'而(真)'循環創建一個新的'Scanner'? – TheLostMind

+2

你不關閉你的流o_o你去那裏。當你完成他們的時候關閉你的溪流! – Tschallacka

回答

0

將XmX設置爲您感覺舒適的地方。 Xmx = B標誌告訴您的JVM使用最大數量的B內存,當您達到該內存量時,它將觸發GC。要小心這個,如果你通過某種奇蹟實際上需要比Xmx更多的東西,並且JVM不能分配新的內存,它將會因爲內存不足異常而崩潰。

只有在您已經妥善清理後才能使用它!

更多信息:

Xmx and Xms