Seren

20
1 SEREN Sérialisation & magie noire

Transcript of Seren

Page 1: Seren

1

SEREN 

Sérialisation & magie noire

SPEAKER SEREN ? TECH USAGE PERFS & MORE...

Page 2: Seren

2

Olivier Croisier

Java SpecialistConsultant @ Zenika

@OlivierCroisier

"The Coder's Breakfast"http://thecodersbreakfast.net

SPEAKER SEREN ? TECH USAGE PERFS & MORE...

Page 3: Seren

3

•La sérialisation est utilisée partout

•Efficace et robuste

•Mais elle peut être améliorée !

•… Automatiquement ?

SPEAKER SEREN ?

COMMENT USAGE PERFS & MORE...

Page 4: Seren

4

•SEREN : Serialization Enhancer

•Agent Java

•Bytecode engineering

•Améliore vos POJO !

SPEAKER SEREN ?

COMMENT USAGE PERFS & MORE...

Page 5: Seren

5

•Se branche sur le mécanisme standard de sérialisation

•Génère des méthodes optimiséeswriteObject & readObject

100101010101010101010100100101010101100101010100

writeReplace writeObject

readResolve readObject

SPEAKER SEREN ?

TECH USAGE PERFS & MORE...

Page 6: Seren

6

•Sérialiser un Objet est coûteux

•Ecrire seulement les données utiles

•Wrappers numériques & Strings

SPEAKER SEREN ?

TECH USAGE PERFS & MORE...

Page 7: Seren

7

•Wrappers numériques- booléen pour gérer "null"- valeur primitive

•Strings- booléen pour gérer "null"- caractères UTF8

SPEAKER SEREN ?

TECH USAGE PERFS & MORE...

Page 8: Seren

8

•Quelles classes ?

•ClassFilters- PackageList- PackagePattern- ClassPattern- Annotation- Custom !

SPEAKER SEREN ?

TECH USAGE PERFS & MORE...

Page 9: Seren

9

•Quels champs ?

•Non-transientNon static

•Champs "final"- Reflexion ?- Unsafe ?- Assignation directe

SPEAKER SEREN ?

TECH USAGE PERFS & MORE...

Page 10: Seren

10

•Classpath- javassist.jar- seren.properties

•Option de JVM-javaagent:seren.jar

•Votre codeAucune modification !

SPEAKER SEREN ? TECH

USAGE PERFS & MORE...

Page 11: Seren

11

Seren.properties

SPEAKER SEREN ? TECH

USAGE PERFS & MORE... // Seren configuration

seren.filter=byPackageListseren.verbose=true

// Filter definitionfilter.byPackageList=seren.filter.PackageListFilterfilter.byPackageList.packages=com.company.project.model

Page 12: Seren

12

SPEAKER SEREN ? TECH USAGE

PERFS & MORE...

•Graphe d'objets

•Champs

•Optimisations existantes

•Destination du flux

Page 13: Seren

13

0

50

100

150

200

250

300

350

400

450

500

SPEAKER SEREN ? TECH USAGE

PERFS & MORE...

String, fixe

Java : 380 msSeren : 425 ms

Boost : x 0.9

Page 14: Seren

14

0

100

200

300

400

500

600

700

800

900

1000

SPEAKER SEREN ? TECH USAGE

PERFS & MORE...

String, aléatoire

Java : 920 msSeren : 510 ms

Boost : x 1.8

Page 15: Seren

15

0

50

100

150

200

250

300

350

400

450

500

SPEAKER SEREN ? TECH USAGE

PERFS & MORE...

Integer < 128

Java : 400 msSeren : 345 ms

Boost : x 1.15

Page 16: Seren

16

0

100

200

300

400

500

600

700

800

900

1000

SPEAKER SEREN ? TECH USAGE

PERFS & MORE...

Integer >= 128

Java : 880 msSeren : 350 ms

Boost : x 2.5

Page 17: Seren

17

0

500

1000

1500

2000

2500

3000

SPEAKER SEREN ? TECH USAGE

PERFS & MORE...

POJO- Long id- String firstName- String lastName

Java : 2090 msSeren : 690 ms

Boost : x 3

Page 18: Seren

18

0

500

1000

1500

2000

2500

3000

SPEAKER SEREN ? TECH USAGE

PERFS & MORE...

POJO- Long id- String firstName- String lastName- Date birthDate

Java : 2930 msSeren : 1220 ms

Boost : x 2.4

Page 19: Seren

19

0

10000

20000

30000

40000

50000

60000

SPEAKER SEREN ? TECH USAGE

PERFS & MORE... thrift-protobuf-compare

.googlecode.com

Boost : x 1.04 – 1.09

Page 20: Seren

20

•Codehttp://github.com/oliviercroisier/seren

•Licence 3-Clause BSD Licence

•Merci à- Heinz Kabutz- Thomas Darimont- Thomas Segismont

SPEAKER SEREN ? TECH USAGE PERFS

& MORE...