SlideShare a Scribd company logo
1 of 103
Download to read offline
Loom
Haim Yadid @ Next Insurance
Loom me up Scotty!
Haim Yadid @ Next Insurance
Loom me up Scotty!
Project Loom - What's in it for Me?
Haim Yadid @ Next Insurance
Loom me up Scotty!
Project Loom - What's in it for Me?
Haim Yadid @ Next Insurance
Dall E - Star Trek spaceship Enterprise flying inside a loom, Van gogh style
@lifeyx
Pro t L o es . 2017
JE -425
JE -428
JE -429
CONCURRENCY
request (task)
getBid(user)
getBid(user)
Start End
Duration
Running Blocked
getBid(user)
resolve user country Query bidding service 1
for user country
Query bidding service 2
for user country
Example - Single Threaded
val country = userClient.
findUserByEmail(userEmail).country
t1
https://github.com/lifey/loom-playground
Example - Single Threaded
val country = userClient.
findUserByEmail(userEmail).country
val resultA = serverA.getBid(country)
val resultB = serverB.getBid(country)
t1
Example - Single Threaded
val country = userClient.
findUserByEmail(userEmail).country
val resultA = serverA.getBid(country)
val resultB = serverB.getBid(country)
val lowestBid = if (resultA.price < resultB.price)
resultA
else
resultB
t1
getBid
resolve user country
Query bidding service 1
for user country
Query bidding service 2
for user country fan out is 3
getBid(John)
getBid(Robb)
CONCURRENCY
CONCURRENCY
CONCURRENCY CONCURRENCY
CONCURRENCY
threads
Immutability
Deadlocks
synchronization
Thread pools
race conditions
contention
shared mutable state
message passing
channels
Cache Coherence
callbacks
semaphores
Concurrency
is
Hard
Java and Concurrency / Parallelism
Java 1.0-1.1
(1995)
Threads
wait /notify
synchronized
Java and Concurrency / Parallelism
Java 1.0-1.1
(1995)
Threads
wait /notify
synchronized
Java 1.4
(2002)
Non blocking IO
SocketChannel
Selector
Java and Concurrency / Parallelism
Java 1.0-1.1
(1995)
Threads
wait /notify
synchronized
Java 1.4
(2002)
Non blocking IO
SocketChannel
Selector
Java 1.5
(2004)
j.u.c
Executors
Future
Reentrant Locks
Semaphores
Latches
Java and Concurrency / Parallelism
Java 1.0-1.1
(1995)
Threads
wait /notify
synchronized
Java 1.4
(2002)
Non blocking IO
SocketChannel
Selector
Java 1.5
(2004)
j.u.c
Executors
Future
Reentrant Locks
Semaphores
Latches
Java 1.7
(2011)
ForkJoin Pool
Java 1.8
(2014)
ParallelStreams
CompletableFuture
Java and Concurrency / Parallelism
Java 1.0-1.1
(1995)
Threads
wait /notify
synchronized
Java 1.4
(2002)
Non blocking IO
SocketChannel
Selector
Java 1.5
(2004)
j.u.c
Executors
Future
Reentrant Locks
Semaphores
Latches
Java 1.7
(2011)
ForkJoin Pool
Java 1.8
(2014)
ParallelStreams
CompletableFuture
Java 19
Loom
(2022)
VirtualThreads
Structured Concurrency
traditional Java Concurrency Model
● Thread per request (task) style
● Java thread is a wrapper of OS thread
● 1 or more thread to serve the request using Futures
● Executors and thread pools to control concurrency level
getBid
resolve user country
Query bidding service 1
for user country
Query bidding service 2
for user country fan out is 3
Example (Kotlin)
val userCountry =
userClient.findUserByEmail(userEmail).country
t1
Example (Kotlin)
val userCountry =
userClient.findUserByEmail(userEmail).country
executor.invokeAny (listOf(
))
t1
Example (Kotlin)
val userCountry =
userClient.findUserByEmail(userEmail).country
executor.invokeAny (listOf(
Callable { clientA.getBid(userCountry) } ,
Callable { clientB.getBid(userCountry) }
))
t1
t2
t3
Example (Kotlin)
val userCountry =
userClient.findUserByEmail(userEmail).country
val price = executor.invokeAny (listOf(
Callable { clientA.getBid(userCountry) } ,
Callable { clientB.getBid(userCountry) }
))
.price
t1
t2
t3
SCALABILITY &
HARDWARE UTILIZATION
So How much concurrency ? Little’s Law
● λ - throughput (arrival rate)
● L - average concurrency
● W- average latency /duration
L= λ * W
E= M * C2
getBid(user)
resolve user country Query bidding service 1
for user country
Query bidding service 2
for user country
50% 50%
32 CPU cores
64 (32*2) concurrent tasks
5
%
99%
32 CPU cores
3200 (32*100) concurrent tasks
5
%
99.9 %
32 CPU cores
32000 (32*1000) concurrent tasks
getBid
resolve user country
Query bidding service 1
for user country
Query bidding service 2
for user country fan out is 3
5
%
99.9 %
32 CPU cores
Fan out of 5
150K (32*1000*5) concurrent tasks
C1M Problem
What is needed for a server to hold
1M concurrent connections
So what is the Problem With OS Threads
● stack: ~1 MB
● scheduling >1µs
● launch a new thread ~0.1ms
● context switch involves kernel meaning returning from future
~5µs
● Usually Linux OS can support thousands of threads
Asynchronous Programming Style,
Callback / Non Blocking / Async Model
Event Loop
Event Loop
Asynchronous Programming Style,
Callback / Non Blocking / Async Model
#
of
cores
Async
● Less readable (for most developers )
● Callback hell anyone ?
a diagram from Ron Pressler’s presentation
CompletableFuture.supplyAsync(info::getUrl, pool)
.thenCompose(url -> getBodyAsync(url,
HttpResponse.BodyHandlers.ofString()))
.thenApply(info::findImage)
.thenCompose(url -> getBodyAsync(url,
HttpResponse.BodyHandlers.ofByteArray()))
.thenApply(info::setImageData)
.thenAccept(this::process)
.exceptionally(t -> { t.printStackTrace(); return null; });
Async is Tooling - Nightmare!
● Where is my call stack ?
● debug
● profile
● troubleshoot
● understanding number of actively
running task
●
a slide from Ron Pressler’s presentation
Project Loom is
about
Developer Productivity (& Sanity)
VIRTUAL THREADS
JEP-425 (preview)
Virtual Thread is:
A unit of execution (a task) which can run on
on carrier Platform(OS) thread
Hello World
Thread.ofVirtual()
.name("virtual-", 1)
Hello World
Thread.ofVirtual()
.name("virtual-", 1)
.start {
}.join()
Runnable
Hello World
Thread.ofVirtual()
.name("virtual-", 1)
.start {
Thread.sleep(2000)
println("Hello World:"+ Thread.currentThread())
}.join()
Output :
Hello World: VirtualThread[#23,virtual-1]/runnable@ForkJoinPool-1-worker-1
Example: Executor
val executor = Executors.
newVirtualThreadPerTaskExecutor()
Example: Executor
val executor = Executors.
newVirtualThreadPerTaskExecutor()
executor.use {
}
Example: Executor
val executor = Executors.
newVirtualThreadPerTaskExecutor()
executor.use {
val future = executor.submit {
}
}
Callable
Example: Executor
val executor = Executors.
newVirtualThreadPerTaskExecutor()
executor.use {
val future = executor.submit {
Thread.sleep(2000)
println("Hello World: " + Thread.currentThread())
}
}
Virtual thread
Scheduler
Scheduler
Virtual thread
Common Pool
Scheduler
Virtual thread
Platform Threads
Mounting
Scheduler
Virtual thread
Platform Threads
Continuation.run
Yield
Scheduler
Virtual thread
Platform Threads
Continuation.yield
Yield -> Unmounting
Scheduler
Virtual thread
Platform Threads
Virtual Threads stack frames
● Mounted -> On the carrier thread stack
● UnMounted -> in the Heap
○ pay as you go stack can be very small
Loom Is
JVM
Copying Stack frames
Changes in GC root scanning
JRE
Continuation
Changes in all IO APIs
Thread Locals
Context (e.g.MDC)
TransactionID
Shared Heavy Data Structures
❌
✅
Non thread safe Objects (XML Parser)
❌
Inheritable
You can prevent this from happening by setting
inheritInheritableThreadLocals(false)
STRUCTURED CONCURRENCY
JEP-428 (incubating)
Structured Concurrency
● Makes writing correct concurrent code easier
● Cancellation, error propagation, timeouts
● Observe hierarchy of virtual threads at runtime
Example: Structured Concurrency
val country = userRClient.findUserByEmail(userEmail).country
Example: Structured Concurrency
val country = userRClient.findUserByEmail(userEmail).country
val scope = StructuredTaskScope.
ShutdownOnSuccess<BiddingResponse>()
scope.use {
}
Example: Structured Concurrency
val country = userRClient.findUserByEmail(userEmail).country
val scope = StructuredTaskScope.
ShutdownOnSuccess<BiddingResponse>()
scope.use {
scope.fork { serverA.getBid(country) }
scope.fork { serverB.getBid(country) }
}
Example: Structured Concurrency
val country = userRClient.findUserByEmail(userEmail).country
val scope = StructuredTaskScope.
ShutdownOnSuccess<BiddingResponse>()
scope.use {
scope.fork { serverA.getBid(country) }
scope.fork { serverB.getBid(country) }
val firstSuccessfulFuture = scope.join()
return firstSuccessfulFuture.result().price
}
Example: Structured Concurrency
val country = userRClient.findUserByEmail(userEmail).country
val scope = StructuredTaskScope.
ShutdownOnSuccess<BiddingResponse>()
scope.use {
scope.fork { serverA.getBid(country) }
scope.fork { serverB.getBid(country) }
val firstSuccessfulFuture = scope.joinUntil(
Instant.now().plusMillis(3000))
return firstSuccessfulFuture.result().price
}
Scoped Values
JEP-429 (candidate)
Tooling
Debugger Breakpoint
Debugger Stack Trace
Debugger Virtual Threads
Thread dumps
jstack -l <pid>
Shows only platform threads
Thread dumps
jcmd <pid> Thread.dump_to_file -format=json <File name>
Thread.ofVirtual
executor.submit
scope.fork
Platform Threads
{
"tid": "5604",
"name": "",
"stack": [
"java.base/jdk.internal.vm.Continuation.yield(Continuation.java:357)",
"java.base/java.lang.VirtualThread.yieldContinuation(VirtualThread.java:370)",
"java.base/java.lang.VirtualThread.parkNanos(VirtualThread.java:532)",
"java.base/java.lang.VirtualThread.doSleepNanos(VirtualThread.java:713)",
"java.base/java.lang.VirtualThread.sleepNanos(VirtualThread.java:686)",
"java.base/java.lang.Thread.sleep(Thread.java:451)",
"playground.ExecutorTest$vthreadExecutorTest$1$1$1.invoke(ExecutorTest.kt:30)",
"playground.ExecutorTest$vthreadExecutorTest$1$1$1.invoke(ExecutorTest.kt:27)",
"playground.ExecutorTest.vthreadExecutorTest$lambda-1$lambda-0(ExecutorTest.kt:27)",
"java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:577)",
"java.base/java.util.concurrent.ThreadPerTaskExecutor$ThreadBoundFuture.run(ThreadPerTaskExecutor.ja
va:352)",
"java.base/java.lang.VirtualThread.run(VirtualThread.java:287)",
"java.base/java.lang.VirtualThread$VThreadContinuation.lambda$new$0(VirtualThread.java:174)",
"java.base/jdk.internal.vm.Continuation.enter0(Continuation.java:327)",
"java.base/jdk.internal.vm.Continuation.enter(Continuation.java:320)"
]
},
❌
✅
✅
✅
Java Flight Recorder (JFR)
● jdk.VirtualThreadStart
● jdk.VirtualThreadEnd
● jdk.VirtualThreadPinned
● jdk.VirtualThreadSubmitFailed
Summary
Should I use Project Loom in
Production?
Should I use Project Loom in
Production?
Of course not
Not Yet
But Maybe
● If you are starting to write a new service that is IO bound and
requires high level of concurrency (> 10K concurrent
connections)
● If you want to play around
○ https://github.com/lifey/loom-playground
○ https://github.com/cmpxchg16/kotlin-loom
● If you want to provide feedback
supports Virtual Threads
Since: v10.0.12
Enable by:
QueuedThreadPool.setUseVirtualThread(true)
https://github.com/oracle/graal/pull/4802
https://github.com/quarkusio/quarkus/pull/24942
Helidon Nima
With “dumb”
synchronous code on
Loom and some
simple tuning, quickly
got similar or better
performance to Netty
— Tomas Langer
(Helidon)
--enable-preview
JDK 19
--enable-preview
--add-modules jdk.incubator.concurrent
JDK 19
Pinned Threads
● When a virtual thread is in a synchronized block
(or in JNI call)
● It cannot be unmounted
● Even when blocked on IO
-Djdk.tracePinnedThreads=full
Don’t Po
Vir Th e s
Loom me up Scotty!  Project Loom - What's in it for Me?

More Related Content

Similar to Loom me up Scotty! Project Loom - What's in it for Me?

Mastering Kotlin Standard Library
Mastering Kotlin Standard LibraryMastering Kotlin Standard Library
Mastering Kotlin Standard LibraryNelson Glauber Leal
 
Introduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demoIntroduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demoMuhammad Abdullah
 
Actor based approach in practice for Swift developers
Actor based approach in practice for Swift developersActor based approach in practice for Swift developers
Actor based approach in practice for Swift developersBartosz Polaczyk
 
Deuce STM - CMP'09
Deuce STM - CMP'09Deuce STM - CMP'09
Deuce STM - CMP'09Guy Korland
 
Juju - Google Go in a scalable Environment
Juju - Google Go in a scalable EnvironmentJuju - Google Go in a scalable Environment
Juju - Google Go in a scalable EnvironmentFrank Müller
 
Kotlin for Android devs
Kotlin for Android devsKotlin for Android devs
Kotlin for Android devsAdit Lal
 
外部環境への依存をテストする
外部環境への依存をテストする外部環境への依存をテストする
外部環境への依存をテストするShunsuke Maeda
 
Coroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in PractiseCoroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in PractiseChristian Melchior
 
A TypeScript Fans KotlinJS Adventures
A TypeScript Fans KotlinJS AdventuresA TypeScript Fans KotlinJS Adventures
A TypeScript Fans KotlinJS AdventuresGarth Gilmour
 
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...Tudor Dragan
 
Building a DRYer Android App with Kotlin
Building a DRYer Android App with KotlinBuilding a DRYer Android App with Kotlin
Building a DRYer Android App with KotlinBoonya Kitpitak
 
Implicit parameters, when to use them (or not)!
Implicit parameters, when to use them (or not)!Implicit parameters, when to use them (or not)!
Implicit parameters, when to use them (or not)!Julien Truffaut
 
jimmy hacking (at) Microsoft
jimmy hacking (at) Microsoftjimmy hacking (at) Microsoft
jimmy hacking (at) MicrosoftJimmy Schementi
 
[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기NAVER D2
 
Effecient javascript
Effecient javascriptEffecient javascript
Effecient javascriptmpnkhan
 
Применение паттерна Page Object для автоматизации веб сервисов - новый взгляд
Применение паттерна Page Object для автоматизации веб сервисов - новый взглядПрименение паттерна Page Object для автоматизации веб сервисов - новый взгляд
Применение паттерна Page Object для автоматизации веб сервисов - новый взглядCOMAQA.BY
 
Применение паттерна Page Object для автоматизации веб сервисов
Применение паттерна Page Object для автоматизации веб сервисовПрименение паттерна Page Object для автоматизации веб сервисов
Применение паттерна Page Object для автоматизации веб сервисовCOMAQA.BY
 

Similar to Loom me up Scotty! Project Loom - What's in it for Me? (20)

Mastering Kotlin Standard Library
Mastering Kotlin Standard LibraryMastering Kotlin Standard Library
Mastering Kotlin Standard Library
 
Introduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demoIntroduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demo
 
Actor based approach in practice for Swift developers
Actor based approach in practice for Swift developersActor based approach in practice for Swift developers
Actor based approach in practice for Swift developers
 
Deuce STM - CMP'09
Deuce STM - CMP'09Deuce STM - CMP'09
Deuce STM - CMP'09
 
Juju - Google Go in a scalable Environment
Juju - Google Go in a scalable EnvironmentJuju - Google Go in a scalable Environment
Juju - Google Go in a scalable Environment
 
Kotlin for Android devs
Kotlin for Android devsKotlin for Android devs
Kotlin for Android devs
 
外部環境への依存をテストする
外部環境への依存をテストする外部環境への依存をテストする
外部環境への依存をテストする
 
Coroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in PractiseCoroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in Practise
 
A TypeScript Fans KotlinJS Adventures
A TypeScript Fans KotlinJS AdventuresA TypeScript Fans KotlinJS Adventures
A TypeScript Fans KotlinJS Adventures
 
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...
 
Building a DRYer Android App with Kotlin
Building a DRYer Android App with KotlinBuilding a DRYer Android App with Kotlin
Building a DRYer Android App with Kotlin
 
Implicit parameters, when to use them (or not)!
Implicit parameters, when to use them (or not)!Implicit parameters, when to use them (or not)!
Implicit parameters, when to use them (or not)!
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
jimmy hacking (at) Microsoft
jimmy hacking (at) Microsoftjimmy hacking (at) Microsoft
jimmy hacking (at) Microsoft
 
[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기
 
Griffon @ Svwjug
Griffon @ SvwjugGriffon @ Svwjug
Griffon @ Svwjug
 
Effecient javascript
Effecient javascriptEffecient javascript
Effecient javascript
 
Hw09 Hadoop + Clojure
Hw09   Hadoop + ClojureHw09   Hadoop + Clojure
Hw09 Hadoop + Clojure
 
Применение паттерна Page Object для автоматизации веб сервисов - новый взгляд
Применение паттерна Page Object для автоматизации веб сервисов - новый взглядПрименение паттерна Page Object для автоматизации веб сервисов - новый взгляд
Применение паттерна Page Object для автоматизации веб сервисов - новый взгляд
 
Применение паттерна Page Object для автоматизации веб сервисов
Применение паттерна Page Object для автоматизации веб сервисовПрименение паттерна Page Object для автоматизации веб сервисов
Применение паттерна Page Object для автоматизации веб сервисов
 

More from Haim Yadid

“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
“Show Me the Garbage!”, Garbage Collection a Friend or a Foe“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
“Show Me the Garbage!”, Garbage Collection a Friend or a FoeHaim Yadid
 
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the UglyKotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the UglyHaim Yadid
 
“Show Me the Garbage!”, Understanding Garbage Collection
“Show Me the Garbage!”, Understanding Garbage Collection“Show Me the Garbage!”, Understanding Garbage Collection
“Show Me the Garbage!”, Understanding Garbage CollectionHaim Yadid
 
Java Memory Structure
Java Memory Structure Java Memory Structure
Java Memory Structure Haim Yadid
 
Basic JVM Troubleshooting With Jmx
Basic JVM Troubleshooting With JmxBasic JVM Troubleshooting With Jmx
Basic JVM Troubleshooting With JmxHaim Yadid
 
The Freelancer Journey
The Freelancer JourneyThe Freelancer Journey
The Freelancer JourneyHaim Yadid
 
Building microservices with Kotlin
Building microservices with KotlinBuilding microservices with Kotlin
Building microservices with KotlinHaim Yadid
 
Taking Kotlin to production, Seriously
Taking Kotlin to production, SeriouslyTaking Kotlin to production, Seriously
Taking Kotlin to production, SeriouslyHaim Yadid
 
Let's talk about Garbage Collection
Let's talk about Garbage CollectionLet's talk about Garbage Collection
Let's talk about Garbage CollectionHaim Yadid
 
JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...
JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...
JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...Haim Yadid
 
mjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profilingmjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profilingHaim Yadid
 
Java 8 Launch - MetaSpaces
Java 8 Launch - MetaSpacesJava 8 Launch - MetaSpaces
Java 8 Launch - MetaSpacesHaim Yadid
 
Java 8 - Stamped Lock
Java 8 - Stamped LockJava 8 - Stamped Lock
Java 8 - Stamped LockHaim Yadid
 
The Future of Futures - A Talk About Java 8 CompletableFutures
The Future of Futures - A Talk About Java 8 CompletableFuturesThe Future of Futures - A Talk About Java 8 CompletableFutures
The Future of Futures - A Talk About Java 8 CompletableFuturesHaim Yadid
 
Concurrency and Multithreading Demistified - Reversim Summit 2014
Concurrency and Multithreading Demistified - Reversim Summit 2014Concurrency and Multithreading Demistified - Reversim Summit 2014
Concurrency and Multithreading Demistified - Reversim Summit 2014Haim Yadid
 
A short Intro. to Java Mission Control
A short Intro. to Java Mission ControlA short Intro. to Java Mission Control
A short Intro. to Java Mission ControlHaim Yadid
 
Java Enterprise Edition Concurrency Misconceptions
Java Enterprise Edition Concurrency Misconceptions Java Enterprise Edition Concurrency Misconceptions
Java Enterprise Edition Concurrency Misconceptions Haim Yadid
 
Tales About Scala Performance
Tales About Scala PerformanceTales About Scala Performance
Tales About Scala PerformanceHaim Yadid
 
Israeli JUG - IL JUG presentation
Israeli JUG -  IL JUG presentation Israeli JUG -  IL JUG presentation
Israeli JUG - IL JUG presentation Haim Yadid
 

More from Haim Yadid (19)

“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
“Show Me the Garbage!”, Garbage Collection a Friend or a Foe“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
 
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the UglyKotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
 
“Show Me the Garbage!”, Understanding Garbage Collection
“Show Me the Garbage!”, Understanding Garbage Collection“Show Me the Garbage!”, Understanding Garbage Collection
“Show Me the Garbage!”, Understanding Garbage Collection
 
Java Memory Structure
Java Memory Structure Java Memory Structure
Java Memory Structure
 
Basic JVM Troubleshooting With Jmx
Basic JVM Troubleshooting With JmxBasic JVM Troubleshooting With Jmx
Basic JVM Troubleshooting With Jmx
 
The Freelancer Journey
The Freelancer JourneyThe Freelancer Journey
The Freelancer Journey
 
Building microservices with Kotlin
Building microservices with KotlinBuilding microservices with Kotlin
Building microservices with Kotlin
 
Taking Kotlin to production, Seriously
Taking Kotlin to production, SeriouslyTaking Kotlin to production, Seriously
Taking Kotlin to production, Seriously
 
Let's talk about Garbage Collection
Let's talk about Garbage CollectionLet's talk about Garbage Collection
Let's talk about Garbage Collection
 
JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...
JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...
JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...
 
mjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profilingmjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profiling
 
Java 8 Launch - MetaSpaces
Java 8 Launch - MetaSpacesJava 8 Launch - MetaSpaces
Java 8 Launch - MetaSpaces
 
Java 8 - Stamped Lock
Java 8 - Stamped LockJava 8 - Stamped Lock
Java 8 - Stamped Lock
 
The Future of Futures - A Talk About Java 8 CompletableFutures
The Future of Futures - A Talk About Java 8 CompletableFuturesThe Future of Futures - A Talk About Java 8 CompletableFutures
The Future of Futures - A Talk About Java 8 CompletableFutures
 
Concurrency and Multithreading Demistified - Reversim Summit 2014
Concurrency and Multithreading Demistified - Reversim Summit 2014Concurrency and Multithreading Demistified - Reversim Summit 2014
Concurrency and Multithreading Demistified - Reversim Summit 2014
 
A short Intro. to Java Mission Control
A short Intro. to Java Mission ControlA short Intro. to Java Mission Control
A short Intro. to Java Mission Control
 
Java Enterprise Edition Concurrency Misconceptions
Java Enterprise Edition Concurrency Misconceptions Java Enterprise Edition Concurrency Misconceptions
Java Enterprise Edition Concurrency Misconceptions
 
Tales About Scala Performance
Tales About Scala PerformanceTales About Scala Performance
Tales About Scala Performance
 
Israeli JUG - IL JUG presentation
Israeli JUG -  IL JUG presentation Israeli JUG -  IL JUG presentation
Israeli JUG - IL JUG presentation
 

Recently uploaded

%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...masabamasaba
 
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 AidPhilip Schwarz
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxalwaysnagaraju26
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxAnnaArtyushina1
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
%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 midrandmasabamasaba
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
%+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
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburgmasabamasaba
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 

Recently uploaded (20)

%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
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
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
Abortion Pill Prices Boksburg [(+27832195400*)] 🏥 Women's Abortion Clinic in ...
Abortion Pill Prices Boksburg [(+27832195400*)] 🏥 Women's Abortion Clinic in ...Abortion Pill Prices Boksburg [(+27832195400*)] 🏥 Women's Abortion Clinic in ...
Abortion Pill Prices Boksburg [(+27832195400*)] 🏥 Women's Abortion Clinic in ...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%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
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%+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...
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 

Loom me up Scotty! Project Loom - What's in it for Me?