以下のコードで使用するメモリ量を減らそうとしています。 5〜10MBのRAMを使用したいと思っていますが、可能かどうかは分かりません。起動時には、現在約10,1MB、その後約40MBのThread.sleep
が必要です。私はBufferedReader
の異なる実装を試してみましたが、それは何も変更されていないようです。私はJavaで最高ではないし、私は特にメモリ管理が悪いので、おそらく本当にばかなものを逃してしまっただろう。誰かが私にメモリ管理に関するコードを改善するための指示を与えることができたらすばらしいでしょう!このコード/ buffereredreaderのメモリ使用量を減らす方法
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();
}
}
}
}
なぜですか?理由はありますか? –
文字列を2回ではなく1回小文字に変換すると、URL行を1つの巨大な文字列にまとめずに行単位で読み込んでテストするのに役立ちます。 'BufferedReader'はそれと関係がありません。 – EJP
@ScaryWombatこのコードの一部を、ごくわずかのRAMしか使用できないマシンで実行したいと思っているためです。部分的には、コードが使用するリソースの量を減らすことは面白いと思っています。また、必要以上に多くのリソースを使用するのは無駄です。 –