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

Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Intelisync
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
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 ...harshavardhanraghave
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 

Recently uploaded (20)

Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
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 ...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 

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