SlideShare a Scribd company logo
Design	Rationales	in	the	JRockit JVM
Marcus	Lagergren
Senior	Software	Architect,	Klarna
Design	Rationales	in	the	JRockit JVM
Marcus	Lagergren
Senior	Software	Architect,	Klarna
Design	Rationales	in	the	JRockit JVM
Marcus	Lagergren
Senior	Software	Architect,	Klarna
Agenda
• In	the	beginning…
• What	did	we	accomplish	/	Internals
– Code	Generation
– Memory	Management
– Threads	&	Synchronization
• Externals
– The	Java	Mission	Control	suite
– A	parenthesis	on	JRockit	VE
• Q&A
About	the	speaker
@lagergren
About	the	speaker
@lagergren
About	the	speaker
@lagergren
About	the	speaker
• M.	Sc.	from	KTH,	Stockholm
– Narrowly	escaped	doing	a	PhD	on	bit	security	in	
cryptographic	systems
• Runtime,	OS	and	compiler	engineer	since	
1999,	with	some	startup	breaks
• One	of	the	original	creators	of	the	JRockit	JVM
In	the	beginning
Appeal	Virtual	Machines
• Appeal	Software	Solutions
– Consulting,	almost	exclusively	Java	by	1997
• Still	the	pre-app	server	era
Appeal	Virtual	Machines
• We	saw	that	Java	would	be	great	on	the	server	
side
Appeal	Virtual	Machines
• We	saw	that	Java	would	be	great	on	the	server	
side
– Shorter	development	cycles	– money	in	the	bank
• Buffer	overrun	protection
• Automatic	memory	management
• Write	once	run	everywhere
Appeal	Virtual	Machines
• Tremendous	scalability	problems
• Sun	ClassicVM	was	all-encompassing
JavaOne	1997
• Sun	Microsystems	presents	the	HotSpot	
virtual	machine
JavaOne	1997
• Sun	Microsystems	presents	the	HotSpot	
virtual	machine
– “WOW!	This	is	the	way	to	do	it!	Adaptive	
runtimes!”
JavaOne	1998
• Sun	Microsystems	presents	the	HotSpot	
virtual	machine	again
JavaOne	1998
• Sun	Microsystems	presents	the	HotSpot	
virtual	machine	again
– “WTF!	This	is	slide-by-slide	the	exact	same	
presentation	as	last	year!?!”
– We	can’t	wait	any	longer.	Let’s	build	our	own	VM.	
How	hard	can	it	be?
Creating	our	own	JVM	- JRockit
Productize	a	narrower	domain?
• Server-side	usage	only.	Headless.	
– We	need	to	help	the	early	app	server	vendors	get	
performance	and	scalability
Productize	a	narrower	domain?
• Server-side	usage	only.	Headless.	
– We	need	to	help	the	early	app	server	vendors	get	
performance	and	scalability
• No	interpreter	
– “startup	time	doesn’t	matter	on	the	server	anyway”
Productize	a	narrower	domain?
• Server-side	usage	only.	Headless.	
– We	need	to	help	the	early	app	server	vendors	get	
performance	and	scalability
• No	interpreter	
– “startup	time	doesn’t	matter	on	the	server	anyway”
• Green	threads	or	n x	m threads.	
– Explicit	parallelism	was	all-pervasive.
Productize	a	narrower	domain?
• Incremental	GC	
– We	thought	something	like	[Seligman,	Grarup]	
would	suffice.
Productize	a	narrower	domain?
• Incremental	GC
– We	thought	something	like	[Seligman,	Grarup]	
would	suffice.	
• Support	ourselves	on	consulting	only.
– Nope	– needed	venture	capital
The	Java	License
• You	can’t	call	yourself	“Java”	without	a	
Java	license
• You	need	to	pass	the	TCK	test	suite
– Not	available	without	license
• To	get	a	Java	License	you	need	a	“value	
add”
The	Java	License
• What’s	a	“value	add”?
The	Java	License
• What’s	a	“value	add”?
The	Java	License
• What’s	a	“value	add”?
The	Java	License
• What’s	a	“value	add”?
– Superior	performance!
The	Java	License
• What’s	a	“value	add”?
– Superior	performance!
– What?	You	didn’t	like	that?
The	Java	License
• What’s	a	“value	add”?
– Superior	performance!
– What?	You	didn’t	like	that?
– OK…	Let’s	see…	Err..	“managability”
The	Java	License
• Java	License	was	granted	2001
– Helped	us	partner	up	with	BEA	Systems	and	
Intel
– BEA	acquired	us	in	2002
– Oracle	acquired	BEA	in	2008
– Oracle	acquired	Sun	in	2010
What	did	we	accomplish?
The	real	value	adds	turned	out	to	be:
• Multi	tiered	support	for	paying	customers
– Part	of	the	WLS	stack
• Monitoring	and	Serviceability
– JRockit Mission	Control	(now	Java	Mission	
Control)
– Record	and	introspect	production	systems	with	
zero	overhead.
The	real	value	adds	turned	out	to	be:
• Pioneered	“Soft	realtime”	GC
– Deterministic	GC
– Low	latency	GC
The	real	value	adds	turned	out	to	be:
• Virtualization
– JRockit	Virtual	Edition	– an	operating	system	for	
Java
– Shorter	paths	between	Java	and	hardware
– Hypervisor	required
– JRockit	VE	on	virtual	hardware	outperformed	
physical	Linux!
The	real	value	adds	turned	out	to	be:
• The	benchmark	wars
– Constantly	keeping	it	going	with	Sun	and	IBM,	
driving	Java	server-side	performance
The	real	value	adds	turned	out	to	be:
• JRockit became	the	default	JVM	in	the	Oracle	
stack	in	2008
• ExaLogic
…	and	then
INTERNALS
@SimmsUpNorth
Code	Generation
Code	generation	– No	Interpreter
• Keep	test	matrix	small
• Keep	operational	complexity	down
• Targeting	server	side	apps	– warmup	a	small	
issue
• “Code	caching	/	AOT	can	be	done	later”
Code	generation	– One	JIT
• Keep	test	matrix	small
• Keep	operation	complexity	down
• Run	it	in	different	modes,	with	maximum	code	
reuse
• Same	IR	throughout
– With	gradual	augmentations
But…
• Startup	became	a	problem
– We	removed	optimizers	and	added	as	a	“spine”	to	
the	normal	JIT	pipeline.	
• Lazy	code	generation	through	trampolines
• Same	mechanism	for	code	invalidation
• Bookkeeping	to	identify	a	program	point	down	
to	any	individual	machine	instruction
Code	Generation
• Same	“spine”	used	in	all	tiers	of	code	
generation
Code	Generation
• Same	“spine”	used	in	all	tiers	of	code	
generation
Optimizations
• In	and	out	of	SSA
• Applied	to	all	levels	of	IR
– Loop	peeling,	value	numbering,	String	append	explosion,	Type	check	removal,	
sign	extension	elimination,	copy	propagation,	 bounds	check	removal,	virtual	to	
fixed	calls,	inlining,	if	short	circuiting,	straightening,	strength	reduction,	
constant	propagation,	 dead	code	removal,	out	of	loop	hoisting,	explode	
objects	and	array	copies,	boxing	&	unboxing	removal,	local	escape	analysis,	
ASM	peephole	optimization,	redundant	 memory	access	removal,	etc	etc	etc…
• Support	for	regionalized	IRs
• Graph	Fusion	Register	Allocator
Optimization	Targets
• Thread	sampling
• Partly	taken	over	by	safe	point	based	
approach	in	R28
• Some	code	instrumentation,	for	example	for	
inlining	path
– Not	in	the	general	case,	e.g	invocation	counters
Optimization	Targets
• Hardware	sampling	where	available
– Only	good	thing	about	IA64?
– Could	also	match	e.g.	L2	misses	to	program	points
• Bugging	the	processor	manufacturers	since	
2002	about	userland	PC	sample	buffer.
• JRockit	VE	x	1000	more	samples	– significantly	
proven	shorter	warmup
HotSpot	style?
• On-stack	replacement?
• Deoptimization?
HotSpot	style?
• On-stack	replacement?
• Deoptimization?
• Never	much	cared	for	any	it	;-)
HotSpot Style	OSR	and	Deoptimization
• We’ve	never	found	a	practical	use	case.	
– So	we	can’t	ever	swap	out	the	main	function	with	the	
microbenchmark loop.	Who	cares?
• An	assumption	is	invalidated
– Either	patch	code	directly	or	use	a	guard	when	generating	it	in	
the	first	place
• A	large	assumption
– Write	a	trap	in	the	code	and	schedule	lazy	regeneration	of	entire	
method
• Not	strictly	true	for	dynamic	languages
HotSpot Style	OSR	and	Deoptimization
• We’ve	never	found	a	practical	use	case.	
– So	we	can’t	ever	swap	out	the	main	function	with	the	
microbenchmark loop.	Who	cares?
• An	assumption	is	invalidated
– Either	patch	code	directly	or	use	a	guard	when	generating	it	in	
the	first	place
• A	large	assumption
– Write	a	trap	in	the	code	and	schedule	lazy	regeneration	of	entire	
method
• Not	strictly	true	for	dynamic	languages
HotSpot Style	OSR	and	Deoptimization
• We’ve	never	found	a	practical	use	case.	
– So	we	can’t	ever	swap	out	the	main	function	with	the	
microbenchmark loop.	Who	cares?
• An	assumption	is	invalidated
– Either	patch	code	directly	or	use	a	guard	when	generating	it	in	
the	first	place
• A	large	assumption
– Write	a	trap	in	the	code	and	do	regeneration	of	entire	method
• Not	strictly	true	for	dynamic	languages
HotSpot Style	OSR	and	Deoptimization
• We’ve	never	found	a	practical	use	case.	
– So	we	can’t	ever	swap	out	the	main	function	with	the	
microbenchmark loop.	Who	cares?
• An	assumption	is	invalidated
– Either	patch	code	directly	or	use	a	guard	when	generating	it	in	
the	first	place
• A	large	assumption
– Write	a	trap	in	the	code	and	do	regeneration	of	entire	method
• Not	strictly	true	for	dynamic	languages
“Garbage	collecting	code”
• Code	kept	in	binary	tree	of	code	blocks	~ 64M
– More	if	large	pages	enabled
• Class	loader	unloading	à garbage	collection
• Reference	count	to	active	code	modified	when	
backpatching
• Specialized	usage	of	code	blocks.
– Trampolines	only
– Optimized	code	only
Bytecode	is	bad	– kill	it	quickly
Bytecode	is	bad	– kill	it	quickly
• What’s	with	the	goto:s?
• Why	can	it	express	more	than	Java	source	
code?	
– OK	we	understand	the	multi	language	
concept,	we	sorta	forgive	you.
– But	man,	dominators	and	loop	analysis	–
that’s	a	lot	of	compile	time
Bytecode	is	bad	– kill	it	quickly
• …and	why	is	it	a	stack	machine	AND	a	
register	machine	with	65535	registers	at	
the	same	time!?
• Initially	tried	to	reconstruct	ASTs
– Obfuscators	etc	made	this	pretty	hopeless.
• ~15%	of	the	klocs	in	JRockit/codegen	do	
flow	control	analysis	on	the	goto:s
The	IR
• Use	IR	everywhere	(or	Java)
• The	IR	should	ideally	reflect	any	of	several	pluggable	
frontends.	
– We	played	around	with	CLR	a	bit.
– These	days	– dynamic	languages	:-)
• No	Sea	of	Nodes
• No	HotSpot	style	“high	level	IR	is	low	level”
The	IR
• Simple	IR	in	MIR	form	(platform	independent)
The	IR	– Design	Rationale
• We	had	some	compiler	experience	– wanted	
to	be	on	track	quickly.	Do	it	the	traditional	
way.
• We	are	not	“wrong”.	LLVM	is	very	similar.
The	IR	– Design	Rationale
• Tiered: highest	tier	==	always	high	level
• Hardware	agnostic.	
• No	architecture	specific	memory	ops
• Tiered: lowest	tier	==	always	the	native	
architecture	instruction	for	instruction.	
• A	gradual	transition.	
• A	CPU	has	no	sea	of	nodes.
The	IR
• Highest	IR	level	may	have	operations	as	
operands
• Intrinsics	everywhere
– arraycopy, membar, cmpuXX, sse4IndexOf,
doubleToLongBits, crypto, Math.sin and	so	on	…
• Regret	not	doing	more	in	SSA	form
The	IRInfo	“database”
• Lazily	computable	information
– Liveness
– Dominators
– Loop	information
– Aliases
– Type	inference
– Ranges
– Nullness	analysis
– …
– Invalidate	on	modification.
• Not	a	very	stable	model.
Memory	management
Transition:	object	layout,	types	and	
livemaps…
Object	layout	and	types
• Object	headers	should	be	fixed	sized.
• JRockit Object	header	is	32	+	32	bits	
• All	platforms	with	some	content	variations.
• [Grove]	ramblings	on	object	models
• Type	tree	similar	to	[Krall,	Vitek,
Horspool]
Livemaps	(oopmaps)
• Registers	and	stack	slots	on	the	local	frame	
that	contain	objects.	
• Nothing	strange	here.	Required	for	non-
conservative	garbage	collection	of	any	sort.
• Internal	pointer	bit
• Forms	the	root	set.	
• Rollforwarding	vs	the	safepoint	approach
Transition	- Livemaps
Memory	management
• Garbage	collectors
– Concurrent
– Parallel
– Deterministic
• With	or	without	generations
Memory	management
• Concurrentcollection
– Your	basic	generational	concurrent	mark	and	sweep	
collector	[Printezis,	Detlefs]
– Supports	multi	generation	(>1)	young	spaces.
• Combats	heavy	object	allocation	situations.
• Adaptively	balanced	against	copy	overhead
– Write	barriers	before	object	writes
– Minimize	stopping	the	world
– Young	collections	use	a	variant	of	stop	&	copy
Memory	management
• Can	also	run	with	a	parallel policy
– Stop	the	world	and	clean	up	quickly
– Only	throughput	oriented
– No	write	barriers,	as	there	is	no	need	for	a	
card	table
Mark	&	Sweep
• Backbone	of	GC	based	on	traditional	tri-
color	mark	and	sweep
• Adaptive	thread	usage	and	additional	
concurrency
Mark	&	Sweep
• Two	colors	– not	three.
– Object	is	in	one	of	two	sets
– Live	objects:	grey	bits	(mix	of	grey	&	black	objects	in	
traditional	tri-coloring)
– Distinction	handled	by	putting	grey	objects	in	thread	
local	queues	for	each	GC	thread.	
– Parallel	threads	can	work	on	thread	local	data
– Efficient	prefetching	is	possible	due	to	FIFO	order.
No	permgen	ever!
Other	nice	features
• No	permgen!!!	Ever!
Other	nice	features
• No	permgen!!!	Ever!
• Pinned	objects.
– Fast	memory	buffers
– Also	enable	non-contiguous	heaps
Other	nice	features
• No	permgen!!!	Ever!
• Pinned	objects.
– Fast	memory	buffers.
– Also	enable	non-contiguous	heaps.
• Compaction
– “Internal	and	external”.	
– G1	evacuates	regions	instead	with	a	stop	the	
world-and-copy	policy	similar	to	JRockit YC
Memory	management
• Concurrent	GC	has	an	additional	set:	live	bits
– Contains	all	live	objects	in	the	system,	including	the	newly	
created	ones.	
– JRockit can	quickly	find	objects	that	have	been	created	
during	a	concurrent	mark	phase.	
– Card	tables	
• Not	just	for	generational	GC
• Also	to	avoid	searching	the	entire	live	object	graph	
when	a	concurrent	mark	phase	cleans	up.
• Just	look	at	dirty	cards	at	the	end	of	the	mark	phase.
Young	Collections
• A	variant	of	stop	and	copy	is	used.	
– All	threads	are	halted	and	objects	are	
deleted	or	promoted
– Hierarchical	breadth	first	copy	for	cache	
locality
• Parallelizes	nicely
• Many	threads	always	harvest	a	young	
space
Young	Collections
• Young	and	old	collections	may	occur	at	same	
time.
– All	bit	sets	and	data	structures	can	be	shared	as	
long	as	the	old	collection	is	guaranteed	to	see	all	
cards	that	have	become	dirty	during	a	
concurrent	phase.	(Extra	card	table	to	record	this	
“difference”	– “modified	union	set”)	
– Keep	this	intact	for	old	collection
Thread	Local	Allocation
• Thread	local	allocation	
• Thread	local	areas	are	roughly	L2	cache	
sized	and	objects	are	allocated	here	
before	they	are	forced	upon	the	heap
Compressed	References
• For	less	than	4	(or	4	*	x)	GB	of	maximum	
heap	size
• Use	32	bit	pointers	(or	32	+	log2(x)	bits)
CompRef compress(Ref ref) {
return (uint32_t)ref; //truncate reference to 32-bits
}
Ref decompress(CompRef ref) {
return globalHeapBase | ref;
}
Compressed	References
CompRef compress(Ref ref) {
return (uint32_t)ref; //truncate reference to 32-bits
}
Ref decompress(CompRef ref) {
return globalHeapBase | ref;
}
CompRef compress(Ref ref) {
return (uint32_t)(ref >> log
2
(objectAlignment));
}
Ref decompress(CompRef ref) {
return globalHeapBase | (ref << log
2
(objectAlignment));
}
Deterministic	GC
• QoS	level	for	latencies.	“No	more	than	X	ms”
• Down	to	single	digits	on	modern	x86	
hardware
• Caveat:	live	data	on	heap	is	the	main	
constraint.	
– Up	to	50%	of	heap	live	data	still	feasible
Deterministic	GC
Deterministic	GC	– How?
• Greedy	strategy
– Postpone	stopping	the	world	for	as	long	as	
possible.
– Maybe	the	problem	goes	away	and	we	don’t	have	
to	stop	the	world
• Split	up	everything	into	work	packets
– Drop	them	at	any	time.
Deterministic	GC	– How?
• Efficient	parallelization.
– Mark	phase	is	90%	of	GC	time	
• Efficient	heuristics
– Some	more	work	in	e.g.	write	barriers
Threads	and	Synchronization
Threads	and	Synchronization
• A	java.lang.Thread is	a	native	thread.
– Interesting,	though:	thread	pooling	and	pseudo	
thin-threads	are	back,	for	example	in	Akka.
– Java	8	– Collection.parallelStream
– The	world	is	moving	towards	implicit	parallelism	
in	general
• Most	of	the	JRockit	thread	code	and	adaptivity	logic	
is	written	in	Java
Threads	and	Synchronization
• Locks	are	thin	or	fat	
– Adaptive	inflation	and	deflation
• Lazy	locking	(biased	locking	supported)
– Adaptive	heuristics	for	banning	and	retrying	
the	lazy	approach.
Threads	and	Synchronization
public class PseudoSpinlock {
private static final int LOCK_FREE = 0;
private static final int LOCK_TAKEN = 1;
public void lock() {
//burn cycles
while (cmpxchg(LOCK_TAKEN, &lock) == LOCK_TAKEN) {
micropause(); //optional
}
}
public void unlock() {
int old = cmpxchg(LOCK_FREE, &lock);
//guard against recursive locks
assert(old == LOCK_TAKEN);
}
}
Threads	and	Synchronization
• Locks	are	thin	when	first	taken
• Time	spent	in	lock	and	times	taken	
triggers	inflation
• wait or	notify immediately	inflates	a	lock
• Fat	locks	are	also	deflated	when	
uncontended	for	too	long
Threads	and	Synchronization
Threads	and	Synchronization
Thin	lock	lifecycle
Threads	and	Synchronization
Thin	&	fat	lock	lifecycle
Lock	Pairing
• Bytecode	again	– no	restriction	on	
matching	monitorenter with	monitorexit
• Not	all	of	them	can	be	analyzed	by	the	JIT
Lock	Pairing
• We	can	store	what	we	know,	and	make	
unlocks	quick.	
– Lock	tokens	(the	object	OR	3	bits)
• Thin,	fat,	recursive,	lazily	taken,	unmatched
– Livemap	system	contains	nesting	order.
Optimizations
• A	lot	of	smallish	code	gen	transforms:	e.g.	Lock	fusion
• “Fat	spin”
• Lazy	unlocking	(biased	locking)
– Start	assuming	all	locks	are	lazy.	Tag	thin	locks	as	lazily	locked.
– If	object	already	lazily	locked
• If	it’s	the	same	thread:	profit
• Else	– stop	the	lock	holder,	detect	the	“real”	lock	state	by	stack	walk.	
Convert	to	thin	lock	or	forcefully	unlock	it
– Transfer	bits
– Heuristics:	object	and	class	banning.	Ageing.
Threads	and	Synchronization
Thin,	fat	&	lazy	lock	lifecycle
Export	it	all!	– JRockit	Mission	Control
(now	Java	Mission	Control)
@javamissionctrl
$JAVA_HOME/bin/jmc
Mission	Control
• Use	“free”	runtime	information!
– JRockit	(Java)	Mission	Control
• JRockit	(Java)	flight	recorder
• Memory	leak	detector	(JRockit	only)
• Management	console
• $JAVA_HOME/bin/JCMD	(used	to	be	JRCMD)
• Everything	in	the	VM	abstracted	into	an	event	that	
may	or	may	not	have	a	duration
• Soon:	public	API
Java	Flight	Recorder
• Always	on
– Excellent	for	debugging	and	analysis	of	crashes
– Can	be	set	to	record	more	intrusively	for	periods	in	production
• E.g.	extensive	lock	profiling
• Everything	is	an	event
• Buffered	recording	– the	last	n seconds	available	at	any	crash	or	
when	a	command	is	given.
• Very	fine	precision.
– Multimedia	timers	and	system	hardware	support	required	for	e.g.	
latencies
Latency	Analysis
The	Management	Console
• Peek	into	the	running	production	JVM
• Add	triggers	on	events
• Interact	with	the	VM:	force	GC	etc.
The	Memory	Leak	Detector
• Introspect	the	type	graph	in	realtime.	
Look	for	types	that	are	growing	despite	
GC:s
Studying	a	recording	offline
JRockit	Virtual	Edition
Is	the	JVM	an	OS?
Is	the	JVM	an	OS?
• Add	a	cooperative	aspect	to	thread	switching
• Zero-copy	networking	code
• Reduce	cost	of	entering	OS
• Balloon	driver
• Runs	only	on	hypervisor
• Facilitates	pauseless	GC
Is	the	JVM	an	OS?
Thank	you!
Would	you	like	to	
know	more?
Oracle	JRockit –
the	Definitive	Guide

More Related Content

Similar to Design rationales in the JRockit JVM

DevOpsCon 2015 - DevOps in Mobile Games
DevOpsCon 2015 - DevOps in Mobile GamesDevOpsCon 2015 - DevOps in Mobile Games
DevOpsCon 2015 - DevOps in Mobile Games
Andreas Katzig
 
Java withrealworldtechnology
Java withrealworldtechnologyJava withrealworldtechnology
Java withrealworldtechnology
Anju Kanjirathingal
 
Introduction to Java Part-2
Introduction to Java Part-2Introduction to Java Part-2
Introduction to Java Part-2
RatnaJava
 
Chapter-1 Introduction.pptx
Chapter-1 Introduction.pptxChapter-1 Introduction.pptx
Chapter-1 Introduction.pptx
SumanBhandari40
 
Introduction to JAVA
Introduction to JAVAIntroduction to JAVA
Introduction to JAVA
javatrainingonline
 
Introduction to JAVA
Introduction to JAVAIntroduction to JAVA
Introduction to JAVA
Mindsmapped Consulting
 
New Java features: Simplified Design Patterns[LIT3826]
New Java features: Simplified Design Patterns[LIT3826]New Java features: Simplified Design Patterns[LIT3826]
New Java features: Simplified Design Patterns[LIT3826]
Miro Wengner
 
Javaland keynote final
Javaland keynote finalJavaland keynote final
Javaland keynote final
Marcus Lagergren
 
Lec 1-of-oop2
Lec 1-of-oop2Lec 1-of-oop2
Lec 1-of-oop2
SM Rasel
 
Onion architecture
Onion architectureOnion architecture
Onion architecture
Vidyasagar Machupalli
 
Scala Security: Eliminate 200+ Code-Level Threats With Fortify SCA For Scala
Scala Security: Eliminate 200+ Code-Level Threats With Fortify SCA For ScalaScala Security: Eliminate 200+ Code-Level Threats With Fortify SCA For Scala
Scala Security: Eliminate 200+ Code-Level Threats With Fortify SCA For Scala
Lightbend
 
The Java Story
The Java StoryThe Java Story
The Java Story
David Parsons
 
Stay productive while slicing up the monolith
Stay productive while slicing up the monolithStay productive while slicing up the monolith
Stay productive while slicing up the monolith
Markus Eisele
 
Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat)
Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat)Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat)
Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat)OpenBlend society
 
Ohio Devfest - Visual Analysis with GCP
Ohio Devfest - Visual Analysis with GCPOhio Devfest - Visual Analysis with GCP
Ohio Devfest - Visual Analysis with GCP
Wesley Workman
 
Oracle Fuson Middleware Diagnostics, Performance and Troubleshoot
Oracle Fuson Middleware Diagnostics, Performance and TroubleshootOracle Fuson Middleware Diagnostics, Performance and Troubleshoot
Oracle Fuson Middleware Diagnostics, Performance and Troubleshoot
Michel Schildmeijer
 
javalightspeed-jakartatech-2023.pdf
javalightspeed-jakartatech-2023.pdfjavalightspeed-jakartatech-2023.pdf
javalightspeed-jakartatech-2023.pdf
RichHagarty
 
Stay productive while slicing up the monolith
Stay productive while slicing up the monolithStay productive while slicing up the monolith
Stay productive while slicing up the monolith
Markus Eisele
 
Pivotal Tracker for Mozat
Pivotal Tracker for MozatPivotal Tracker for Mozat
Pivotal Tracker for MozatAen Tan
 

Similar to Design rationales in the JRockit JVM (20)

DevOpsCon 2015 - DevOps in Mobile Games
DevOpsCon 2015 - DevOps in Mobile GamesDevOpsCon 2015 - DevOps in Mobile Games
DevOpsCon 2015 - DevOps in Mobile Games
 
Java withrealworldtechnology
Java withrealworldtechnologyJava withrealworldtechnology
Java withrealworldtechnology
 
Introduction to Java Part-2
Introduction to Java Part-2Introduction to Java Part-2
Introduction to Java Part-2
 
Chapter-1 Introduction.pptx
Chapter-1 Introduction.pptxChapter-1 Introduction.pptx
Chapter-1 Introduction.pptx
 
Introduction to JAVA
Introduction to JAVAIntroduction to JAVA
Introduction to JAVA
 
Introduction to JAVA
Introduction to JAVAIntroduction to JAVA
Introduction to JAVA
 
New Java features: Simplified Design Patterns[LIT3826]
New Java features: Simplified Design Patterns[LIT3826]New Java features: Simplified Design Patterns[LIT3826]
New Java features: Simplified Design Patterns[LIT3826]
 
Javaland keynote final
Javaland keynote finalJavaland keynote final
Javaland keynote final
 
Lec 1-of-oop2
Lec 1-of-oop2Lec 1-of-oop2
Lec 1-of-oop2
 
Onion architecture
Onion architectureOnion architecture
Onion architecture
 
Scala Security: Eliminate 200+ Code-Level Threats With Fortify SCA For Scala
Scala Security: Eliminate 200+ Code-Level Threats With Fortify SCA For ScalaScala Security: Eliminate 200+ Code-Level Threats With Fortify SCA For Scala
Scala Security: Eliminate 200+ Code-Level Threats With Fortify SCA For Scala
 
The Java Story
The Java StoryThe Java Story
The Java Story
 
Stay productive while slicing up the monolith
Stay productive while slicing up the monolithStay productive while slicing up the monolith
Stay productive while slicing up the monolith
 
Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat)
Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat)Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat)
Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat)
 
Microservices
MicroservicesMicroservices
Microservices
 
Ohio Devfest - Visual Analysis with GCP
Ohio Devfest - Visual Analysis with GCPOhio Devfest - Visual Analysis with GCP
Ohio Devfest - Visual Analysis with GCP
 
Oracle Fuson Middleware Diagnostics, Performance and Troubleshoot
Oracle Fuson Middleware Diagnostics, Performance and TroubleshootOracle Fuson Middleware Diagnostics, Performance and Troubleshoot
Oracle Fuson Middleware Diagnostics, Performance and Troubleshoot
 
javalightspeed-jakartatech-2023.pdf
javalightspeed-jakartatech-2023.pdfjavalightspeed-jakartatech-2023.pdf
javalightspeed-jakartatech-2023.pdf
 
Stay productive while slicing up the monolith
Stay productive while slicing up the monolithStay productive while slicing up the monolith
Stay productive while slicing up the monolith
 
Pivotal Tracker for Mozat
Pivotal Tracker for MozatPivotal Tracker for Mozat
Pivotal Tracker for Mozat
 

More from JavaDayUA

STEMing Kids: One workshop at a time
STEMing Kids: One workshop at a timeSTEMing Kids: One workshop at a time
STEMing Kids: One workshop at a time
JavaDayUA
 
Flavors of Concurrency in Java
Flavors of Concurrency in JavaFlavors of Concurrency in Java
Flavors of Concurrency in Java
JavaDayUA
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
JavaDayUA
 
Continuously building, releasing and deploying software: The Revenge of the M...
Continuously building, releasing and deploying software: The Revenge of the M...Continuously building, releasing and deploying software: The Revenge of the M...
Continuously building, releasing and deploying software: The Revenge of the M...
JavaDayUA
 
The Epic Groovy Puzzlers S02: The Revenge of the Parentheses
The Epic Groovy Puzzlers S02: The Revenge of the ParenthesesThe Epic Groovy Puzzlers S02: The Revenge of the Parentheses
The Epic Groovy Puzzlers S02: The Revenge of the Parentheses
JavaDayUA
 
20 Years of Java
20 Years of Java20 Years of Java
20 Years of Java
JavaDayUA
 
How to get the most out of code reviews
How to get the most out of code reviewsHow to get the most out of code reviews
How to get the most out of code reviews
JavaDayUA
 
Unlocking the Magic of Monads with Java 8
Unlocking the Magic of Monads with Java 8Unlocking the Magic of Monads with Java 8
Unlocking the Magic of Monads with Java 8
JavaDayUA
 
Virtual Private Cloud with container technologies for DevOps
Virtual Private Cloud with container technologies for DevOpsVirtual Private Cloud with container technologies for DevOps
Virtual Private Cloud with container technologies for DevOps
JavaDayUA
 
JShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java PlatformJShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java Platform
JavaDayUA
 
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and ArchitectureInteractive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and Architecture
JavaDayUA
 
MapDB - taking Java collections to the next level
MapDB - taking Java collections to the next levelMapDB - taking Java collections to the next level
MapDB - taking Java collections to the next level
JavaDayUA
 
Save Java memory
Save Java memorySave Java memory
Save Java memory
JavaDayUA
 
Next-gen DevOps engineering with Docker and Kubernetes by Antons Kranga
Next-gen DevOps engineering with Docker and Kubernetes by Antons KrangaNext-gen DevOps engineering with Docker and Kubernetes by Antons Kranga
Next-gen DevOps engineering with Docker and Kubernetes by Antons Kranga
JavaDayUA
 
Apache Cassandra. Inception - all you need to know by Mikhail Dubkov
Apache Cassandra. Inception - all you need to know by Mikhail DubkovApache Cassandra. Inception - all you need to know by Mikhail Dubkov
Apache Cassandra. Inception - all you need to know by Mikhail Dubkov
JavaDayUA
 
Solution Architecture tips & tricks by Roman Shramkov
Solution Architecture tips & tricks by Roman ShramkovSolution Architecture tips & tricks by Roman Shramkov
Solution Architecture tips & tricks by Roman Shramkov
JavaDayUA
 
Testing in Legacy: from Rags to Riches by Taras Slipets
Testing in Legacy: from Rags to Riches by Taras SlipetsTesting in Legacy: from Rags to Riches by Taras Slipets
Testing in Legacy: from Rags to Riches by Taras Slipets
JavaDayUA
 
Reactive programming and Hystrix fault tolerance by Max Myslyvtsev
Reactive programming and Hystrix fault tolerance by Max MyslyvtsevReactive programming and Hystrix fault tolerance by Max Myslyvtsev
Reactive programming and Hystrix fault tolerance by Max Myslyvtsev
JavaDayUA
 
Spark-driven audience counting by Boris Trofimov
Spark-driven audience counting by Boris TrofimovSpark-driven audience counting by Boris Trofimov
Spark-driven audience counting by Boris Trofimov
JavaDayUA
 
API first with Swagger and Scala by Slava Schmidt
API first with Swagger and Scala by  Slava SchmidtAPI first with Swagger and Scala by  Slava Schmidt
API first with Swagger and Scala by Slava Schmidt
JavaDayUA
 

More from JavaDayUA (20)

STEMing Kids: One workshop at a time
STEMing Kids: One workshop at a timeSTEMing Kids: One workshop at a time
STEMing Kids: One workshop at a time
 
Flavors of Concurrency in Java
Flavors of Concurrency in JavaFlavors of Concurrency in Java
Flavors of Concurrency in Java
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
 
Continuously building, releasing and deploying software: The Revenge of the M...
Continuously building, releasing and deploying software: The Revenge of the M...Continuously building, releasing and deploying software: The Revenge of the M...
Continuously building, releasing and deploying software: The Revenge of the M...
 
The Epic Groovy Puzzlers S02: The Revenge of the Parentheses
The Epic Groovy Puzzlers S02: The Revenge of the ParenthesesThe Epic Groovy Puzzlers S02: The Revenge of the Parentheses
The Epic Groovy Puzzlers S02: The Revenge of the Parentheses
 
20 Years of Java
20 Years of Java20 Years of Java
20 Years of Java
 
How to get the most out of code reviews
How to get the most out of code reviewsHow to get the most out of code reviews
How to get the most out of code reviews
 
Unlocking the Magic of Monads with Java 8
Unlocking the Magic of Monads with Java 8Unlocking the Magic of Monads with Java 8
Unlocking the Magic of Monads with Java 8
 
Virtual Private Cloud with container technologies for DevOps
Virtual Private Cloud with container technologies for DevOpsVirtual Private Cloud with container technologies for DevOps
Virtual Private Cloud with container technologies for DevOps
 
JShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java PlatformJShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java Platform
 
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and ArchitectureInteractive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and Architecture
 
MapDB - taking Java collections to the next level
MapDB - taking Java collections to the next levelMapDB - taking Java collections to the next level
MapDB - taking Java collections to the next level
 
Save Java memory
Save Java memorySave Java memory
Save Java memory
 
Next-gen DevOps engineering with Docker and Kubernetes by Antons Kranga
Next-gen DevOps engineering with Docker and Kubernetes by Antons KrangaNext-gen DevOps engineering with Docker and Kubernetes by Antons Kranga
Next-gen DevOps engineering with Docker and Kubernetes by Antons Kranga
 
Apache Cassandra. Inception - all you need to know by Mikhail Dubkov
Apache Cassandra. Inception - all you need to know by Mikhail DubkovApache Cassandra. Inception - all you need to know by Mikhail Dubkov
Apache Cassandra. Inception - all you need to know by Mikhail Dubkov
 
Solution Architecture tips & tricks by Roman Shramkov
Solution Architecture tips & tricks by Roman ShramkovSolution Architecture tips & tricks by Roman Shramkov
Solution Architecture tips & tricks by Roman Shramkov
 
Testing in Legacy: from Rags to Riches by Taras Slipets
Testing in Legacy: from Rags to Riches by Taras SlipetsTesting in Legacy: from Rags to Riches by Taras Slipets
Testing in Legacy: from Rags to Riches by Taras Slipets
 
Reactive programming and Hystrix fault tolerance by Max Myslyvtsev
Reactive programming and Hystrix fault tolerance by Max MyslyvtsevReactive programming and Hystrix fault tolerance by Max Myslyvtsev
Reactive programming and Hystrix fault tolerance by Max Myslyvtsev
 
Spark-driven audience counting by Boris Trofimov
Spark-driven audience counting by Boris TrofimovSpark-driven audience counting by Boris Trofimov
Spark-driven audience counting by Boris Trofimov
 
API first with Swagger and Scala by Slava Schmidt
API first with Swagger and Scala by  Slava SchmidtAPI first with Swagger and Scala by  Slava Schmidt
API first with Swagger and Scala by Slava Schmidt
 

Recently uploaded

Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
Roshan Dwivedi
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Enterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptxEnterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptx
QuickwayInfoSystems3
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaTop 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Yara Milbes
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 

Recently uploaded (20)

Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Enterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptxEnterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptx
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaTop 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 

Design rationales in the JRockit JVM