我发现{J}文件的JSON-lib解析在Java 8上比Java 6慢4倍。
我在Linux 64位机器上测试过。
您可以从here下载包含所需jar文件的现成运行代码。
以下是源代码:
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import net.sf.json.JSONObject;
public class JsonLib {
public static void main(String [] args) throws Exception {
String sampleJsonPath = "sample.json";
byte [] b = new byte[2048];
int totalRuns = 50;
if (args.length > 0) {
totalRuns = Integer.parseInt(args[0]);
}
int len;
ByteArrayOutputStream bop = new ByteArrayOutputStream(8192);
InputStream ip = new FileInputStream(sampleJsonPath);
while ((len = ip.read(b)) > 0) {
bop.write(b, 0, len);
}
ip.close();
String countryJson = new String(bop.toByteArray());
long start = System.currentTimeMillis();
long runStart = start;
long runEnd;
for (int i = 0; i < totalRuns;) {
JSONObject.fromObject(countryJson);
i++;
if (i % 10 == 0) {
runEnd = System.currentTimeMillis();
System.out.println("PARSE TIME for run " + (i-10) + '-' + i + " = " + (runEnd - runStart));
runStart = runEnd;
}
}
long end = System.currentTimeMillis();
System.out.println("Total time = " + (end -start));
}
}
代码解析大型json文件50次,每10次运行打印一次。
Java 6大约需要1.5秒,而Java 8大约需要7秒。
在我的公司,我们通过转移到jackson解析器解决了这个问题。
但是,如果有人能够在这种特殊情况下更清楚地了解Java 8的缓慢原因,那将会很棒。