For serialisering av et Java-objekt ønsker jeg å teste forskjellen mellom å bruke JSON og å bruke generelle serialiseringsverktøy når det gjelder tidsmessig og romlig ytelse.
JSON velger å bruke fastjson.
Serialiseringsverktøyet bruker Protostuff og Kyro. Hvorfor ikke bruke protobuf? For jeg føler at for en Java-klasse med hundrevis av eksisterende egenskaper, er det litt anti-menneskelig å lage en ny matchende proto-fil. Protostuff er en forbedret versjon av Protobuf, som lar deg serialisere et Java-objekt direkte, ved å bruke det litt som Kyro, uten like mange mellomliggende prosesser som Protobuf. Andre, som Hession, Java med serialisering, osv., sies å ha mye dårligere ytelse enn Kryo og Protobuf, så jeg vet ikke hva jeg kan forvente.
Etter en enkel test fant jeg ut at gapet var ganske åpenbart, så jeg følte at det ikke var behov for en spesifikk vurdering. Klipp ut et avsnitt av loggen og send det ut, alle kjenner på det.
kostnadstid er System.nanoTime(); Alle tre er standardkonfigurasjonene uten noen konfigurasjon. Plassavtrykket etter serialisering er litt lavere enn for protostuff, og begge er mye høyere enn JSON. Dette er lett å forstå, tross alt er json-strengene lesbare, ikke tving for mye. Tiden som kreves for serialisering og deserialisering er bedre enn for Kyro sammenlignet med FastJSON, og forskjellen er ganske tydelig.
Så for å konkludere, hvis det ikke er ekstremt krevende krav til plass, kan Protostuff være det beste valget. Protostuff har en ekstra fordel over Kyro, nemlig at hvis java-klassen legger til felt etter serialisering og før deserialisering (noe som er uunngåelig i praksis), vil Kyro være ubrukelig. Protostuff kan imidlertid brukes så lenge det legges til på slutten av klassen og bruker sun series JDK. Derfor, hvis serialisering brukes i scenarioer som cache, og det serialiserte objektet må lagres lenge, kan du bare velge protostuff.
Selvfølgelig, hvis det er behov for lesbarhet eller lignende, kan du bare bruke json.
|