Я оцениваю более быструю производительность XML (v 2.11.0) при разных конфигурациях («простой» objectMapper, используя Afterburner, smile и т. Д. c), и во время моих тестов производительности jmh я обнаружил некоторые странные результаты. Кажется, что производительность для десериализации списка очень и очень плохая. Вот метод, использованный для теста
protected void testMapper(List<Persona> persone, Blackhole bh,ObjectMapper jsonMapper) throws Exception {
String personeAsStr=jsonMapper.writeValueAsString(persone);
bh.consume(personeAsStr);
List<Persona> personeDeser=jsonMapper.readValue(personeAsStr,List.class);
bh.consume(personeDeser);
}
Если вместо List я использую объект, содержащий персона, в качестве свойств, производительность будет совершенно другой.
Вот код, используемый для другого test
protected void testMapperPersone(PersoneForBenchmark personeForBenchmark, Blackhole bh,ObjectMapper jsonMapper) throws Exception {
String personeAsStr=jsonMapper.writeValueAsString(personeForBenchmark);
bh.consume(personeAsStr);
PersoneForBenchmark personeDeser=jsonMapper.readValue(personeAsStr,PersoneForBenchmark.class);
bh.consume(personeDeser);
}
Где PersonaForBenchmark выглядит примерно так:
public class PersoneForBenchmark {
private Persona persona0;
private Persona persona1;
private Persona persona2;
private Persona persona3;
private Persona persona4;
private Persona persona5;
private Persona persona6;
private Persona persona7;
private Persona persona8;
private Persona persona9;
//plus getters and setters
}
Результаты производительности следующие:
FasterXMLPerformance.fasterXMLStandard 19,504 операций / с
FasterXMLPerformance.fasterXMLStandardPersone 10772 836 операций / с
Я пытался использовать TypeReference, объект, содержащий список, но результаты по существу совпадают. Другой аспект, который меня озадачивает, заключается в том, что пропускная способность теста (для контрольного примера списка) уменьшается после каждой итерации. Вот пример журнала jmh:
Run progress: 18,75% complete, ETA 00:16:30
Fork: 1 of 1
Warmup Iteration 1: 218,673 ops/s
Warmup Iteration 2: 83,445 ops/s
Warmup Iteration 3: 57,964 ops/s
Warmup Iteration 4: 46,002 ops/s
Warmup Iteration 5: 39,482 ops/s
Warmup Iteration 6: 34,743 ops/s
Warmup Iteration 7: 31,322 ops/s
Warmup Iteration 8: 28,361 ops/s
Warmup Iteration 9: 26,241 ops/s
Warmup Iteration 10: 24,520 ops/s
Iteration 1: 23,291 ops/s
Iteration 2: 22,062 ops/s
Iteration 3: 20,236 ops/s
Iteration 4: 19,886 ops/s
Iteration 5: 19,379 ops/s
Полный набор тестов доступен здесь . Может кто-нибудь сказать мне, если я делаю что-то не так или это действительно снижение производительности?