SlideShare ist ein Scribd-Unternehmen logo
1 von 91
Downloaden Sie, um offline zu lesen
JIT	vs.	AOT:	Unity	And	Conflict	of	
Dynamic	and	Sta:c	Compilers		
for	Java	
	
	
1
Nikita Lipsky
Excelsior LLC
2
Once upon a time,
when C++ was new and
cool,
+++++++++
3
Once upon a time,
when C++ was new and
cool,
+++++++++
4
Once upon a time,
when C++ was new and
cool,
all compilers were static
5
Until into this world
came…	
Java		
6
Until into this world
came…	
Java
Two	Ways	To	Execute	Java	Bytecode	
•  Interpret	
Slow	but	portable	
•  Compile	to	machine	code	
Runs	on	the	actual	hardware	
8
When	to	compile	to	na:ve	code?	
•  At	applica:on	run	:me	
Dynamic	(Just-In-Time,	JIT)	Compila:on	
•  Before	the	applica:on	is	launched/deployed	
Sta:c	(Ahead-Of-Time,	AOT)	Compila:on	
9
JIT	vs.	AOT:	Agenda	
•  Myths	around	Java	AOT	
•  Java	AOT	challenges	and	advantages	
•  Performance:		
– JIT	vs.	AOT	compiler	op:miza:ons	comparison	
•  JIT	and	AOT	in	various	fields	of	use:	
– client-side,	server-side,	embedded,	IOT,	mobile	
11
Nikita	Lipsky	
•  Excelsior	JET	project	ini:ator	
–  16+	years	of	contribu:ons	
–  compiler	engineer		
–  team	lead	
–  product	lead	
–  etc.				
•  TwiSer:	@pjBooms	
•  Excelsior	JET	team	blog:	hSps://www.excelsiorjet.com/blog		
12
13
Who	needs	Java	AOT	
14
Кто знает про Excelsior JET?Кто знает про Excelsior JET?
Java	AOT	Compila:on	Myths	
15
Myth	1.	Java	is	“too	dynamic”	
Reflec:on	
	
	
	
	
Dynamic	class	loading	
16
Myth	2.	AOT	kills	WORA	
WORA	
	
Write	Once	
Run	Anywhere	
	
	
BORA	
Build	Once	
	Run	Anywhere	
17
!=
Myth	3.	AOT	=	Small	EXE	
	
	
”I	would	get	a	small	executable	that	works	
without	a	JVM	(as	if	I	wrote	my	app	in	C)”	
	
18
Myth	3.	AOT	=	Small	EXE	
•  What	about	thousands	of	standard	classes?	
•  Who	will	collect	the	garbage?	
•  What	about	reflec:on?	
19
Java	IS	too	dynamic	
20
Non-standard	Class	Loaders	
•  Override	the	default	reference	resolu:on	logic	
•  Unique	namespaces	
•  Dependency	management	frameworks		
–  OSGi:	Felix,	Equanox	
				to	solve	JAR	hell	problem	
•  Java	EE	servers,	Eclipse	RCP,	plugin	architectures	
21
Non-standard	Class	Loaders	
How	to	compile	such	classes	sta:cally?	
•  Compile	each	class	in	isola:on	
–  Bad	for	performance	
•  Reproduce	reference	resolu:on	logic	of	popular	
class	loaders	
–  Does	not	work	for	arbitrary	class	loaders	
22
Non-standard	Class	Loaders	
Custom	classloaders	support	scheme:	
•  At	AOT	compile	:me:	
–  class	reference	resolu:on	according	classloaders’	logic	
•  At	applica:on	run	:me:	
–  Each	precompiled	class	is	assigned	to	the	classloader	
instance	
Known	to	work	for	Eclipse	RCP	
and	Tomcat	Web	apps	
23
Non-standard	Class	Loaders	
Custom	classloaders	support	scheme:	
•  At	AOT	compile	:me:	
–  class	reference	resolu:on	according	classloaders’	logic	
•  At	applica:on	run	:me:	
–  Each	precompiled	class	is	assigned	to	the	classloader	
instance	
Known	to	work	for	Eclipse	RCP	
and	Tomcat	Web	apps	
24
Why	AOT	for	Java?	
25
Protect	Code	from	Decompilers	
26
Applica:on	Code	Protec:on	
•  Bytecode	emiSed	by	javac	is	extremely	easy	to	
decompile	almost	to	original	source	
Proof:	hSp://bytecodeviewer.com/	
•  Reflec:on	makes	name	obfusca:on	labor-
consuming	and	error	prone,	hinders	code	
maintenance	
•  Possible	to	guess	what	obfuscated	code	does	
References	to	JDK	classes	remain	intact	
27
Applica:on	Code	Protec:on	
•  Na:ve	machine	code	can	only	be	effec:vely	
disassembled,	but	not	decompiled	
•  Applica:on	structure	not	deduc:ble	
from	disassembler	output	
•  Aggressively	op:mized	na:ve	code	only	
remotely	resembles	original	
	 28
Applica:on	Startup	Time	
29
Cold	Start	vs	Warm	Start	
Why	a	re-started	applica:on	starts	much	faster?	
– No	need	to	load	app	code	and	data	from	disk	
– No	need	to	load	system/third-party	dynamic	
libraries	(.DLL,	.so)	either	
30
AOT	Is	Faster?	
•  Na:ve	code	is	“thicker”	than	Java	bytecode	
•  Reading	code	from	disk	oeen	takes	more	
:me	than	its	execu:on,	esp.	on	cold	starts	
31
AOT	IS	Faster!	
1.  Iden:fy	code	that	gets	executed	on	startup	
2.  Place	it	at	the	beginning	of	the	executable	
3.  Preload	the	en:re	“startup	segment”	
sequen:ally	
32
1.6	
2.5	
13.3	
5	
2.5	 2.7	
14	
5.7	
0.1	
1.7	
4	
1.9	
0.9	
2.2	
5	
2.2	
0	
2	
4	
6	
8	
10	
12	
14	
16	
FeedDaemon	 FeedReader	 RSSOwl	(JRE)	 RSSOwl	(JET)	
Startup	:me	on	HDD	(sec)	
Cold	(AC)	 Cold	(baSery)	 Warm	(AC)	 Warm	(baSery)	
33
0.1	
1.7	
4.9	
2.4	
1.3	
2.1	
6.3	
3.4	
0.05	
1.6	
3.8	
1.6	
1	
2	
6.4	
3.3	
0	
1	
2	
3	
4	
5	
6	
7	
FeedDaemon	 FeedReader	 RSSOwl	(JRE)	 RSSOwl	(JET)	
Startup	:me	on	SSD	(sec)	
Cold	(AC)	 Cold	(baSery)	 Warm	(AC)	 Warm	(baSery)	
34
Performance	
35
Myth	4.	AOT	Is	Faster	
	
	
	
	
	
36
Myth	4.	AOT	Is	Faster	
	
				“PROOF”:	By	compiling	Java	staBcally,	we	are	
making	it	equivalent	to	C,	C	is	faster	than	Java,		
therefore	staBcally	compiled	Java	is	faster	
	
	
37
Myth	5.	JIT	Is	Faster	
	
	
38
Myth	5.	JIT	Is	Faster	
	
	
“EffecBve	opBmizaBon	of	a	Java	applicaBon	
is	only	possible	in	the	presence	
of	its	dynamic	execuBon	profile”		
	
39
Compiler	Op:miza:ons	
–  Constant	propaga:on	
–  Dead	code	elimina:on	
–  Common	subexpression	
elimina:on	
–  Inline	subs:tu:on	
–  Method	specializa:on	
–  Loop	unrolling	
–  Loop	versioning	
–  Loop-invariant	code	mo:on	
–  Tail	recursion	elimina:on	
	
–  Call	devirtualiza:on	
–  On-stack	alloca:on	and	
explosion	of	objects	
–  Scalar	replacement	
–  Run:me	checks	removal	
–  Synchroniza:on	removal	
–  Op:mal	code	selec:on	
–  Instruc:on	scheduling	
–  Op:mal	register	alloca:on	
–  etc.	
40
Java	==	OOP	
• Lots	of	methods	
• Lots	of	small	methods	(get/set)	
• Lots	of	virtual	calls	of	small	methods	
41
Call	Devirtualiza:on	
Precondi:on	for	subsequent	inline	subs:tu:on	
•  Class	hierarchy	analysis	
Method	not	overridden	=>	non-virtual	call	
•  Type	inference	
new T().foo(); // Non-virtual
// call of T.foo()
•  Profile	guided	
42
A a;
…																									 		
a.foo();
	
if (RT_Type(a) in CHA-set) {
inlined body of foo()
} else {
a.foo();
}
Idea: method not overriden in subclasses
=>
non-virtual call
Class	Hierarchy	Analysis	(CHA)	
43
compiled to
Type	Analysis	
Idea:		
new A().foo();	//	non-virtual	call.	Always!	
	
44
Type	Analysis	
A a = b ? new B() : new C();
a.foo();//	non-virtual	call	too,	because
																					//	B,	C	extend	A	and	do	not	override	A.foo	
	
45
Type	Analysis	
A a = b ? bar() : baz();
…
a.foo();
	
If bar()	only	returns	new B,			
baz()	only	returns	new С,		
then		
a.foo()	is	non-virtual	and	can	be	inlined	
46
Type	Analysis	
	
	
How	do	we	know		
what bar()	and baz()	return?	
47
Global	Analysis	
•  Analyses	all	methods	of	the	program,	compu:ng	useful	
info	about	each	
–  whether	a	method	always	returns	new T();
–  whether	an	argument	of	a	method	does	not	escape	to	a	
shared	memory	
–  etc.	
•  The	info	is	then	used	during	op:miza:on	of	methods	
48
Stack	Alloca:on	of	Objects	
•  All	Java	objects	are	supposed	to	reside	in	dynamic	
memory	–	on	the	Java	heap	
•  But,	most	objects	are	small	and	temporary	
•  It	is	desirable	to	allocate	them	on	the	stack	
Escape	analysis	determines	whether	a	locally	
created	object	is	not	reachable	aeer	the	method	
returns	
49
Example	
for (Object o: getCollection()) {
doSomething(o);
}
50
Example	
Iterator iter = getCollection().iterator();
while (iter.hasNext()) {
Object o = iter.next();
doSomething(o);
}
51
Example	
Suppose	the	analysis	has	shown	that	getCollection()
always	returns	new	ArrayList()
ArrayList list = getCollection();
Iterator iter = list.iterator();
while (iter.hasNext()) {
Object o = iter.next();
doSomething(o);
}
52
Example	
ArrayList list = getCollection();
ArrayList.Itr iter = new ArrayList.Itr(list);
while (iter.hasNext()) {
Object o = iter.next();
doSomething(o);
}
53
Example	
ArrayList list = getCollection();
ArrayList.Itr iter = onStack Itr();
iter.this$0 = list;
iter.cursor = 0;
iter.size = list.elemData.length;
while (iter.hasNext()) {
Object o = iter.next();
doSomething(o);
}
54
Example	
ArrayList list = getCollection();
ArrayList.Itr iter = onStack Itr(list);
iter.this$0 = list;
iter.cursor = 0;
iter.size = list.elemData.length;
while (iter.cursor < iter.size) {
int index = iter.cursor++;
Object o = iter.this$0.elemData[index];
doSomething(o);
}
55
Example	
ArrayList list = getCollection();
int cursor = 0;
int size = list.elemData.length;
while (cursor < size) {
Object o = list.elemData[cursor++];
doSomething(o);
}
56
Example	
ArrayList list = getCollection();
int size = list.elemData.length;
for (int i = 0; i < size; i++) {
doSomething(list.elemData[i]);
}
57
Analysis	&	Op:miza:ons…	
•  …are	oeen	quite	complicated	
•  …require	itera:ve	re-computa:on	
•  …,	if	global,	depend	on	the	enBre	program	
58
Analysis	&	Op:miza:ons…	
•  …are	oeen	quite	complicated	
•  …require	itera:ve	recomputa:on	
•  …,	if	global,	depend	on	the	enBre	program	
Can	a	JIT	compiler	afford	
all	or	any	of	that?
Analysis	&	Op:miza:ons…	
•  …are	oeen	quite	complicated	
•  …require	itera:ve	recomputa:ons	
•  …,	if	global,	depend	on	the	enBre	program	
Can	a	JIT	compiler	afford	
all	or	any	of	that?	
60
Analysis	&	Op:miza:ons…	
•  …are	oeen	quite	complicated	
•  …require	itera:ve	recomputa:ons	
•  …,	if	global,	depend	on	the	enBre	program	
Can	a	JIT	compiler	afford	
all	or	any	of	that?
Dynamic	Op:miza:ons	
•  Profiling	and	selec:ve	compila:on	
•  Inline	subs:tu:on	based	on	execu:on	profile	
•  Hot	execu:on	traces	op:miza:on	
•  Op:mal	instruc:on	selec:on
Hot	Code	vs	Warm	Code	
Q:	What	happens	when	an	app	with	no	dis:nctly	
hot	code	runs	on	a	typical	JVM?	
A:	Long	warmup	with	results	not	stored	
for	future	reuse	
	
Typical	case:	UI-centric	applica:ons	
63
JFCMark	(Short	Run)	
0%	
50%	
100%	
150%	
200%	
250%	
2	core	Celeron,	2.6Ghz	 4	core	i5,	3.8GZ	
Excelsior	JET	
HotSpot	client	
HotSpot	server	
64
The	taller,	the	beeer
JFCMark		(Long	Run)	
0%	
20%	
40%	
60%	
80%	
100%	
120%	
140%	
160%	
2	core	Celeron,	2.6Ghz	 4	core	i5,	3.8GZ	
Excelsior	JET	
HotSpot	client	
HotSpot	server	
65
The	taller,	the	beeer
Profile-Guided	Op:miza:on	
66
Profile-Guided	Op:miza:on	
Can	an	AOT	compiler	for	Java	use	
dynamic	execu:on	profiles	as	input?	
	
	
67
Profile-Guided	Op:miza:on	
Can	an	AOT	compiler	for	Java	use	
dynamic	execu:on	profiles	as	input?	
	
Yes.	
hSps://www.excelsiorjet.com/pgo		
	
	
68
Profile-Guided	Op:miza:on	
Can	an	AOT	compiler	for	Java	use	
dynamic	execu:on	profiles	as	input?	
	
	
	
Live	Demo:	
hSps://github.com/excelsior-oss/excelsior-jet-samples/pgo-bench		
69
Server	side	
•  CPU	:me	in	the	cloud	costs		
money	
•  Aeer	some	:me,	execu:on	profile	of	a	server	app	
stabilizes	in	many	cases	
•  Why	not	pass	it	over	to	the	AOT	compiler?	
70
AOT	on	the	Server	side	
•  Stable	performance	and	predictable	latency	
–  no	code	de-op:miza:ons	occur	at	run-:me	
•  Work	at	full	speed	right	from	the	start	
–  good	for	load	balancing	
•  BeSer	startup	:me	
–  good	when	many	servers	(re-)start	simultaneously	
•  S:ll	protects	the	code	from	decompila:on	
71
Embedded/IoT	
The	less	powerful	the	hardware,	the	higher	cost	
of	dynamic	compila:on	
•  Embedded	systems	typically	have	less	
compu:ng	power	than	desktops	and	servers	
•  Boot	:me	is	important	for	consumer	devices	
72
Mobile	
•  JVM	on	Mobile:	
–  Plaxorm	classes	
–  Memory	Manager	and	GC	
–  Reflec:on	
–  JIT	Compiler	
What	is	missing?	
73
Mobile	
•  JVM	on	Mobile:	
–  Plaxorm	classes	
–  Memory	Manager	and	GC	
–  Reflec:on	
–  JIT	Compiler	
What	is	missing?	
74
Mobile	
•  JVM	on	Mobile:	
–  Plaxorm	classes	
–  Memory	Manager	and	GC	
–  Reflec:on	
–  JIT	Compiler	
What	is	missing?	
75
Mobile	
•  JVM	on	Mobile:	
–  Plaxorm	classes	
–  Memory	Manager	and	GC	
–  Reflec:on	
–  JIT	Compiler	
What	is	missing?	
76
Mobile	
•  JVM	on	Mobile:	
–  Plaxorm	classes	
–  Memory	Manager	and	GC	
–  Reflec:on	
–  JIT	Compiler	
What	is	missing?	
77
Mobile	
•  JVM	on	Mobile:	
–  Plaxorm	classes	
–  Memory	Manager	and	GC	
–  Reflec:on	
–  JIT	Compiler	
What	is	missing?	
78
Mobile	
•  JVM	on	Mobile:	
–  Plaxorm	classes	
–  Memory	Manager	and	GC	
–  Reflec:on	
–  JIT	Compiler	
	
Charger!	
	
79
Mobile	
•  Wireless	devices	have	baeeries	
•  Does	it	make	sense	to	spend	power	on	
dynamic	compila:on?	
80
iOS	
•  iOS	policy	prohibits	crea:on	of	any	na:ve	
code	during	applica:on	run	:me	
•  Geyng	Java	apps	to	work	on	iOS	requires	
either	an	interpre:ng	JVM	or	an	AOT	compiler		
81
AOT	Java	Compilers	in	2000	
Desktop/Server:	
Excelsior	JET	
BulletTrain	
GNU	Compiler	for	Java	(GCJ)	
IBM	VisualAge	for	Java	
Supercede/JOVE	
TowerJ	
Embedded/Mobile:	
Diab	FastJ	
Esmertec	Jbed	ME	
GCJ		
IBM	J9	
Sun	Java	ME		
(custom	offerings)	
	
	 82
AOT	Java	Compilers	in	2017	
Desktop/Server:	
Excelsior	JET	
GCJ	(RIP)	
IBM	Java	SDK	for	AIX	
IBM	Java	SDK	for	z/OS	
	
Coming	soon:	
HotSpot	AOT	(JEP-295)	
Embedded/Mobile:	
Excelsior	JET	Embedded	
IBM	WebSphere	Real	Time	
Oracle	Java	ME	Embedded	Client	
Codename	One	
Gluon	VM	
Android	ART	
RoboVM	(RIP)	
Mul:-OS	Engine	
	
83
AOT	Java	Compilers	in	2017	
Desktop/Server:	
Excelsior	JET	
GCJ	(RIP)	
IBM	Java	SDK	for	AIX	
IBM	Java	SDK	for	z/OS	
	
Just	Released!	
HotSpot	AOT	(JEP-295)	
Embedded/Mobile:	
Excelsior	JET	Embedded	
IBM	WebSphere	Real	Time	
Oracle	Java	ME	Embedded	Client	
Codename	One	
Gluon	VM	
Android	ART	
RoboVM	(RIP)	
Mul:-OS	Engine	
	
84
Sta:c	compila:on	of	Java	apps:	
85
Conclusion
Sta:c	compila:on	of	Java	apps:	
86
Possible
Conclusion
Sta:c	compila:on	of	Java	apps:	
87
Possible
Preserving all Java features
Conclusion
Sta:c	compila:on	of	Java	apps:	
88
Possible
Preserving all Java features
Useful in many aspects
Conclusion
Conclusion	
•  JIT	and	AOT	have	their	unique	advantages	
•  Synthesis	of	two	approaches	will	give	
maximum	benefits	
89
Conclusion	
•  JIT	and	AOT	have	their	unique	advantages	
•  Synthesis	of	the	two	approaches	will	bring	
maximum	benefits	
90
Q & A
Nikita Lipsky,
Excelsior
nlipsky@excelsior-usa.com
twitter: @pjBooms
Team blog: https://www.excelsiorjet.com/blog
91

Weitere ähnliche Inhalte

Was ist angesagt?

Java bytecode and classes
Java bytecode and classesJava bytecode and classes
Java bytecode and classes
yoavwix
 
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
Vladimir Ivanov
 
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013
Vladimir Ivanov
 
Testing Multithreaded Java Applications for Synchronization Problems, ISTA 2011
Testing Multithreaded Java Applications for Synchronization Problems, ISTA 2011Testing Multithreaded Java Applications for Synchronization Problems, ISTA 2011
Testing Multithreaded Java Applications for Synchronization Problems, ISTA 2011
Vassil Popovski
 
Testing multithreaded java applications for synchronization problems
Testing multithreaded java applications for synchronization problemsTesting multithreaded java applications for synchronization problems
Testing multithreaded java applications for synchronization problems
Vassil Popovski
 
Introduction to llvm
Introduction to llvmIntroduction to llvm
Introduction to llvm
Tao He
 

Was ist angesagt? (20)

JavaOne 2011 - JVM Bytecode for Dummies
JavaOne 2011 - JVM Bytecode for DummiesJavaOne 2011 - JVM Bytecode for Dummies
JavaOne 2011 - JVM Bytecode for Dummies
 
Java byte code & virtual machine
Java byte code & virtual machineJava byte code & virtual machine
Java byte code & virtual machine
 
Java bytecode and classes
Java bytecode and classesJava bytecode and classes
Java bytecode and classes
 
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
 
JAVA BYTE CODE
JAVA BYTE CODEJAVA BYTE CODE
JAVA BYTE CODE
 
FOSDEM2016 - Ruby and OMR
FOSDEM2016 - Ruby and OMRFOSDEM2016 - Ruby and OMR
FOSDEM2016 - Ruby and OMR
 
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013
 
Understanding Java Dynamic Proxies
Understanding Java Dynamic ProxiesUnderstanding Java Dynamic Proxies
Understanding Java Dynamic Proxies
 
JVM++: The Graal VM
JVM++: The Graal VMJVM++: The Graal VM
JVM++: The Graal VM
 
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
 
Dynamic Proxy by Java
Dynamic Proxy by JavaDynamic Proxy by Java
Dynamic Proxy by Java
 
Testing Multithreaded Java Applications for Synchronization Problems, ISTA 2011
Testing Multithreaded Java Applications for Synchronization Problems, ISTA 2011Testing Multithreaded Java Applications for Synchronization Problems, ISTA 2011
Testing Multithreaded Java Applications for Synchronization Problems, ISTA 2011
 
Eclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimesEclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimes
 
Testing multithreaded java applications for synchronization problems
Testing multithreaded java applications for synchronization problemsTesting multithreaded java applications for synchronization problems
Testing multithreaded java applications for synchronization problems
 
Java 7 - What's New?
Java 7 - What's New?Java 7 - What's New?
Java 7 - What's New?
 
Introduction to Kotlin for Java developer
Introduction to Kotlin for Java developerIntroduction to Kotlin for Java developer
Introduction to Kotlin for Java developer
 
CS6270 Virtual Machines - Java Virtual Machine Architecture and APIs
CS6270 Virtual Machines - Java Virtual Machine Architecture and APIsCS6270 Virtual Machines - Java Virtual Machine Architecture and APIs
CS6270 Virtual Machines - Java Virtual Machine Architecture and APIs
 
Introduction to llvm
Introduction to llvmIntroduction to llvm
Introduction to llvm
 
Graal VM: Multi-Language Execution Platform
Graal VM: Multi-Language Execution PlatformGraal VM: Multi-Language Execution Platform
Graal VM: Multi-Language Execution Platform
 
Java introduction
Java introductionJava introduction
Java introduction
 

Ähnlich wie JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2017 edition)

Memory Management with Java and C++
Memory Management with Java and C++Memory Management with Java and C++
Memory Management with Java and C++
Mohammad Shaker
 
Automatic Reference Counting
Automatic Reference Counting Automatic Reference Counting
Automatic Reference Counting
pragmamark
 
Embedded c & working with avr studio
Embedded c & working with avr studioEmbedded c & working with avr studio
Embedded c & working with avr studio
Nitesh Singh
 
Make static instrumentation great again, High performance fuzzing for Windows...
Make static instrumentation great again, High performance fuzzing for Windows...Make static instrumentation great again, High performance fuzzing for Windows...
Make static instrumentation great again, High performance fuzzing for Windows...
Lucas Leong
 

Ähnlich wie JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2017 edition) (20)

Memory Management with Java and C++
Memory Management with Java and C++Memory Management with Java and C++
Memory Management with Java and C++
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference Counting
 
Automatic Reference Counting
Automatic Reference Counting Automatic Reference Counting
Automatic Reference Counting
 
Louis Loizides iOS Programming Introduction
Louis Loizides iOS Programming IntroductionLouis Loizides iOS Programming Introduction
Louis Loizides iOS Programming Introduction
 
iOS Programming Intro
iOS Programming IntroiOS Programming Intro
iOS Programming Intro
 
Exciting JavaScript - Part I
Exciting JavaScript - Part IExciting JavaScript - Part I
Exciting JavaScript - Part I
 
Effective C++
Effective C++Effective C++
Effective C++
 
Dynamic Binary Analysis and Obfuscated Codes
Dynamic Binary Analysis and Obfuscated Codes Dynamic Binary Analysis and Obfuscated Codes
Dynamic Binary Analysis and Obfuscated Codes
 
Tips and tricks for building high performance android apps using native code
Tips and tricks for building high performance android apps using native codeTips and tricks for building high performance android apps using native code
Tips and tricks for building high performance android apps using native code
 
One Shellcode to Rule Them All: Cross-Platform Exploitation
One Shellcode to Rule Them All: Cross-Platform ExploitationOne Shellcode to Rule Them All: Cross-Platform Exploitation
One Shellcode to Rule Them All: Cross-Platform Exploitation
 
Building High Performance Android Applications in Java and C++
Building High Performance Android Applications in Java and C++Building High Performance Android Applications in Java and C++
Building High Performance Android Applications in Java and C++
 
What Makes Objective C Dynamic?
What Makes Objective C Dynamic?What Makes Objective C Dynamic?
What Makes Objective C Dynamic?
 
2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...
2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...
2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...
 
UNIT IV (1).ppt
UNIT IV (1).pptUNIT IV (1).ppt
UNIT IV (1).ppt
 
Embedded c & working with avr studio
Embedded c & working with avr studioEmbedded c & working with avr studio
Embedded c & working with avr studio
 
Return of c++
Return of c++Return of c++
Return of c++
 
Graal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerGraal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT Compiler
 
Make static instrumentation great again, High performance fuzzing for Windows...
Make static instrumentation great again, High performance fuzzing for Windows...Make static instrumentation great again, High performance fuzzing for Windows...
Make static instrumentation great again, High performance fuzzing for Windows...
 
OpenCV @ Droidcon 2012
OpenCV @ Droidcon 2012OpenCV @ Droidcon 2012
OpenCV @ Droidcon 2012
 
Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...
Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...
Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...
 

Mehr von Nikita Lipsky

Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?
Nikita Lipsky
 
Клиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на JavaКлиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на Java
Nikita Lipsky
 
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Nikita Lipsky
 

Mehr von Nikita Lipsky (19)

Escaping The Jar hell with Jigsaw Layers
Escaping The Jar hell with Jigsaw LayersEscaping The Jar hell with Jigsaw Layers
Escaping The Jar hell with Jigsaw Layers
 
Java 9 Модули. Почему не OSGi?
Java 9 Модули. Почему не OSGi?Java 9 Модули. Почему не OSGi?
Java 9 Модули. Почему не OSGi?
 
AOT для Java: Мифы и Challenges
AOT для Java: Мифы и ChallengesAOT для Java: Мифы и Challenges
AOT для Java: Мифы и Challenges
 
Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?
 
Java 8 Support at the JVM Level
Java 8 Support at the JVM LevelJava 8 Support at the JVM Level
Java 8 Support at the JVM Level
 
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
 
Поддержка Java 8 в Excelsior JET
Поддержка Java 8 в Excelsior JET Поддержка Java 8 в Excelsior JET
Поддержка Java 8 в Excelsior JET
 
JVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииJVM: краткий курс общей анатомии
JVM: краткий курс общей анатомии
 
Клиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на JavaКлиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на Java
 
Delivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsDelivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java Applications
 
Java Restart with WebFX
Java Restart with WebFX Java Restart with WebFX
Java Restart with WebFX
 
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
 
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
 
Занимательные истории из жизни технической поддержки JVM
Занимательные истории из жизни технической поддержки JVMЗанимательные истории из жизни технической поддержки JVM
Занимательные истории из жизни технической поддержки JVM
 
Неумолимая близость десктопа, веба и мобайла
Неумолимая близость десктопа, веба и мобайлаНеумолимая близость десктопа, веба и мобайла
Неумолимая близость десктопа, веба и мобайла
 
Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Java худеет. Спроси меня как.
Java худеет. Спроси меня как.
 
История одной JVM в картинках
История одной JVM в картинкахИстория одной JVM в картинках
История одной JVM в картинках
 

Kürzlich hochgeladen

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 

Kürzlich hochgeladen (20)

Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 

JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2017 edition)