SlideShare a Scribd company logo
1 of 80
Download to read offline
@tall_chris#Devoxx #TCoffheap
Terracotta’s OffHeap Explained
Chris Dennis
Terracotta (aka Software AG)
@tall_chris#Devoxx #TCoffheap
Who Am I?
• Trained as a Physicist, clearly not trained as a Computer
Scientist.
• 4Years Doing Unnatural Things With Bytecode In Academia
• 3Years Doing Unnatural Things With Bytecode For Money
• 4Years Doing Unnatural Things With ByteBuffers
• 11Years Doing Java Development
• Software Engineer working at Terracotta (Software AG)
@tall_chris#Devoxx #TCoffheap
[dungeon@Main1	~]$	cat	/proc/meminfo		
MemTotal:							6354030896	kB	
MemFree:								112170556	kB	
[dungeon@Main1	~]$	cat	/proc/cpuinfo		
processor	:	119	
vendor_id	:	GenuineIntel	
cpu	family	 :	6	
model	 	 :	62	
model	name	 :	Intel(R)	Xeon(R)	CPU	E7-4890	v2	@	2.80GHz	
stepping	 :	7	
cpu	MHz		 :	1200.000	
cache	size	 :	38400	KB	
physical	id	:	3
I Get To Play With Big Toys
@tall_chris#Devoxx #TCoffheap
A Bit of History
2010 Started development as a caching ‘tier’ within Ehcache.
2011 Integrated as a caching tier in front of Oracle BDB in the
Terracotta Server.
2013 Legal complications push it in to service as the primary
storage for the Terracotta Server.
2015 Open Sourced (https://github.com/Terracotta-OSS/
offheap-store).
@tall_chris#Devoxx #TCoffheap
Problem Statement
• Map: collection of key-value pairs
• Cache ≈ a Map with bells on
• Caching is good:
https://xkcd.com/908/
https://xkcd.com/908/
@tall_chris#Devoxx #TCoffheap
Problem Statement
• “a lot of caching” leads to
• a lot of heap, which leads to,
• a lot of work for the garbage collector, which leads to,
• a lot of GC pausing/overhead”
• The situation is markedly better now than when the bulk of this
library was written. (Please don’t tell my employer I said that)
@tall_chris#Devoxx #TCoffheap
Map/Cache Best Practices
• Immutable Keys
• please do this!
• ImmutableValues
• please do this!
• So with immutability everywhere, who cares about object
identity?
• If I don’t need object identity, do I need a heap?
• If I don’t need a heap, do I need a garbage collector?
@tall_chris#Devoxx #TCoffheap
Solution
• Replace heavy (large) map/cache usage with an ‘outside the
heap’ but ‘inside the process’ implementation.
• Benefits at two scales:
• At moderate scale, the GC offload reduces overheads.
• At large scale, we can still function: -Xmx6T
• Caveats
• Marshalling/unmarshalling costs time (and CPU)
• Trading away average latency to control the tail.
@tall_chris#Devoxx #TCoffheap
Replace What?
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
Maps
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
JDK HashMap
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
put(k1, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
put(k1, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
put(k1, v)
k1, v
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
k3, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
k3, v
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
put(k1, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
put(k1, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
put(k1, v)
k1, v
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, v
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, vk3, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, vk3, v
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, vk3, v
• Hash Map
• Open Addressing
• Linear Reprobe (1 slot)
@tall_chris#Devoxx #TCoffheap
class	Node<K,	V>	{	
		final	int	hash;	
		final	K	key;	
		V	value;	
		Node<K,	V>	next;	
}
JDK HashMap
k1, v
primitive - easy to store
heap references
closed addressing specific
@tall_chris#Devoxx #TCoffheap
‘struct’	slot	{	
		int	status	
		int	hash;	
		long	encoding	
}
OffHeap Map
k1, v
primitive - easy to store
encoded key/value pair
@tall_chris#Devoxx #TCoffheap
interface	StorageEngine<K,	V>	{	
		Long	writeMapping(K	key,	V	value,	int	hash,	int	metadata);	
		void	freeMapping(long	encoding,	int	hash,	boolean	removal);	
			
		V	readValue(long	encoding);	
		boolean	equalsValue(Object	value,	long	encoding);	
			
		K	readKey(long	encoding,	int	hashCode);	
			
		boolean	equalsKey(Object	key,	long	encoding);	
}
Storing Key & Values
@tall_chris#Devoxx #TCoffheap
Options with 64 bits available
• 64 bit combined pointer
• 32 bit key pointer & 32 bit value pointer
• int key directly + 32 bit pointer
• long key directly + 32 bit pointer
• …anything else you like
@tall_chris#Devoxx #TCoffheap
Pointer to What?
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
A Native ‘Heap’
byte addressable memory (logical address space)
0 max
page page page page
ByteBuffer
.slice()
ByteBuffer
.slice()
ByteBuffer
.slice()
ByteBuffer
.slice()
ByteBuffer.allocateDirect() (physical address space)
@tall_chris#Devoxx #TCoffheap
Managing The ‘Heap’
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
A Native Heap Allocator
• malloc/free performed using a Java port of dlmalloc
• http://g.oswego.edu/dl/html/malloc.html
• Works well for our use cases as we do not generally control
or even know the malloc size distribution.
@tall_chris#Devoxx #TCoffheap
Marshaling
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
“Java Serialization Sucks”
• Serialization is self describing.
• It supports
• object identity
• cycles
• complex versioning
• Pretty heavyweight, especially for short streams…
• …but it’s the default serialization mechanism available in
Ehcache 2.x
@tall_chris#Devoxx #TCoffheap
“Java Serialization Sucks”
• serialize(new Integer(42))
• results in these 81 bytes:
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 AC ED 00 05 73 72 00 11 6A 61 76 61 2E 6C 61 6E
1 67 2E 49 6E 74 65 67 65 72 12 E2 A0 A4 F7 81 87
2 38 02 00 01 49 00 05 76 61 6C 75 65 78 72 00 10
3 6A 61 76 61 2E 6C 61 6E 67 2E 4E 75 6D 62 65 72
4 86 AC 95 1D 0B 94 E0 8B 02 00 00 78 70 00 00 00
5 2A
@tall_chris#Devoxx #TCoffheap
OffHeap’s Serialization Sucks Less?
• serialize(new Integer(42))
• results in 22 bytes
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 AC ED 00 05 73 72 00 00 00 00 78 72 00 00 00 01
1 78 70 00 00 00 2A
2
3
4
5
@tall_chris#Devoxx #TCoffheap
With some structure
STREAM_MAGIC	STREAM_VERSION	
TC_OBJECT	
		TC_CLASSDESC	utf(17,	java.lang.Integer)	
				serialVersionUID[12E2A0A4F7818738]	SC_SERIALIZABLE	
				fields=[I:utf(5,	value)]	
		TC_END_BLOCKDATA	
		TC_CLASSDESC	utf(16,	java.lang.Number)	
				serialVersionUID[86AC951D0B94E08B]	SC_SERIALIZABLE	
				fields=[]	
		TC_END_BLOCKDATA	
		TC_NULL	
0000002A
@tall_chris#Devoxx #TCoffheap
With some structure
STREAM_MAGIC	STREAM_VERSION	
TC_OBJECT	
		TC_CLASSDESC	descriptor(0)	
		TC_END_BLOCKDATA	
		TC_CLASSDESC	descriptor(1)	
		TC_END_BLOCKDATA	
		TC_NULL	
0000002A
@tall_chris#Devoxx #TCoffheap
Where did the 59 bytes go?
• How many types are in my map?
• All keys the same type: really common
• All values the same type: fairly common
• Stick those common ObjectStreamClass instances in a look
aside structure
• Map<Integer, ObjectStreamClass> for reading streams
• Map<SerializableDataKey, Integer> for writing streams
@tall_chris#Devoxx #TCoffheap
class	ObjectOutputStream	{	
		protected	void	writeClassDescriptor(ObjectStreamClass	desc);	
}	
class	ObjectInputStream	{	
		protected	ObjectStreamClass	readClassDescriptor();	
}
Serialization is pretty malleable
@tall_chris#Devoxx #TCoffheap
Portability
• But if serialization still sucks…
interface	Portability<T>	{	
		ByteBuffer	encode(T	object);	
		T	decode(ByteBuffer	buffer);	
		boolean	equals(Object	object,	ByteBuffer	buffer);	
}
@tall_chris#Devoxx #TCoffheap
Concurrency
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
j.u.c.ConcurrentMap
• What does a concurrent map provide?
• happens-before relationship: “actions in a thread prior to placing an
object into a ConcurrentMap as a key or value happen-before actions
subsequent to the access or removal of that object from the
ConcurrentMap in another thread”
• atomic operations: “…except that the action is performed atomically.”
• What do we want?
• concurrent access (readers and writers)
@tall_chris#Devoxx #TCoffheap
Happens Before Relationships
• volatile write/read
• but not on offheap memory locations
• synchronized
• needs a heap object
• other j.u.c classes (Lock,Atomic…)
• needs a heap object
• There is no way within the JDK to enforce a happens before
relationship between writes/reads of an offheap location…
@tall_chris#Devoxx #TCoffheap
No Unsafe please, we’re a library
• Our testing has never shown our offheap implementation to
be a bottleneck in our usages.
• Unnecessary complexity costs $$$
• support
• maintenance
• bugs
@tall_chris#Devoxx #TCoffheap
Simple solution:
OffHeapMap offheap memory area
dlmalloc serializer
@tall_chris#Devoxx #TCoffheap
ReadWriteLock
Simple solution:
OffHeapMap
offheap memory area
dlmalloc
serializer
ConcurrentOffHeapMap
@tall_chris#Devoxx #TCoffheap
A ‘Concurrent’ Map
✅ happens-before relationship: “actions in a thread prior to
placing an object into a ConcurrentMap as a key or value
happen-before actions subsequent to the access or removal of
that object from the ConcurrentMap in another thread”
✅ atomic operations: “…except that the action is performed
atomically.”
⚠ concurrent access (readers and writers)
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k1, v)
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k1, v)
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k1, v)
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k1, v)
k1, v
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
k1, v
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k2, v)
k1, v
k2, v
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
k1, v
k2, v
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k3, v)
k1, v k3, v
k2, v
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
k1, v k3, v
k2, v
@tall_chris#Devoxx #TCoffheap
Concurrency
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
Conclusions
1. Simple engineering is simpler to support and maintain.
2. Going off-heap doesn’t require Unsafe
• (unless ultimate performance is your primary concern)
@tall_chris#Devoxx #TCoffheap
Additional Topics
• Caching
• Weakly-consistent Iterators
• Cross Segment Eviction
• Page Stealing Algorithms
• Native Heap Compaction
• Map Rehashing (Growing &
Shrinking)
• Off-Memory (SSDs)
• Persistence/Durability
• Entry Level Pinning
• Probably Other Stuff I
Forgot About…
@tall_chris#Devoxx #TCoffheap
Questions?
(BTW We’re Hiring)
https://github.com/Terracotta-OSS/offheap-store/

More Related Content

What's hot

Use case for using the ElastiCache for Redis in production
Use case for using the ElastiCache for Redis in productionUse case for using the ElastiCache for Redis in production
Use case for using the ElastiCache for Redis in production
知教 本間
 
Practicing Continuous Deployment
Practicing Continuous DeploymentPracticing Continuous Deployment
Practicing Continuous Deployment
zeeg
 

What's hot (20)

Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
Running High Performance & Fault-tolerant Elasticsearch Clusters on DockerRunning High Performance & Fault-tolerant Elasticsearch Clusters on Docker
Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
 
Troubleshooting Complex Oracle Performance Problems with Tanel Poder
Troubleshooting Complex Oracle Performance Problems with Tanel PoderTroubleshooting Complex Oracle Performance Problems with Tanel Poder
Troubleshooting Complex Oracle Performance Problems with Tanel Poder
 
In Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry OsborneIn Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry Osborne
 
Oracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention TroubleshootingOracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention Troubleshooting
 
Use case for using the ElastiCache for Redis in production
Use case for using the ElastiCache for Redis in productionUse case for using the ElastiCache for Redis in production
Use case for using the ElastiCache for Redis in production
 
Empowering developers to deploy their own data stores
Empowering developers to deploy their own data storesEmpowering developers to deploy their own data stores
Empowering developers to deploy their own data stores
 
Data Analytics Service Company and Its Ruby Usage
Data Analytics Service Company and Its Ruby UsageData Analytics Service Company and Its Ruby Usage
Data Analytics Service Company and Its Ruby Usage
 
Scaling massive elastic search clusters - Rafał Kuć - Sematext
Scaling massive elastic search clusters - Rafał Kuć - SematextScaling massive elastic search clusters - Rafał Kuć - Sematext
Scaling massive elastic search clusters - Rafał Kuć - Sematext
 
Creating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at ScaleCreating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at Scale
 
Async and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRubyAsync and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRuby
 
Caching with Memcached and APC
Caching with Memcached and APCCaching with Memcached and APC
Caching with Memcached and APC
 
Regex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language InsteadRegex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language Instead
 
Practicing Continuous Deployment
Practicing Continuous DeploymentPracticing Continuous Deployment
Practicing Continuous Deployment
 
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
5 Takeaways from Migrating a Library to Scala 3 - Scala Love5 Takeaways from Migrating a Library to Scala 3 - Scala Love
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
 
HBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBaseHBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBase
 
JRuby with Java Code in Data Processing World
JRuby with Java Code in Data Processing WorldJRuby with Java Code in Data Processing World
JRuby with Java Code in Data Processing World
 
Logging for Production Systems in The Container Era
Logging for Production Systems in The Container EraLogging for Production Systems in The Container Era
Logging for Production Systems in The Container Era
 
Memcached
MemcachedMemcached
Memcached
 
Elasticsearch - Dynamic Nodes
Elasticsearch - Dynamic NodesElasticsearch - Dynamic Nodes
Elasticsearch - Dynamic Nodes
 
Sparkstreaming
SparkstreamingSparkstreaming
Sparkstreaming
 

Similar to Terracotta's OffHeap Explained

ImplementingCryptoSecurityARMCortex_Doin
ImplementingCryptoSecurityARMCortex_DoinImplementingCryptoSecurityARMCortex_Doin
ImplementingCryptoSecurityARMCortex_Doin
Jonny Doin
 

Similar to Terracotta's OffHeap Explained (20)

Fast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible JavaFast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible Java
 
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
 
What the C?
What the C?What the C?
What the C?
 
Spark with Elasticsearch
Spark with ElasticsearchSpark with Elasticsearch
Spark with Elasticsearch
 
ImplementingCryptoSecurityARMCortex_Doin
ImplementingCryptoSecurityARMCortex_DoinImplementingCryptoSecurityARMCortex_Doin
ImplementingCryptoSecurityARMCortex_Doin
 
Modern C++
Modern C++Modern C++
Modern C++
 
Data Wars: The Bloody Enterprise strikes back
Data Wars: The Bloody Enterprise strikes backData Wars: The Bloody Enterprise strikes back
Data Wars: The Bloody Enterprise strikes back
 
Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout
 
Forcelandia 2016 PK Chunking
Forcelandia 2016 PK ChunkingForcelandia 2016 PK Chunking
Forcelandia 2016 PK Chunking
 
Move from C to Go
Move from C to GoMove from C to Go
Move from C to Go
 
Vavr Java User Group Rheinland
Vavr Java User Group RheinlandVavr Java User Group Rheinland
Vavr Java User Group Rheinland
 
HBase Data Modeling and Access Patterns with Kite SDK
HBase Data Modeling and Access Patterns with Kite SDKHBase Data Modeling and Access Patterns with Kite SDK
HBase Data Modeling and Access Patterns with Kite SDK
 
Hash Functions FTW
Hash Functions FTWHash Functions FTW
Hash Functions FTW
 
Apache cassandra en production - devoxx 2017
Apache cassandra en production  - devoxx 2017Apache cassandra en production  - devoxx 2017
Apache cassandra en production - devoxx 2017
 
Collections forceawakens
Collections forceawakensCollections forceawakens
Collections forceawakens
 
Jose Selvi - Side-Channels Uncovered [rootedvlc2018]
Jose Selvi - Side-Channels Uncovered [rootedvlc2018]Jose Selvi - Side-Channels Uncovered [rootedvlc2018]
Jose Selvi - Side-Channels Uncovered [rootedvlc2018]
 
C# 7.x What's new and what's coming with C# 8
C# 7.x What's new and what's coming with C# 8C# 7.x What's new and what's coming with C# 8
C# 7.x What's new and what's coming with C# 8
 
NoSQL Endgame - Java2Days 2020 Virtual
NoSQL Endgame - Java2Days 2020 VirtualNoSQL Endgame - Java2Days 2020 Virtual
NoSQL Endgame - Java2Days 2020 Virtual
 
String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?
 
Overview of the Hive Stinger Initiative
Overview of the Hive Stinger InitiativeOverview of the Hive Stinger Initiative
Overview of the Hive Stinger Initiative
 

Recently uploaded

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 

Recently uploaded (20)

Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
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
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
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
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
%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
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 

Terracotta's OffHeap Explained