일반 :
나는 일부 서버 측 (먼 일)에서 모든 시간 (절대 루프 결말을)/"시장"데이터를 수신 인용 소켓 클라이언트를 쓰고 있어요.
데이터를 청크로 나누어서 사용할 수 있습니다.
각 청크에는 약 200자를 포함하므로 배열로 변환해야합니다.
청크가 분할 된 후 List (여기에는 No Problems)로 구문 분석됩니다.자바 CLI 응용 프로그램 성능
문제 :
CPU 사용이 실행 10 분 후 40 %에 도달한다.
문제를 격리 할 수있었습니다.
모든 청크를 json으로 변환해야합니다.
그래서 문제를 해결하는 실제 코드를 제공하고 있습니다.
이 코드는 300-400 MS마다 실행됩니다.
이 코드를 건너 뛰면 전체 시스템의 CPU 사용률은 1 % -2 %가됩니다.
참고 :
나는이 스레드를 읽고하지만 난 거기에 모든 솔루션을 볼 수 없습니다.
Is it better to reuse a StringBuilder in a loop?
코드 :
private static StringBuffer jsonVal = new StringBuffer();
public static String toJson(List<QuotesData> quotesData) {
// Empty variable
jsonVal.delete(0, jsonVal.length());
jsonVal.append("{");
synchronized (quotesData) {
for (QuotesData quote : quotesData) {
jsonVal.append("\"").append(quote.getSymbol()).append("\":[{");
jsonVal.append("\"ask\":\"").append(quote.getAsk()).append(
"\",");
jsonVal.append("\"bid\":\"").append(quote.getBid()).append(
"\",");
jsonVal.append("\"time\":\"").append(quote.getDateTime())
.append("\"}],");
}
jsonVal.append("}");
String returnString = jsonVal.toString();
return returnString.toString().replace("}],}", "}]}");
}
}
(제목과는 반대로) StringBuilder 대신 StringBuffer를 사용하는 이유가 무엇입니까? 그 수준에서 동기화합니까? – leonbloy