High-performance
Jackson
ौ୩Java #17 2016-10-01
KOMIYA Atsushi (@komiya_atsushi)
Slide 2
Slide 2 text
KOMIYA Atsushi
@komiya_atsushi
Slide 3
Slide 3 text
Today’s topic
Slide 4
Slide 4 text
Jackson
Slide 5
Slide 5 text
= JSON parser / generator
Ͱͳ͍
(ݫີʹ)
Slide 6
Slide 6 text
“Jackson is a suite of data-
processing tools for Java”
https://github.com/FasterXML/jackson/blob/master/README.md
Slide 7
Slide 7 text
JSON parer / generator
ʰʱඪ४αϙʔτ͍ͯ͠Δ
σʔλॲཧϥΠϒϥϦ
Slide 8
Slide 8 text
Jackson
• JSON processor
• Streaming API
• Data binding (POJO to and from JSON)
• Other formats
• XML, YAML
• Avro, CBOR, CSV, Smile, Protobuf
Slide 9
Slide 9 text
Popular JSON Libraries
• 4,180 usages: Jackson Databind
• 2,820 usages: Gson
• 1,238 usages: Json (org.json)
• 516 usages: JSON.simple
• 494 usages: Jersey Json
※mvnrepository.com ௐɺ2016-10-01 ࣌
Slide 10
Slide 10 text
Jackson as JSON processor
• Pros
• γϦΞϥΠζɾσγϦΞϥΠζͱʹ͍
• ࠷Ͱͳͦ͞͏͚ͩͲ…
• ػೳ͕๛Ͱɺᙱ͍ͱ͜Ζʹख͕ಧ͖͍͢
• ৼΔ͍ͷΧελϚΠζ·͋·͍͋͢͠
• ͍͍ҙຯͰރΕ͍ͯΔ
※ݸਓͷײͰ͋Γɺੑೳɾੑ࣭Λอূ͢ΔͷͰ͋Γ·ͤΜ
Slide 11
Slide 11 text
Jackson as JSON processor
• Cons
• ମܥతʹهड़͞Εͨྑ࣭ͳຊޠυΩϡϝϯτͳ͍
• ػೳ͕๛ա͗Δ͕Ώ͑ʹɺ͍͜ͳ͢ͷ͍͠
• ʮ͜͏͍͏͜ͱͰ͖Δͷ͔ͳʁʯ
ʮͲ͏ͬͯઃఆ͢Ε͍͍Μͩʁʯ
• ࣮៉ྷ͚ͩͲɺΫϥε͕ଟͯ͘ॳݟࡴ͠ײ͕͋
Δ
※ݸਓͷײͰ͋Γɺੑೳɾੑ࣭Λอূ͢ΔͷͰ͋Γ·ͤΜ
Slide 12
Slide 12 text
High-performance
Jackson
Slide 13
Slide 13 text
(JSON prosessor ͱͯ͠
࠷Ͱͳ͍͔͠Εͳ͍͕)
Jackson Λ࠷ʹར༻͍ͨ͠❗
Slide 14
Slide 14 text
Shortest path to
high-performance
• Presentation: Jackson Performance
• https://github.com/FasterXML/jackson-docs/
wiki/Presentation:-Jackson-Performance
• Jackson Best Practices: Performance
• http://wiki.fasterxml.com/
JacksonBestPracticesPerformance
5. Streaming API Λར༻͢Δ
• POJO to and from JSON ɺͲ͏ૡ͍ͯॏ͍
ॲཧͰ͋Δ͜ͱʹมΘΒͳ͍
• POJO ͷΦϒδΣΫτੜ͠ͳ͘ͱɺ
Streaming API Λ͑ JSON ύʔεͰ͖Δ
• Streaming API ͰతͷॲཧΛ࣮͢Δͷେม
͕ͩɺ໘ʹ͓͍ͯҰ൪ޮՌత❗
Slide 33
Slide 33 text
5. Streaming API Λར༻͢Δ
77.969 ops/s (1.567x)
͜ͷ࣮ΛؤுΔ
Conclusion
• Jackson Ͱ POJO to and from JSON ͷγϦΞϥΠζɾσγϦΞ
ϥΠζΛߴʹॲཧ͍ͨ͠ͷͰ͋Ε:
• Jackson ͷΦϒδΣΫτ (ObjectMapper, ObjectReader ͳͲ)
ੵۃతʹ࠶ར༻͠Α͏
• ͳΔ͘ InputStream ΦϒδΣΫτΛ Jackson ʹ༩͑ΔΑ͏
ʹ͠Α͏
• Afterburner ͏͜ͱΛݕ౼͠Α͏
• ͬͱΛՔ͍͗ͨͷͰ͋ΕɺStreaming API Λར༻͠Α͏