Java序列化框架性能比较

实战避坑:泛微E9流程接口与单点登录(SSO)开发全解析(含自定义Action、Restful API与免密登录) 本文深入解析泛微E9流程接口与单点登录(SSO)开发中的关键技术与避坑指南,涵盖自定义Action开发、Restful API鉴权机制及跨系统单点登录实现。通过实战案例与代码示例,帮助开发者高效完成二次开发,解决系统集成中的数据孤岛问题,提升企业信息化建设效率。 阅读详情

 博客: http://colobu.com


jvm-serializers提供了一个很好的比较各种Java序列化的的测试套件。 它罗列了各种序列化框架, 可以自动生成测试报告。
我在AWS c3.xlarge机器上进行了测试,一下是测试报告与解析。

关键的测试数据的统计代码如下:

      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
      
public double runWithTimeMeasurement( int timeMillis, TestCase tc, int iterations) throws Exception
{
long start = System.currentTimeMillis();
double sumTime = 0;
int count = 0;
System.err.println( "test-time "+timeMillis+ " iteration "+iterations);
while ( System.currentTimeMillis()-start < timeMillis )
{
double time = tc.run(transformer, serializer, value, iterations);
sumTime += time;
measurementVals[count] = time;
count++;
}
double avg = sumTime / count;
Arrays.sort(measurementVals, 0,count);
System.err.println( "-----------------------------------------------------------------------------");
System.err.println(serializer.getName());
System.err.println( "min:" + measurementVals[ 0]);
System.err.println( "1/4:"+measurementVals[count/ 4]);
System.err.println( "1/2:"+measurementVals[count/ 2]);
System.err.println( "3/4:"+measurementVals[count/ 4* 3]);
System.err.println( "max:"+measurementVals[count- 1]);
System.err.println( "average:"+ avg + " deviation:"+(avg-measurementVals[count/ 2]));
System.err.println( "-----------------------------------------------------------------------------");
return avg;
}

测试时序列化和反序列化会迭代多次,默认2000次。 测试会有一个限定时间,一轮测试完成后时间还有的话还会继续新的一轮的测试。 因此, 由于不同的框架花费的时间不同, 测试的轮数也不一样。

测试平台

OS:Linux (CentOS 6.4)
JVM:JDK 1.7.0_17
CPU: c3.xlarge
Cores (incl HT):4

免责声明

本测试主要关注无循环引用的数据结构, 但是如此众多的序列化框架还是各有不同:

  • 有些支持循环引用检测
  • 有些会输出全部的元数据,有些不会
  • 有些支持跨平台,有些只支持特定的编程语言
  • 有些是基于文本的,有些却基于二进制
  • 有些支持向前向后兼容, 有些只支持向前或者向后,有些全部不支持

(查看ToolBehavior页面以了解一些框架的特性)
尽管别的测试数据可能会生成不同的测试结果(例如在每个字符串中增加非ascii字符), 此测试还是会提供一个各个序列化框架的性能的原始估计。

序列化框架Serializers(无共享引用)

  • 无循环引用。 一个对象如果被引用两次则会序列化两次
  • 没有手工优化
  • schema预先已知

Ser Time+Deser Time (ns)
Ser Time+Deser Time (ns)Ser Time+Deser Time (ns)

Size, Compressed in bytes
Size, Compressed  in bytesSize, Compressed in bytes

      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
      
pre. create ser deser total size +dfl
protostuff 112 663 917 1580 239 150
fst-flat-pre 81 908 984 1893 251 165
kryo-flat-pre 81 831 1083 1914 212 132
protobuf 149 1625 942 2567 239 149
msgpack-databind 81 1123 1821 2944 233 146
thrift-compact 139 1844 1101 2945 240 148
json/fastjson/databind 82 1710 1633 3343 486 262
thrift 139 2216 1253 3469 349 197
scala/sbinary 166 2122 1451 3573 255 147
smile/jackson+afterburner/databind 81 1757 1868 3625 352 252
smile/jackson/databind 81 2095 2250 4346 338 241
json/jackson+afterburner/databind 81 2006 2548 4554 485 261
json/protostuff-runtime 80 2008 2741 4748 469 243
json/jackson/databind 80 2173 2972 5145 485 261
json/jackson-jr/databind 81 2282 3435 5716 468 255
cbor/jackson/databind 81 4112 2659 6771 397 246
xml/jackson/databind 81 3558 7028 10585 683 286
json/gson/databind 81 7322 7063 14386 486 259
bson/jackson/databind 80 6974 8318 15291 506 286
xml/xstream+c 81 9050 28265 37315 487 244
xml/exi-manual 83 19634 18063 37697 337 327
json/javax-tree/glassfish 1558 16804 23814 40618 485 263
java-built- in 82 7154 37804 44958 889 514
scala/java-built- in 164 11195 62423 73617 1312 700
json/protobuf 142 11815 73133 84949 488 253
json/json-lib/databind 81 45857 165134 210991 485 263

全对象图序列化框架Full Object Graph Serializers

  • 支持全部的object graph读写. Object graph可能包含循环引用.
  • 无预先处理, 没有预先的类生成,注册. 所有都运行时产生, 比如使用反射.
  • 注意通常不会跨编程语言。 然而JSON/XML格式由于其特殊性可以跨语言.

Ser Time+Deser Time (ns)
Ser Time+Deser Time (ns)Ser Time+Deser Time (ns)

Size, Compressed [light] in bytes
Size, Compressed in bytesSize, Compressed in bytes

      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
      
pre. create ser deser total size +dfl
protostuff-graph 112 946 963 1909 239 150
protostuff-graph-runtime 82 1187 1208 2395 241 151
kryo-serializer 81 2091 1858 3949 286 188
fst 81 2075 2041 4116 316 203
jboss-marshalling-river-ct 81 4057 2810 6867 298 199
hessian 80 6683 7234 13917 501 313
jboss-serialization 83 9529 8508 18036 932 582
jboss-marshalling-river 81 5915 28347 34261 694 400
java-built- in-serializer 81 7273 36274 43547 889 514
stephenerialization 59 8396 37359 45756 1093 517
jboss-marshalling- serial 80 15148 39180 54328 856 498
yaml/jackson/databind 82 25969 41084 67053 505 260
json/flexjson/databind 81 25717 61700 87417 503 273

跨语言二进制序列化框架cross Lang Binary Serializers

  • 无循环引用
  • schema预先已知

Ser Time+Deser Time (ns)
Ser Time+Deser Time (ns)Ser Time+Deser Time (ns)

Size, Compressed in bytes
Size, Compressed in bytesSize, Compressed in bytes

      
1
2
3
4
5
6
7
8
9
10
      
pre. create ser deser total size +dfl
protobuf/protostuff 113 695 927 1622 239 149
protobuf/protostuff- runtime 81 971 1105 2075 241 150
protobuf 149 1625 942 2567 239 149
msgpack-databind 81 1123 1821 2944 233 146
thrift-compact 139 1844 1101 2945 240 148
thrift 139 2216 1253 3469 349 197
cbor/jackson/databind 81 4112 2659 6771 397 246
hessian 80 6683 7234 13917 501 313
bson/jackson/databind 80 6974 8318 15291 506 286

XML/JSon序列化框架

  • 基于文本
  • Mixed regarding required preparation, object graph awareness (references).

Ser Time+Deser Time (ns)
Ser Time+Deser Time (ns)Ser Time+Deser Time (ns)

Size, Compressed in bytes
Size, Compressed in bytesSize, Compressed in bytes

      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
      
pre. create ser deser total size +dfl
json/fastjson/databind 82 1710 1633 3343 486 262
json/jackson+afterburner/databind 81 2006 2548 4554 485 261
json/protostuff-runtime 80 2008 2741 4748 469 243
json/jackson/databind 80 2173 2972 5145 485 261
json/jackson-jr/databind 81 2282 3435 5716 468 255
xml/jackson/databind 81 3558 7028 10585 683 286
json/gson/databind 81 7322 7063 14386 486 259
xml/xstream+c 81 9050 28265 37315 487 244
xml/exi-manual 83 19634 18063 37697 337 327
json/javax-tree/glassfish 1558 16804 23814 40618 485 263
yaml/jackson/databind 82 25969 41084 67053 505 260
json/protobuf 142 11815 73133 84949 488 253
json/flexjson/databind 81 25717 61700 87417 503 273
json/json-lib/databind 81 45857 165134 210991 485 263

手工优化的序列化框架Manually optimized Serializers

Ser Time+Deser Time (ns)
Ser Time+Deser Time (ns)Ser Time+Deser Time (ns)

Size, Compressed in bytes
Size, Compressed in bytesSize, Compressed in bytes

      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
      
pre. create ser deser total size +dfl
kryo-manual 81 670 792 1462 211 131
protostuff-manual 81 608 915 1523 239 150
wobly 48 1147 701 1848 251 151
kryo-opt 81 837 1059 1896 209 129
wobly-compact 48 1175 748 1923 225 139
java-manual 80 1341 848 2190 255 147
smile/jackson/manual 82 1270 1476 2746 341 244
msgpack-manual 80 1141 1668 2809 233 146
json/jackson/manual 83 1467 1949 3416 468 253
jboss-marshalling-river-ct-manual 82 2314 1586 3900 289 167
avro-generic 488 2485 1527 4012 221 133
avro-specific 118 2191 1916 4108 221 133
json/protostuff-manual 81 1757 2472 4229 449 233
cbor/jackson/manual 80 3659 1667 5326 386 238
xml/aalto-manual 82 2724 3902 6626 653 304
jboss-marshalling-river-manual 81 2967 5620 8587 483 240
json/gson/manual 81 4798 5826 10624 468 253
xml/woodstox-manual 81 4801 6355 11156 653 304
json/json-smart/manual-tree 82 7623 5110 12733 495 269
json/gson/manual-tree 82 7234 8202 15437 485 259
xml/fastinfo-manual 81 8406 7207 15613 377 284
xml/javolution/manual 80 6781 10766 17547 504 263
json/json.simple/manual 81 7394 10923 18317 495 269
json/org.json/manual-tree 81 8368 10959 19327 485 259
json/svenson/databind 81 5956 14026 19981 495 269
xml/xstream+c-aalto 81 5641 14743 20384 525 273
xml/xstream+c-fastinfo 81 10471 11640 22111 345 264
bson/mongodb/manual 81 4283 19559 23842 495 278
xml/xstream+c-woodstox 80 7326 18877 26203 525 273
json/javax-stream/glassfish 81 12791 21756 34547 468 253
json/jsonij/manual-jpath 83 38635 15094 53729 478 257
json/argo/manual-tree 81 85473 19416 104889 485 263

特性对性能的影响Cost of features

shows performance vs convenience of manually-selected libs.

  • 循环引用, schema预知,手工优化cycle free, schema known at compile time, manual optimization: kryo-manual, msgpack-manual
  • 循环引用, schema预知cycle free, schema known at compile time: protostuff, fst-flat-pre, kryo-flat-pre. (note: protostuff uses class generation while the other two just require a list of classes to be written)
  • 循环引用, schema编译时未知 cycle free, schema UNKNOWN at compile time: fst-flat, kryo-flat, protostuff-runtime, msgpack-databind
  • 全图读写,schema编译时未知 full object graph awareness, schema UNKNOWN at compile time: fst, kryo.

Ser Time+Deser Time (ns)
Ser Time+Deser Time (ns)Ser Time+Deser Time (ns)

Size, Compressed in bytes
Size, Compressed in bytesSize, Compressed in bytes

      
1
2
3
4
5
6
7
8
9
10
11
12
      
pre. create ser deser total size +dfl
kryo-manual 81 670 792 1462 211 131
protostuff 112 663 917 1580 239 150
fst-flat- pre 81 908 984 1893 251 165
kryo-flat- pre 81 831 1083 1914 212 132
protostuff- runtime 82 839 1104 1943 241 151
kryo-flat 81 1037 1468 2505 268 177
fst-flat 81 1230 1469 2700 314 204
msgpack-manual 80 1141 1668 2809 233 146
msgpack-databind 81 1123 1821 2944 233 146
kryo-serializer 81 2091 1858 3949 286 188
fst 81 2075 2041 4116 316 203

全部的测试结果

      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
      
pre. create ser deser total size +dfl
kryo-manual 81 670 792 1462 211 131
protostuff-manual 81 608 915 1523 239 150
protostuff 112 663 917 1580 239 150
protobuf/protostuff 113 695 927 1622 239 149
wobly 48 1147 701 1848 251 151
fst-flat-pre 81 908 984 1893 251 165
kryo-opt 81 837 1059 1896 209 129
protostuff-graph 112 946 963 1909 239 150
kryo-flat-pre 81 831 1083 1914 212 132
wobly-compact 48 1175 748 1923 225 139
protostuff-runtime 82 839 1104 1943 241 151
protobuf/protostuff-runtime 81 971 1105 2075 241 150
java-manual 80 1341 848 2190 255 147
protostuff-graph-runtime 82 1187 1208 2395 241 151
kryo-flat 81 1037 1468 2505 268 177
protobuf 149 1625 942 2567 239 149
fst-flat 81 1230 1469 2700 314 204
smile/jackson/manual 82 1270 1476 2746 341 244
msgpack-manual 80 1141 1668 2809 233 146
msgpack-databind 81 1123 1821 2944 233 146
thrift-compact 139 1844 1101 2945 240 148
json/fastjson/databind 82 1710 1633 3343 486 262
json/jackson/manual 83 1467 1949 3416 468 253
thrift 139 2216 1253 3469 349 197
scala/sbinary 166 2122 1451 3573 255 147
smile/jackson+afterburner/databind 81 1757 1868 3625 352 252
jboss-marshalling-river-ct-manual 82 2314 1586 3900 289 167
kryo-serializer 81 2091 1858 3949 286 188
avro-generic 488 2485 1527 4012 221 133
avro-specific 118 2191 1916 4108 221 133
fst 81 2075 2041 4116 316 203
json/protostuff-manual 81 1757 2472 4229 449 233
smile/jackson/databind 81 2095 2250 4346 338 241
json/jackson+afterburner/databind 81 2006 2548 4554 485 261
json/protostuff-runtime 80 2008 2741 4748 469 243
json/jackson/databind 80 2173 2972 5145 485 261
cbor/jackson/manual 80 3659 1667 5326 386 238
json/jackson-jr/databind 81 2282 3435 5716 468 255
xml/aalto-manual 82 2724 3902 6626 653 304
cbor/jackson/databind 81 4112 2659 6771 397 246
jboss-marshalling-river-ct 81 4057 2810 6867 298 199
jboss-marshalling-river-manual 81 2967 5620 8587 483 240
xml/jackson/databind 81 3558 7028 10585 683 286
json/gson/manual 81 4798 5826 10624 468 253
xml/woodstox-manual 81 4801 6355 11156 653 304
json/json-smart/manual-tree 82 7623 5110 12733 495 269
hessian 80 6683 7234 13917 501 313
json/gson/databind 81 7322 7063 14386 486 259
bson/jackson/databind 80 6974 8318 15291 506 286
json/gson/manual-tree 82 7234 8202 15437 485 259
xml/fastinfo-manual 81 8406 7207 15613 377 284
xml/javolution/manual 80 6781 10766 17547 504 263
jboss-serialization 83 9529 8508 18036 932 582
json/json.simple/manual 81 7394 10923 18317 495 269
json/org.json/manual-tree 81 8368 10959 19327 485 259
json/svenson/databind 81 5956 14026 19981 495 269
xml/xstream+c-aalto 81 5641 14743 20384 525 273
xml/xstream+c-fastinfo 81 10471 11640 22111 345 264
bson/mongodb/manual 81 4283 19559 23842 495 278
xml/xstream+c-woodstox 80 7326 18877 26203 525 273
jboss-marshalling-river 81 5915 28347 34261 694 400
json/javax-stream/glassfish 81 12791 21756 34547 468 253
xml/xstream+c 81 9050 28265 37315 487 244
xml/exi-manual 83 19634 18063 37697 337 327
json/javax-tree/glassfish 1558 16804 23814 40618 485 263
java-built- in-serializer 81 7273 36274 43547 889 514
java-built- in 82 7154 37804 44958 889 514
stephenerialization 59 8396 37359 45756 1093 517
json/jsonij/manual-jpath 83 38635 15094 53729 478 257
jboss-marshalling- serial 80 15148 39180 54328 856 498
yaml/jackson/databind 82 25969 41084 67053 505 260
scala/java-built- in 164 11195 62423 73617 1312 700
json/protobuf 142 11815 73133 84949 488 253
json/flexjson/databind 81 25717 61700 87417 503 273
json/argo/manual-tree 81 85473 19416 104889 485 263
json/json-lib/databind 81 45857 165134 210991 485 263
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
      
pre. Effort Format Structure Misc
kryo-manual MANUAL_OPT BINARY FLAT_TREE [] manually optimized
protostuff-manual MANUAL_OPT BINARY FLAT_TREE [] manual
protostuff CLASSES_KNOWN BINARY FLAT_TREE [] generated code
protobuf/protostuff CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE [] protobuf + generated code
wobly MANUAL_OPT BINARY FLAT_TREE []
fst-flat-pre CLASSES_KNOWN BINARY FLAT_TREE [] fst in unshared mode with preregistered classes
kryo-opt MANUAL_OPT BINARY FLAT_TREE [] manually optimized
protostuff-graph CLASSES_KNOWN BINARY FULL_GRAPH [] graph + generated code
kryo-flat-pre CLASSES_KNOWN BINARY FLAT_TREE [] no shared refs, preregistered classes
wobly-compact MANUAL_OPT BINARY FLAT_TREE []
protostuff-runtime ZERO_KNOWLEDGE BINARY FLAT_TREE [] reflection
protobuf/protostuff-runtime ZERO_KNOWLEDGE BIN_CROSSLANG FLAT_TREE [] protobuf + reflection
java-manual MANUAL_OPT BINARY FLAT_TREE []
protostuff-graph-runtime ZERO_KNOWLEDGE BINARY FULL_GRAPH [] graph + reflection
kryo-flat ZERO_KNOWLEDGE BINARY FLAT_TREE [] default, no shared refs
protobuf CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE []
fst-flat ZERO_KNOWLEDGE BINARY FLAT_TREE [] fst default, but unshared mode
smile/jackson/manual MANUAL_OPT BINARY FLAT_TREE []
msgpack-manual MANUAL_OPT BIN_CROSSLANG FLAT_TREE []
msgpack-databind CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE []
thrift-compact CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE []
json/fastjson/databind ZERO_KNOWLEDGE JSON FLAT_TREE []
json/jackson/manual MANUAL_OPT JSON FLAT_TREE []
thrift CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE []
scala/sbinary MISC MISC UNKNOWN [] null
smile/jackson+afterburner/databind ZERO_KNOWLEDGE BINARY FLAT_TREE []
jboss-marshalling-river-ct-manual MANUAL_OPT BINARY FULL_GRAPH [] full graph preregistered classes, manual optimization
kryo-serializer ZERO_KNOWLEDGE BINARY FULL_GRAPH [] default
avro-generic MANUAL_OPT BIN_CROSSLANG FLAT_TREE []
avro-specific MANUAL_OPT BIN_CROSSLANG UNKNOWN []
fst ZERO_KNOWLEDGE BINARY FULL_GRAPH [] default: JDK serialization drop-in-replacement mode
json/protostuff-manual MANUAL_OPT JSON FLAT_TREE [] json + manual
smile/jackson/databind ZERO_KNOWLEDGE BINARY FLAT_TREE []
json/jackson+afterburner/databind ZERO_KNOWLEDGE JSON FLAT_TREE [] uses bytecode generation to reduce overhead
json/protostuff-runtime ZERO_KNOWLEDGE JSON FLAT_TREE [] json + reflection
json/jackson/databind ZERO_KNOWLEDGE JSON FLAT_TREE []
cbor/jackson/manual MANUAL_OPT BIN_CROSSLANG FLAT_TREE []
json/jackson-jr/databind ZERO_KNOWLEDGE JSON FLAT_TREE []
xml/aalto-manual MANUAL_OPT XML UNKNOWN []
cbor/jackson/databind ZERO_KNOWLEDGE BIN_CROSSLANG FLAT_TREE []
jboss-marshalling-river-ct CLASSES_KNOWN BINARY FULL_GRAPH [] full graph with preregistered classes
jboss-marshalling-river-manual MANUAL_OPT BINARY FULL_GRAPH [] full graph with manual optimizations
xml/jackson/databind ZERO_KNOWLEDGE XML FLAT_TREE []
json/gson/manual MANUAL_OPT JSON FLAT_TREE []
xml/woodstox-manual MANUAL_OPT XML UNKNOWN []
json/json-smart/manual-tree MANUAL_OPT JSON FLAT_TREE []
hessian ZERO_KNOWLEDGE BIN_CROSSLANG FULL_GRAPH []
json/gson/databind ZERO_KNOWLEDGE JSON FLAT_TREE []
bson/jackson/databind CLASSES_KNOWN BIN_CROSSLANG FLAT_TREE []
json/gson/manual-tree MANUAL_OPT JSON FLAT_TREE []
xml/fastinfo-manual MANUAL_OPT XML UNKNOWN []
xml/javolution/manual MANUAL_OPT XML FLAT_TREE []
jboss-serialization ZERO_KNOWLEDGE BINARY FULL_GRAPH []
json/json.simple/manual MANUAL_OPT JSON FLAT_TREE []
json/org.json/manual-tree MANUAL_OPT JSON FLAT_TREE []
json/svenson/databind MANUAL_OPT JSON FLAT_TREE []
xml/xstream+c-aalto MANUAL_OPT XML FLAT_TREE []
xml/xstream+c-fastinfo MANUAL_OPT XML FLAT_TREE []
bson/mongodb/manual MANUAL_OPT BIN_CROSSLANG FLAT_TREE []
xml/xstream+c-woodstox MANUAL_OPT XML FLAT_TREE []
jboss-marshalling-river ZERO_KNOWLEDGE BINARY FULL_GRAPH [] full graph zero knowledge
json/javax-stream/glassfish MANUAL_OPT JSON FLAT_TREE []
xml/xstream+c ZERO_KNOWLEDGE XML FLAT_TREE []
xml/exi-manual ZERO_KNOWLEDGE XML UNKNOWN []
json/javax-tree/glassfish ZERO_KNOWLEDGE JSON FLAT_TREE []
java-built- in-serializer ZERO_KNOWLEDGE BINARY FULL_GRAPH []
java-built- in ZERO_KNOWLEDGE BINARY FLAT_TREE []
stephenerialization ZERO_KNOWLEDGE BINARY FULL_GRAPH [] null
json/jsonij/manual-jpath MANUAL_OPT JSON FLAT_TREE []
jboss-marshalling- serial ZERO_KNOWLEDGE BINARY FULL_GRAPH []
yaml/jackson/databind ZERO_KNOWLEDGE JSON FULL_GRAPH []
scala/java-built- in MISC MISC UNKNOWN [] null
json/protobuf CLASSES_KNOWN JSON FLAT_TREE []
json/flexjson/databind ZERO_KNOWLEDGE JSON FULL_GRAPH []
json/argo/manual-tree MANUAL_OPT JSON FLAT_TREE []
json/json-lib/databind ZERO_KNOWLEDGE JSON FLAT_TREE []


FLAC3D数值三轴测试 本文介绍了使用FLAC3D进行数值三轴测试的命令流程。通过建立圆柱体模型,设置Mohr-Coulomb本构模型及材料参数,施加边界条件和荷载,并定义Fish函数监测应变和应力。命令包括模型创建、网格划分、材料属性定义、边界约束、荷载施加以及结果监测等步骤。该流程可用于模拟岩土材料在三轴条件下的力学响应,为数值分析提供参考。完整代码可从指定链接下载获取。 阅读详情

相关推荐

嵌入式开发必备:手把手教你用DB-9连接器搞定RS-232串口通信(附万用表测试技巧)

本文详细解析了嵌入式开发中RS-232串口通信的硬件连接核心。从DB-9连接器的引脚定义入手,深入讲解DTE与DCE设备角色,明确直连线与交叉线的选择法则,并重点分享了使用万用表进行线缆连通性测试、电压测量及故障诊断的实战技巧,帮助开发者彻底掌握串口通信的硬件连接与排查方法。

tgb345678的博客 1165

java序列化框架全集讲解

Java序列化框架是一种用于在Java应用程序中将对象转换为字节流或从字节流反序列化为对象的工具。序列化是将对象的状态转换为字节流的过程,以便可以将其存储在文件中、通过网络传输或在不同的系统之间共享。反序列化是将字节流转换回对象的过程。Java序列化框架的主要目的是简化对象的序列化和反序列化过程,使开发人员可以更轻松地将对象保存到持久存储中,或者在分布式系统中传输对象。这些框架通常提供了高级功能,如版本控制、自定义序列化方式、压缩和加密等。

hello.reader 1万+

群晖NAS搭建Git Server避坑指南:从SSH配置到权限管理的完整流程

本文提供了一份详尽的群晖NAS搭建Git Server实战指南。文章从启用并安全配置SSH服务入手,深入解析了用户权限体系设计、SSH连接与仓库初始化、客户端SSH密钥配置等核心步骤,并提供了常见错误排查与生产环境加固方案,帮助开发者成功构建私有、安全的代码托管平台。

rock5的博客 419

Java序列化框架的比较(JDK、FastJson、Hessian、Hessian2、Protostuff)

概念: 序列化:将Java对象转化为字节数组 反序列化:将字节数组转化为Java对象 在RPC应用中,进行跨进程远程调用的时候,需要使用特定的序列化技术,需要对进行网络传输的对象进行序列化和反序列化。 影响序列化选择有两个因素: 序列化之后码流的大小,如果太大,那么将会影响网络传输的性能。 序列化和反序列化过程的性能 常用的序列化框架性能比较 序列化框架对比测试: JDK FastJson Hessian Hessian2 Protostuff 准备 需要序列化的对象,这是一个复杂的对象。 Net

张井天的博客 2299

帝国CMS v7.5存储型XSS漏洞挖掘与修复实战

存储型XSS(跨站脚本攻击)是一种常见的Web安全漏洞,其核心原理是攻击者将恶意脚本代码提交并永久存储在服务器端(如数据库),当其他用户访问包含该数据的页面时,脚本会在其浏览器中执行。这种漏洞的危害在于其持久性和广泛的影响范围,可能导致用户Cookie被窃取、会话被劫持,甚至引发蠕虫式传播。从技术价值看,理解存储型XSS有助于掌握Web应用安全的核心逻辑,即数据在输入、处理和输出全链路中的安全风险。在内容管理系统(CMS)等Web应用场景中,用户可控的输入点(如个人资料、评论、公告)若未经妥善过滤和输出编码

weixin_29327525的博客 299

JavaScript 书签脚本实战:腾讯/优酷/爱奇艺等5大视频站m3u8链接一键提取

本文详细介绍了如何使用JavaScript书签脚本一键提取腾讯视频、优酷、爱奇艺等五大视频平台的m3u8流媒体链接。通过分析播放器内部对象结构,开发者可以高效获取视频源文件,避免录屏画质损失。文章包含各平台适配方案、实战增强功能开发及企业级解决方案设计,帮助用户快速掌握这一实用技术。

weixin_27945229的博客 604

Java的序列化常用框架

1、FasterXML Jackson <!--jackson--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.2</version> </dependency> 1.1、jackson常用

zengjyxxz的博客 371

threejs开发可视化数字城市效果

theme: condensed-night-purple 灵感图 现在随着城市的发展,越来越多的智慧摄像头,都被互联网公司布到城市的各个角落,举一个例子,一个大楼上上下下都被布置了智能摄像头,用于监控火势,人员进出,工装工牌佩戴等监控,这时候为了美化项目,大公司都会将城市的区域作为对象,进行3d可视化交互,接下来的内容,就是基于以上元素,开发的一款城市数据可视化的demo,包含楼宇特...

weixin_41770018的博客 1579

几种Java常用序列化框架的选型与对比

一  背景介绍序列化与反序列化是我们日常数据持久化和网络传输中经常使用的技术,但是目前各种序列化框架让人眼花缭乱,不清楚什么场景到底采用哪种序列化框架。本文会将业界开源的序列化框架进行对比测试,分别从通用性、易用性、可扩展性、性能和数据类型与Java语法支持五方面给出对比测试。 通用性:通用性是指序列化框架是否支持跨语言、跨平台。 易用性:易用性是指序列化框架是否便于使用、调试,会影响开发效率。 可扩展性:随着业务的发展,传输实体可能会发生变化,但是旧实体有可能还会被使用。这时候就需.

python88889的博客 824

【Unity】【2D】用连续图片生成动画Animation的简明步骤

本文介绍了Unity中使用2D连续图片制作2D动画Animation的简明步骤。

O青草O的博客 Unity和游戏制作知识分享 718

R语言中的混淆矩阵(Confusion Matrix)是一种常用的评估多分类模型性能的工具

除了准确率,混淆矩阵还提供了其他有用的指标,如灵敏度(Sensitivity)、特异度(Specificity)、精确度(Precision)和召回率(Recall)。混淆矩阵通过比较模型预测结果与实际标签的一致性,帮助我们了解模型的分类准确性和错误类型。此外,混淆矩阵还提供了各种错误类型的统计信息,如假阳性(False Positive)和假阴性(False Negative)等。通过混淆矩阵,我们可以了解模型的整体性能和错误类型,从而对模型进行评估和改进。最后,为了更好地理解混淆矩阵的结果,可以使用。

HackSquad的博客 972

Java中常用的序列化方式以及性能对比

什么是:将对象转换为二进制形式为什么需要:持久化存储and网络传输。三者序列化的大小和耗时如下图:可以看到,Java自带的序列化表现是最差的,但是Java序列化最简单,如果是对性能没有什么要求,并且量很小,可以考虑使用。

wang0907的博客 1305

为YOLO11更换Backbone(一):轻量化之星GhostNet

摘要: 本文重点介绍了轻量化Backbone网络GhostNet及其在YOLO11中的应用。首先分析了Backbone网络在目标检测中的重要性,指出其需平衡特征提取能力和计算效率的需求。然后详细解析了GhostNet的核心思想,包括其通过"幽灵模块"生成冗余特征的设计原理,该模块使用1×1卷积生成少量内在特征,再通过廉价线性变换生成更多幽灵特征,显著降低了计算量。GhostNet的创新设计使其在保持精度的同时大幅减少了参数和FLOPs,为YOLO11等目标检测模型提供了高效的轻量化解决方

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1497

Java序列化框架性能比較

 博客: http://colobu.com jvm-serializers提供了一个非常好的比較各种Java序列化的的測试套件。 它罗列了各种序列化框架。 能够自己主动生成測试报告。 我在AWS c3.xlarge机器上进行了測试,一下是測试报告与解析。 关键的測试数据的统计代码例如以下: 123456789101112131415161718...

weixin_34249367的博客 114

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java 序列化框架_Java序列化框架性能比較

pre. Effort Format Structure Misckryo-manual MANUAL_OPT BINARY FLAT_TREE [] manually optimizedprotostuff-manual ...

weixin_35718671的博客 165

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

高性能序列化:Protobuf与Avro

在分布式系统、微服务架构和大数据处理中,数据的序列化与反序列化性能至关重要。Google的Protocol Buffers(Protobuf)和Apache Avro是两种广泛使用的高性能序列化框架。本文将详细介绍这两种框架的基本概念、优缺点,并通过代码示例展示如何在Java中使用它们。

weixin_53840353的博客 1356

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

序列化和反序列化

文章目录1.概念2.评价一个序列化算法优劣的两个重要指标3.序列化技术3.1 Java自身提供的序列化机制3.1.1 如何实现一个序列化操作3.1.2 序列号高阶认识1) serialVersionUID 的作用:2) 静态变量序列化3)父类的序列化4)transient 关键字5)序列化的存储规则3.2 XML 序列化框架3.3 JSON 序列化框架3.4 Hessian 序列化框架3.5 Pr...

Visonws的博客 753

java序列化框架对比_序列化框架的选型和比对

序列化通信将对象转换为字节数组,方便在网络中进行对象的传输。在网络通信中,不同的计算机进行相互通信主要的方式就是将数据流从一台机器传输给另外一台计算机,常见的传输协议包括了TCP,UDP,HTTP等,网络io的方式主要包括有了aio,bio,nio三种方式。当客户端将需要请求的数据封装好了之后就需要进行转换为二进制格式再转换为流进行传输,当服务端接收到流之后再将数据解析为二进制格式的内容,再按照约...

weixin_33121737的博客 512

Java序列化性能终极对决:Protobuf vs Avro深度评测

在现代Java开发中,高效的数据序列化框架对系统性能至关重要。Protobuf和Avro作为两大主流序列化方案,各有千秋。本文将深入对比它们的性能表现,帮助你做出最佳选择!🚀 ## 两大序列化框架简介 **Protobuf(Protocol Buffers)** 是Google开发的高效数据交换格式,以其紧凑的二进制编码和快速的序列化速度而闻名。**Avro** 则是Apache旗下的数据序

gitblog_00596的博客 961

Hadoop序列化机制深度解析:从设计原理到性能影响

Hadoop序列化体系的核心是Writable/*** 将对象序列化到输出流/*** 从输入流反序列化填充对象DataOutput;/*** 将对象序列化到输出流/*** 从输入流反序列化填充对象DataInput;/*** 将对象序列化到输出流/*** 从输入流反序列化填充对象/*** 将对象序列化到输出流*//*** 从输入流反序列化填充对象*/关键设计。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 2835

java rmi性能_Java性能分析比较:远程调用方法

【IT168技术】现在,Java远程调用方法很多,各种方法的优缺点网络上也有很多的参考文章,这次我对几个典型的Java远程调用方法做了一个简单的性能分析比较,可供大家参考。测试环境:CPU:奔腾双核 T4500,内存:DDR3-1067 2G,Web容器:Tomcat6.0.33,操作系统:WinXP-sp3测试项目:①RMI:用Spring3集成发布。②hessian:用Spring3集成发布到...

weixin_39671405的博客 631
上一篇: 最流行的android组件大全
下一篇: Sass基础
colobu
colobu 业界专家认证 业界专家认证
博客等级 码龄26年 406粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值