{
StringBuilder fileBuff = new StringBuilder();
long before = getUsedMem();
try {
//Open InputStreamReader here
while ((currLine = lnr.readLine()) != null) {
fileBuff.append("\r\n" + currLine);
}
//Close streams
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("usedTotal: " + (getUsedMem() - before));
}
private long getUsedMem() {
return Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
}
Run Code Online (Sandbox Code Playgroud)
在运行代码几次的时候,我得到了usedTotal ~ 14279888,但如果我用我替换fileBuff.append("\r\n").append(currLine)
得到几乎双倍的内存~ 33264440.
有人可以解释原因,因为我知道String
串联也使用StringBuilder
?
我:fileBuff.append("\ r \n"+ currLine);
62: aload 6
64: invokevirtual #16 // Method java/io/LineNumberReader.readLine:()Ljava/lang/String;
67: dup …
Run Code Online (Sandbox Code Playgroud) 我真的需要SimpleDateFormat的替代品,我正在将许多Strig日期(> 100k)从JST转换为GMT.我遇到的问题是我的代码生成了许多char [],正如我在分析时注意到的那样.对于150k日期,我使用了150MB的内存,这不是一个真正的选择.谢谢.
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
sdf.setTimeZone(tz);
try {
Date theResult = sdf.parse(dateToConvert);
SimpleDateFormat rdf = new SimpleDateFormat(resultDateFormat);
rdf.setTimeZone(resultTz);
return rdf.format(theResult);
} catch (ParseException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我不能使用Joda时间,所以这对我来说不是一个选择.:(
是否有人知道对方如何以及为什么会接收合并的TCP数据包而不是单独打包数据包?我已经在套接字级别将TCP Nodelay设置为true,但是tcpdump仍然看到一些数据包已合并。在成功发送了4个大小为310字节的数据包后,我得到了3 x 1400字节,而不是15 x 310字节。这导致一些重要的延迟。谢谢。
http://www.2shared.com/photo/_bN9UEqR/tcpdump2.html
s = new Socket(host, port);
s.setTcpNoDelay(true);
s.getOutputStream().write(byteMsg);
s.getOutputStream().flush()
Run Code Online (Sandbox Code Playgroud)