jvm internals (2015)
TRANSCRIPT
![Page 1: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/1.jpg)
JVM INTERNALSIntroduction to Virtual Machines and the JVM
1
Luiz Testonwww.fracta.cc
![Page 2: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/2.jpg)
This presentation is available online atfracta.cc/presentations/jvm
2
![Page 3: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/3.jpg)
VIRTUAL MACHINES
3
![Page 4: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/4.jpg)
Mimics a Real Machine
4
![Page 5: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/5.jpg)
Loads and execute code
5
![Page 6: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/6.jpg)
CLASSLOADERS
6
![Page 7: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/7.jpg)
Java classes are loaded on demand
7
![Page 8: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/8.jpg)
How they are loaded is up to the classloader
8
![Page 9: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/9.jpg)
9
![Page 10: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/10.jpg)
10
![Page 11: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/11.jpg)
Classloaders are hierarchical
11
![Page 12: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/12.jpg)
12
![Page 13: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/13.jpg)
13
![Page 14: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/14.jpg)
boor jars
LibraryA.jar
LibraryB.jar
14
![Page 15: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/15.jpg)
boor jars
LibraryA.jar
LibraryB.jar
Load class “Main”
15
![Page 16: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/16.jpg)
boor jars
LibraryA.jar
LibraryB.jar
Load class “Main”
Not Here
16
![Page 17: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/17.jpg)
boor jars
LibraryA.jar
LibraryB.jar
Load class “Main”
Not Here
Not Here
17
![Page 18: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/18.jpg)
boor jars
LibraryA.jar
LibraryB.jar
Load class “Main”
Not Here
Not Here
Wait…
18
![Page 19: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/19.jpg)
boor jars
LibraryA.jar
LibraryB.jar
Load class “Main”
Not Here
Not Here
Not Here
run time generated code
19
![Page 20: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/20.jpg)
boor jars
LibraryA.jar
LibraryB.jar
Load class “Main”
Not Here
Not Here
Not Here
run time generated code Here!
20
![Page 21: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/21.jpg)
HOW TO EXECUTE CODE?
21
![Page 22: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/22.jpg)
INTERPRETING
22
![Page 23: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/23.jpg)
Line of text AST
23
![Page 24: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/24.jpg)
Simple example: sum of two numbers
24
![Page 25: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/25.jpg)
25
![Page 26: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/26.jpg)
int variable: j
26
![Page 27: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/27.jpg)
int variable: jint variable: i
27
![Page 28: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/28.jpg)
int variable: jint variable: i
sum
28
![Page 29: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/29.jpg)
int variable: jint variable: i
sum
return
29
![Page 30: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/30.jpg)
Errors usually are caught at runtime
30
![Page 31: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/31.jpg)
COMPILING
31
![Page 32: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/32.jpg)
Code compiled to binary prior to the execution.
32
![Page 33: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/33.jpg)
Some errors can be caught at compile time
33
![Page 34: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/34.jpg)
Binary can be: native code, VM bytecode and so on…
34
![Page 35: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/35.jpg)
Bytecode: Byte sized OPCODE
35
![Page 36: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/36.jpg)
REGISTER BASED VM
36
![Page 37: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/37.jpg)
Works like your processor
37
![Page 38: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/38.jpg)
Simple example: summing two numbers
38
![Page 39: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/39.jpg)
R1 R2 RN…
39
![Page 40: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/40.jpg)
R1 R2 RN…1
40
![Page 41: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/41.jpg)
R1 R2 RN…1
+2
41
![Page 42: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/42.jpg)
R1 R2 RN…3
42
![Page 43: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/43.jpg)
STACK BASED VM
43
![Page 44: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/44.jpg)
Works like you HP48G calculator
44
![Page 45: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/45.jpg)
45
![Page 46: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/46.jpg)
1
46
![Page 47: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/47.jpg)
1
2
47
![Page 48: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/48.jpg)
1
2+
48
![Page 49: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/49.jpg)
3
49
![Page 50: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/50.jpg)
JVM IS STACK BASED
50
![Page 51: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/51.jpg)
Eventually byte code is compiled to native code on the fly
51
![Page 52: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/52.jpg)
DYNAMIC MEMORY
52
![Page 53: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/53.jpg)
C/C++ Approach: memory as a big array
53
![Page 54: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/54.jpg)
index size variable
54
![Page 55: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/55.jpg)
index size variable
1 1 i
55
![Page 56: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/56.jpg)
index size variable
1 1 i
2 2 l
56
![Page 57: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/57.jpg)
index size variable
1 1 i
2 2 l
3 4 c
57
![Page 58: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/58.jpg)
index size variable
1 1 i
3 4 c
58
![Page 59: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/59.jpg)
Few caveats for this approach
59
![Page 60: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/60.jpg)
Possible memory fragmentation
60
![Page 61: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/61.jpg)
Possible memory fragmentation
4 sized var doesn’t fit
61
![Page 62: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/62.jpg)
Possible memory leak
62
![Page 63: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/63.jpg)
Possible memory leak
used vars unused vars
63
![Page 64: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/64.jpg)
Possible invalid pointer
64
![Page 65: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/65.jpg)
Possible invalid pointer
variable pointing here
65
![Page 66: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/66.jpg)
JVM based approach: Garbage Collector
66
![Page 67: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/67.jpg)
Eden
Survivor 1
Survivor 2
GC
67
![Page 68: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/68.jpg)
Eden
Survivor 1
Survivor 2
GC
68
![Page 69: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/69.jpg)
Eden
Survivor 1
Survivor 2
Wait…GC
69
![Page 70: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/70.jpg)
Eden
Survivor 1
Survivor 2
off you goGC
70
![Page 71: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/71.jpg)
Eden
Survivor 1
Survivor 2
GC
t
71
![Page 72: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/72.jpg)
Eden
Survivor 1
Survivor 2
GC
t ?
72
![Page 73: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/73.jpg)
Eden
Survivor 1
Survivor 2
GC
t ?
Wait…
73
![Page 74: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/74.jpg)
Eden
Survivor 1
Survivor 2
GC
? t
Wait…
74
![Page 75: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/75.jpg)
Eden
Survivor 1
Survivor 2
GC
? t
off you go
75
![Page 76: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/76.jpg)
Eden
Survivor 1
Survivor 2
GC
? t
t2
76
![Page 77: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/77.jpg)
Eden
Survivor 1
Survivor 2
GC
? t
t2
t is still used within t2
77
![Page 78: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/78.jpg)
Eden
Survivor 1
Survivor 2
GC
? t
t2
? is not used…
78
![Page 79: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/79.jpg)
Eden
Survivor 1
Survivor 2
GC
? t
t2
Whatever, I have plenty of memory
79
![Page 80: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/80.jpg)
Few caveats for this approach
80
![Page 81: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/81.jpg)
GC Wait…
GC needs to be properly configured
81
![Page 82: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/82.jpg)
GC …
GC can be unpredictable
82
![Page 83: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/83.jpg)
GC
No control over memory layout
83
![Page 84: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/84.jpg)
GC
No control over memory layout
Let me do this job!
84
![Page 85: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/85.jpg)
GCManaging memory
is hard!
85
![Page 86: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/86.jpg)
GC Having a GC doing the hard work is good.
86
![Page 87: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/87.jpg)
HANDS ON
87
![Page 88: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/88.jpg)
• Create a .java file
• Compile it into a .class file
• Analyse its binary content
![Page 89: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/89.jpg)
89
![Page 90: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/90.jpg)
90
![Page 91: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/91.jpg)
91
![Page 92: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/92.jpg)
92
magic number
![Page 93: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/93.jpg)
93
Source code info (can be removed by
compilation args)
![Page 94: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/94.jpg)
94
Optimisations?
![Page 95: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/95.jpg)
95
Yes, we appended to a string, but strings are immutable in Java.
![Page 96: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/96.jpg)
96
the addTimes method
![Page 97: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/97.jpg)
Time to take a look on the JVM Assembly code
97
![Page 98: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/98.jpg)
98
![Page 99: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/99.jpg)
99
![Page 100: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/100.jpg)
100
main method
![Page 101: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/101.jpg)
101
arg to int into a variable
![Page 102: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/102.jpg)
102
new SumArg1Arg2Times
![Page 103: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/103.jpg)
103
StringBuilder optimisation
![Page 104: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/104.jpg)
104
![Page 105: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/105.jpg)
105
Constructor
![Page 106: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/106.jpg)
106
can you see the loop?
![Page 107: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/107.jpg)
107
can you see the loop?
![Page 108: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/108.jpg)
108
add method changing a field
![Page 109: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/109.jpg)
Going further, let’s look the native assembly code
109
![Page 110: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/110.jpg)
• Google for java dissablembler plugin. Install it (hdis-i386 or hdis-amd64)
• See the native assembly output
• Enjoy analysing it
![Page 111: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/111.jpg)
![Page 112: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/112.jpg)
large iteration count, so it can be JIT compiled
![Page 113: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/113.jpg)
![Page 114: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/114.jpg)
native code for java.lang.Object constructor
![Page 115: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/115.jpg)
![Page 116: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/116.jpg)
native code for addTimes
![Page 117: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/117.jpg)
related to the loop within addTimes
![Page 118: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/118.jpg)
native assembly
![Page 119: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/119.jpg)
related bytecode
![Page 120: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/120.jpg)
![Page 121: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/121.jpg)
native code for add method
![Page 122: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/122.jpg)
bytecode for add method
![Page 123: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/123.jpg)
QUESTIONS?
![Page 124: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/124.jpg)
WHO AM I
Luiz Teston
Principle Engineer, CTO at FRACTA • 15 years on the field, working on non trivial projects using
Java, C++ and functional programming• [email protected]• http://fracta.cc• http://linkedin.com/in/teston• http://twitter.com/FeuTeston
![Page 125: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/125.jpg)
KEEP IN TOUCH
Feedback about the presentation appreciated.
www.fracta.cc
![Page 126: JVM Internals (2015)](https://reader033.vdocuments.net/reader033/viewer/2022052317/55addb831a28abee338b47a4/html5/thumbnails/126.jpg)
REFERENCES
• Garbage Collection: Algorithms for Automatic Dynamic Memory Management, by Richard Jones and Rafael Lins.
• Virtual Machines: Versatile Platforms for Systems and Processes, by Jim Smith and Ravi Nair.
• https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html
• http://www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/
• http://docs.oracle.com/javase/specs/jvms/se8/html/index.html
• http://mechanical-sympathy.blogspot.ie/2013/06/printing-generated-assembly-code-from.html
• http://www.slideshare.net/CharlesNutter/redev-2011-jvm-jit-for-dummies-what-the-jvm-does-with-your-bytecode-when-youre-not-looking
126