我在嘗試減少以下代碼使用的內存量。我希望它最多使用5-10MB的內存,但我不確定這是否可能。在啓動時,它現在大約需要10,1MB,在Thread.sleep
之後大約需要40MB。我試過使用BufferedReader
的不同實現,但這似乎沒有改變任何東西。我不是java中最偉大的人,我在內存管理方面尤其糟糕,所以我可能錯過了一些非常愚蠢的東西。如果有人能夠給我提供一些關於改進內存管理代碼的指導,那將會非常棒!如何減少此代碼/緩衝讀取器的內存使用量
package tsviewerscanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.util.stream.Collectors;
public class TSViewerScanner {
static URL url;
public static void main(String[] args) {
System.out.println("Started");
while (true) {
try {
Thread.sleep(10000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
try {
url = new URL("https://www.tsviewer.com/ts3viewer.php?ID=1040506");
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
try {
URLConnection conn = url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
String WebContentStr = reader.lines().collect(Collectors.joining("\n"));
if (WebContentStr.toLowerCase().contains("error code: 2568") && WebContentStr.toLowerCase().contains("insufficient client permissions")) {
System.out.println("WebContentStr contains both strings");
} else {
System.out.println("Strings not found");
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
爲什麼?有理由嗎? –
將字符串轉換爲小寫而不是兩次將有所幫助,就像讀取和測試URL行一樣,而不是將其全部收集到一個巨型字符串中。 「BufferedReader」與它沒有任何關係。 – EJP
@ScaryWombat部分原因是因爲我想在可用RAM很少的機器上運行代碼的一部分。部分原因是我認爲減少代碼使用的資源數量很有意思,並且使用比必要的資源更多的資源會讓人覺得很浪費。 –