czterej jeźdźcy apokalipsy gdy armagedon w jvm nadchodzi
TRANSCRIPT
![Page 1: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/1.jpg)
Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi.
![Page 2: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/2.jpg)
![Page 3: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/3.jpg)
• chief architect @ Lumesse• owner/founder/one man orchestra @
symentis.pl• blogger @ geekyprimitives.wordpress.com• philosopher @ twitter:j_palka• code mangler @ bitbucket:kcrimson &
github:jpalka• evil emperor @ 4developers conf/architecture
track• restrained Padawan @ church of JVM
![Page 4: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/4.jpg)
Celem tej prezentacji jest pokazanie Technik, których na co dzień nie będziecie
Stosować
Ten materiał zakłada, że na co dzień nie zgłębiacie terenów przygranicznych
System operacyjny/maszyna wirtualna
Zaprezentowane poniżej informacje i fakty mogą trwale odmienić wasze postrzeganie
rzeczywistości
![Page 5: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/5.jpg)
Dopiero zaczynasz z JVM?Zachwycisz się złożonością
Masz już za sobą pierwszy pad produkcji?Przeklniesz złożoność JVM
Chcesz wiedzieć więcej jak to wszystko działa?
Ta prezentacja łagodnie wprowadzi Cię w terminologię i podstawy
![Page 6: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/6.jpg)
Moją opowieść będę snuł wokół OpenJDK 8
isystemu operacyjnego Linux
Część z tych rzeczy może być prawdą dla innych
JDK i OS
![Page 7: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/7.jpg)
Ale niekoniecznie :)
![Page 8: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/8.jpg)
Opowieść czas zacząć
![Page 9: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/9.jpg)
Pewnego pięknego zimowego wieczorugdzieś w Krakowie, kilka lat temu
![Page 10: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/10.jpg)
![Page 11: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/11.jpg)
O godzinie 4.03Gdy nadzieja już dawno opuściła biuro
A zdrowy rozsądek już dawno wyskoczył za okno
hg clone http://hg.openjdk.java.net/jdk8/jdk8
![Page 12: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/12.jpg)
apt-get install sysstat
apt-get install strace
apt-get install sysdig
sar -d -R 1strace -f -T -p666
![Page 13: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/13.jpg)
A mówiła mama nie zaglądać za zamknięte drzwi?
![Page 14: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/14.jpg)
gdywtem,nagle
iznienacka ...
![Page 15: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/15.jpg)
Z pyłu, sadzy
i dymu, pierwszy jeździec się wyłonił
A imię jego
![Page 16: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/16.jpg)
Garbage Collector
![Page 17: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/17.jpg)
Wiele zrobiono i napisano o automatycznymzarządzaniu pamięcią w JVM
Gdy już ustawisz wszystkie parametryi
przełączniki A
GC nadal będzie zniewalało twój CPU
Jedyne co pozostaje to „off heap memory”
![Page 18: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/18.jpg)
java.nio.ByteBuffer.allocateDirect()
„may reside outside of garbage collected heap”So called C-heap
Makes famous sun.misc.Unsafe a little bit saferAnd slower:)
But let's talk aboutsun.misc.Unsafe.allocateMemory
![Page 19: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/19.jpg)
Allocation and deallocation is really expensive
Mostly because of costly JNI calls
and NMT (native memory tracking)
Mail thread@hotspot-devUnsafe allocate
Calls OS malloc functionhotspot/src/share/vm/prims/unsafe.cpp
![Page 20: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/20.jpg)
UNSAFE_ENTRY(jlong, Unsafe_AllocateMemory(JNIEnv *env, jobject unsafe, jlong size)) UnsafeWrapper("Unsafe_AllocateMemory"); size_t sz = (size_t)size; if (sz != (julong)size || size < 0) { THROW_0(vmSymbols::java_lang_IllegalArgumentException()); } if (sz == 0) { return 0; } sz = round_to(sz, HeapWordSize); void* x = os::malloc(sz); if (x == NULL) { THROW_0(vmSymbols::java_lang_OutOfMemoryError()); } //Copy::fill_to_words((HeapWord*)x, sz / HeapWordSize); return addr_to_java(x);UNSAFE_END
![Page 21: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/21.jpg)
Because it uses mallocYou can „easily” provide your own allocator
export LD_PRELOAD=mylib.so
jemalloc (look cassandra case)
Anyway, it all can end up with„core dump”
So be carefull
Or use wrappers
![Page 22: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/22.jpg)
Tools to play withgithub:alexkasko/unsafe-tools
github:peter-lawrey/Java-Chronicleapache-directmemory
Who depends on unsafeehcache (with BigMemory)
hazelcast (with ElasticMemory)infinispan
lucenecassandra
![Page 23: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/23.jpg)
Trade offs, stupid!
![Page 24: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/24.jpg)
Huge,really huge,
Tottaly hugedata structures
Beware!!!lifetime of objects
serialization/deserialization
![Page 25: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/25.jpg)
… and then Jigsaw cameAnd changed the game
C-Heap APIbecause
people are actually using it(broken window)
Unsafe at any SpeedPublic sun.misc.Unsafe Replacement API
No plans for JDK9 so far
![Page 26: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/26.jpg)
I ziemia się rozstąpiłaI ogień piekielny z ziemi wypełzać począł
drugi jeździec się wyłoniłA imię jego
![Page 27: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/27.jpg)
Input / Output
![Page 28: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/28.jpg)
Block deviceDevice driver
IO scheduler (merge/sort)
I/O request
![Page 29: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/29.jpg)
%iowaitDevice queue size
Time spent on the queue
iostat x d sda 1
![Page 30: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/30.jpg)
avgqusz average queue length for this device
awaitaverage response time (ms) of IO requests to a
device.
svctimaverage time (ms) a device was servicing requests.
qutim = await svctim
![Page 31: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/31.jpg)
qutim
Czas który JVM traci na oczekiwanie na operacje IO
![Page 32: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/32.jpg)
select() (POSIX)epoll() (Linux)kqueue (*BSD)/dev/poll
![Page 33: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/33.jpg)
syscallrequests a service from
kernel
userspacekernelspace
CPU privileged mode
glibc
![Page 34: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/34.jpg)
![Page 35: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/35.jpg)
sun.nio.ch.DefaultSelectorProvider if ("Linux".equals(osname)) { String osversion = AccessController.doPrivileged( new GetPropertyAction("os.version")); String[] vers = osversion.split("\\.", 0); if (vers.length >= 2) { try { int major = Integer.parseInt(vers[0]); int minor = Integer.parseInt(vers[1]); if (major > 2 || (major == 2 && minor >= 6)) { return new sun.nio.ch.EPollSelectorProvider(); } } catch (NumberFormatException x) { // format not recognized } } }
return new sun.nio.ch.PollSelectorProvider();
![Page 36: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/36.jpg)
java.nio
Event loops
Reactor pattern
![Page 37: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/37.jpg)
Nie bądź głupiUżyj
netty.io
![Page 38: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/38.jpg)
Bufory IO pomiędzykernel space
Iuser space
Operacje IO wymagają wielu operacjiKopiowania pomiędzy userspace i kernelspace
DMAmmap()
MMU
![Page 39: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/39.jpg)
![Page 40: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/40.jpg)
Here was slide about
Memory mapped files & page faults,
But somebody removed it :)
![Page 41: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/41.jpg)
… and here was slide about
Vectored IO
But somebody else removed it :)
![Page 42: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/42.jpg)
kernel-user space „zero copy”
FileChannel#transferTo()
wewnątrz JVM „zero copy”
użyj Netty, serio
CompositeByteBuf
![Page 43: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/43.jpg)
Trade offs, stupid!
![Page 44: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/44.jpg)
Blokować?
Nie blokuj gdy,Dużo klientów masz
Blokuj gdy,Strumienie przetwarzasz
![Page 45: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/45.jpg)
CPUs and hard drives are really good at
sequential reading/writing
Use it
![Page 46: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/46.jpg)
I grom potężny pazurem swym nieboskłon na strzępy rozdarł
trzeci jeździec się wyłoniłA imię jego
![Page 47: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/47.jpg)
synchronized
![Page 48: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/48.jpg)
Z pozoru wszystko wygląda niewinnie
%systemContext switches
Voluntary (IO wait, syscall*) Non voluntary (within time slice)
pidstat w t I p {pid}jstack {pid}
![Page 49: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/49.jpg)
WaitingIs
waste
![Page 50: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/50.jpg)
Non blocking algorithms
Wait-freedomKażda operacja zakończy się w z góry określonej
ilości kroków/ instrukcji
Lock-freedomPozwala na zagłodzienie wybranych wątków, Przynajmniej jeden wątek wykonuje operacje
Obstruction-freedom (optimistic concurrency)
![Page 51: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/51.jpg)
Compare-and-swap
java.util.concurrent.atomic
„transakcyjne” metodyCopy on write
Persistent data structures
![Page 52: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/52.jpg)
Atomic operations are
getting faster and fasterWith every new CPU
But we are not there yet!
![Page 53: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/53.jpg)
I wody z oceanów wystąpiły, A z nich bestie żarłoczne,
Człowiekowi nieprzychylneczwarty jeździec się wyłonił
A imię jego
![Page 54: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/54.jpg)
Just In Time compiler
![Page 55: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/55.jpg)
Adaptive runtime
Based on profiling dataSlower startup times
Slower peek peformance(in some cases*)
![Page 56: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/56.jpg)
JIT (Just in Time)HotSpot
Vs
AOT (Ahead of Time)(www.excelsiorjet.com)
![Page 57: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/57.jpg)
Interpreter
C1 compiler
C2 compiler
OSR (on stack replacement)
deoptimization
![Page 58: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/58.jpg)
Inlining
mother of all optimizations
C1 compilerinlines small methods
-XX:MaxInlineSize=35-XX:InlineSmallCode=2000
C2 compilerinlines „hot” methods
-XX:FreqInlineSize=325
![Page 59: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/59.jpg)
public class Inline{
public int doubleAndSum(int x,y){ return makeDouble(x)+makeDouble(y); }
private int makeDouble(int x){ return x+x; }
//after inlining public int doubleAndSum(int x,y){ return (x+x)+(y+y); }
}
![Page 60: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/60.jpg)
The easy part
private, static and final
The hard part
Polimorphism
Class hierarchy analisys
Deoptimization
Beware of megamorph
![Page 61: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/61.jpg)
const char* StackWalkCompPolicy::shouldInline(methodHandle m, float freq, int cnt) { // Allows targeted inlining // positive filter: should send be inlined? returns NULL (--> yes) // or rejection msg int max_size = MaxInlineSize; int cost = m->code_size();
// Check for too many throws (and not too huge) if (m->interpreter_throwout_count() > InlineThrowCount && cost < InlineThrowMaxSize ) { return NULL; }
// bump the max size if the call is frequent if ((freq >= InlineFrequencyRatio) || (cnt >= InlineFrequencyCount)) { if (TraceFrequencyInlining) { tty->print("(Inlined frequent method)\n"); m->print(); } max_size = FreqInlineSize; } if (cost > max_size) { return (_msg = "too big"); } return NULL;}
![Page 62: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/62.jpg)
Inline cache
Inline depth
Recursive inline
![Page 63: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/63.jpg)
other optimizations
remove redundant loads
loop unrollling
global value numbering
intrinsic
escape analisys
![Page 64: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/64.jpg)
… And few others even more interesting
lock elision
lock coarsenning
adaptive locking
biased locking
![Page 65: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/65.jpg)
But first few words about
„fat”
and
„thin” locks
![Page 66: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/66.jpg)
JVM uses futexA „mostly” userspace lock
based on atomic value and wait queue
Unless
high contentionwhich forces futex
to use kernelspacemutex
![Page 67: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/67.jpg)
WAT?
![Page 68: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/68.jpg)
Daleko jeszcze?
![Page 69: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/69.jpg)
What Every Programmer Should Know About Memory
Cpu Caches and Why You Care
Lock-Free Programming (or, Juggling Razor Blades)
brain food for hackers
Linux Device Drivers
![Page 70: Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi](https://reader033.vdocuments.net/reader033/viewer/2022042817/55a62ec01a28ab746d8b46f0/html5/thumbnails/70.jpg)
Let the eternal stream of byte codeFlows through your body