fastjson 벤치마크
fastjson-1.2.11에서는 직렬화 성능이 크게 향상되었고, 역직렬화 성능도 향상되어 다른 직렬화 라이브러리와 성능 비교 테스트를 진행했습니다.
테스트 시나리오
는 공식 테스트에서 아직 최신 버전을 사용하지 않았기 때문에 https://github.com/eihay/jvm-serializers의 다양한 직렬화 라이브러리 작성자가 인정한 테스트를 채택했습니다. fastjson이므로 최신 API를 사용하도록 포크하고 수정했습니다. 코드는 여기에 있습니다https://github.com/wenshao/jvm-serializers/tree/fastjson-1.2.11
테스트 실행
git clone https://github.com/wenshao/jvm-serializers.git cd jvm-serializers/tpc make ./run-bench.sh json/jackson+afterburner/databind,json/fastjson/databind,json/fastjson_array/databind,protobuf,json/jackson/databind,msgpack/databind
클래스 구조
eihay의 씬에는 3개의 클래스가 있는데, 클래스 구조는 다음과 같습니다
class MediaContent { public Media media; public Image[] images; } class Media implements java.io.Serializable { public enum Player { JAVA, FLASH } public String uri; public String title; // Can be unset. public int width; public int height; public String format; public long duration; public long size; public boolean hasBitrate; public List<String> persons; public Player player; public String copyright; // Can be unset. } class Image { public enum Size { SMALL, LARGE } public String uri; public String title; // Can be null public int width; public int height; public Size size; }
여기에서 자세한 코드를 확인하세요:
- https://github.com/wenshao/jvm-serializers/blob/fastjson-1.2.11/tpc/src/data/media/MediaContent.java
- https: / /github.com/wenshao/jvm-serializers/blob/fastjson-1.2.11/tpc/src/data/media/Media.java
- https://github.com/wenshao/jvm-serializers/blob / fastjson-1.2.11/tpc/src/data/media/Image.java
테스트 데이터
테스트 시나리오는 media.1.cks이며, 해당 json은 다음과 같습니다
{"images":[{"height":768,"size":"LARGE","title":"Javaone Keynote","uri":"http://javaone.com/keynote_large.jpg","width":1024},{"height":240,"size":"SMALL","title":"Javaone Keynote","uri":"http://javaone.com/keynote_small.jpg","width":320}],"media":{"bitrate":262144,"duration":18000000,"format":"video/mpg4","height":480,"persons":["Bill Gates","Steve Jobs"],"player":"JAVA","size":58982400,"title":"Javaone Keynote","uri":"http://javaone.com/keynote.mpg","width":640}}
fastjson, BeanToArray 모드가 활성화된 경우 해당 json은 다음과 같습니다.
[[[768,1,"Javaone Keynote","http://javaone.com/keynote_large.jpg",1024],[240,0,"Javaone Keynote","http://javaone.com/keynote_small.jpg",320]],[262144,null,18000000,"video/mpg4",480,["Bill Gates","Steve Jobs"],0,58982400,"Javaone Keynote","http://javaone.com/keynote.mpg",640]]
각 라이브러리 버전 테스트에 참여하세요
fastjson-1.2.11jackson-2.7.0protobuf-java-2.3.0.jar
테스트 결과
Alibaba 클라우드 싱가포르 호스트 , 일반 구성, 1 CPU 1024M 메모리
java version "1.8.0_77" Java(TM) SE Runtime Environment (build 1.8.0_77-b03) Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
create ser deser total size +dfl json/fastjson_array/databind 123 1289 1567 2856 281 163 json/fastjson/databind 120 2019 2610 4629 486 262 json/jackson+afterburner/databind 118 2142 3147 5289 485 261 json/jackson/databind 124 2914 4411 7326 485 261 msgpack/databind 122 1525 2180 3705 233 146 protobuf 244 2297 1296 3593 239 149
Raspberry Pi 3
java version "1.8.0_65" Java(TM) SE Runtime Environment (build 1.8.0_65-b17) Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)
create ser deser total size +dfl json/fastjson_array/databind 961 18162 19106 37268 281 163 json/fastjson/databind 976 31240 29890 61129 486 262 json/jackson+afterburner/databind 975 24539 34337 58876 485 261 json/jackson/databind 979 28238 49380 77618 485 261 msgpack/databind 1027 18768 26617 45385 233 146 protobuf 2626 26095 12538 38633 239 149