1
SEREN
Sérialisation & magie noire
SPEAKER SEREN ? TECH USAGE PERFS & MORE...
2
Olivier Croisier
Java SpecialistConsultant @ Zenika
@OlivierCroisier
"The Coder's Breakfast"http://thecodersbreakfast.net
SPEAKER SEREN ? TECH USAGE PERFS & MORE...
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...
4
•SEREN : Serialization Enhancer
•Agent Java
•Bytecode engineering
•Améliore vos POJO !
SPEAKER SEREN ?
COMMENT USAGE PERFS & MORE...
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...
6
•Sérialiser un Objet est coûteux
•Ecrire seulement les données utiles
•Wrappers numériques & Strings
SPEAKER SEREN ?
TECH USAGE PERFS & MORE...
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...
8
•Quelles classes ?
•ClassFilters- PackageList- PackagePattern- ClassPattern- Annotation- Custom !
SPEAKER SEREN ?
TECH USAGE PERFS & MORE...
9
•Quels champs ?
•Non-transientNon static
•Champs "final"- Reflexion ?- Unsafe ?- Assignation directe
SPEAKER SEREN ?
TECH USAGE PERFS & MORE...
10
•Classpath- javassist.jar- seren.properties
•Option de JVM-javaagent:seren.jar
•Votre codeAucune modification !
SPEAKER SEREN ? TECH
USAGE PERFS & MORE...
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
12
SPEAKER SEREN ? TECH USAGE
PERFS & MORE...
•Graphe d'objets
•Champs
•Optimisations existantes
•Destination du flux
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
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
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
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
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
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
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
20
•Codehttp://github.com/oliviercroisier/seren
•Licence 3-Clause BSD Licence
•Merci à- Heinz Kabutz- Thomas Darimont- Thomas Segismont
SPEAKER SEREN ? TECH USAGE PERFS
& MORE...
Top Related