SlideShare a Scribd company logo
http://www.superbwallpapers.com/fantasy/post-apocalyptic-tower-bridge-london-26546/
A Post-Apocalyptic
sun.misc.Unsafe
World
www.hazelcast.com@noctarius2k
Disclaimer
This talk is not going to be negative!
www.hazelcast.com@noctarius2k
Who’s that dude?
• Chris Engelbert
• Manager of Developer Relations @Hazelcast
• Java-Passionate (10+ years)
• Performance
• Garbage Collection
• Benchmark Fairytales
www.hazelcast.com@noctarius2k
sun.misc.Unsafe?
www.hazelcast.com@noctarius2k
sun.misc.Unsafe?
dangerous
low level
discourage
performance
platform specific
pointers
UNSAFE
www.hazelcast.com@noctarius2k
sun.misc.Scissors
www.hazelcast.com@noctarius2k
“My precious.”
www.hazelcast.com@noctarius2k
“My precious.”The Lord of the Rings
www.hazelcast.com@noctarius2k
Internal Class of the JDK
www.hazelcast.com@noctarius2k
Internal Class of the JDK
and those are not intended for outside use :)
www.hazelcast.com@noctarius2k
Used inside and outside the JDK / JRE
custom (64-bit)
memory allocation
fast
memory access
fast
(de)serialization
minimizegc overhead
custom
memory fences
efficientmemory layout
(array element)
volatile semantics
www.hazelcast.com@noctarius2k
Used inside and outside the JDK / JRE
// Unsafe mechanics

private static final sun.misc.Unsafe U;

private static final long QBASE;

private static final long QLOCK;

private static final int ABASE;

private static final int ASHIFT;

static {

try {

U = sun.misc.Unsafe.getUnsafe();

Class<?> k = WorkQueue.class;

Class<?> ak = ForkJoinTask[].class;

QBASE = U.objectFieldOffset

(k.getDeclaredField("base"));

QLOCK = U.objectFieldOffset

(k.getDeclaredField("qlock"));

ABASE = U.arrayBaseOffset(ak);

int scale = U.arrayIndexScale(ak);

if ((scale & (scale - 1)) != 0)

throw new Error("data type scale not a power of two");

ASHIFT = 31 - Integer.numberOfLeadingZeros(scale);

} catch (Exception e) {

throw new Error(e);

}

}

}
example:
java.util.concurrent.ForkJoinPool
www.hazelcast.com@noctarius2k
“I’m the kind of the world!”
www.hazelcast.com@noctarius2k
“I’m the kind of the world!”Titanic
www.hazelcast.com@noctarius2k
Used inside and outside the JDK / JRE
www.hazelcast.com@noctarius2k
Used inside and outside the JDK / JRE
www.hazelcast.com@noctarius2k
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00000001067314b5, pid=25244, tid=5891
#
# JRE version: Java(TM) SE Runtime Environment (8.0_05-b13) (build 1.8.0_05-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.5-b02 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# V [libjvm.dylib+0x5314b5] Unsafe_SetNativeAddress+0x36
#
# An error report file with more information is saved as:
# /Users/noctarius/git/hazelcast-only.idea/hs_err_pid25244.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
#
www.hazelcast.com@noctarius2k
www.hazelcast.com@noctarius2k
“Supercalifragilisticexpialidocious!”
www.hazelcast.com@noctarius2k
“Supercalifragilisticexpialidocious!”Mary Poppins
www.hazelcast.com@noctarius2k
Used inside and outside the JDK / JRE
MapDB
Netty
Hazelcast
Cassandra Mockito
EasyMock
JMock
Scala
Robolectric
Grails
GsonNeo4j
Apache Ignite
Apache Spark
Apache Kafka
Apache Storm
Apache Continuum
Zookeeper
Dropwizard
Kryo
Byte Buddy
Hibernate
Liquibase
Spring Framework
Ehcache
OrientDB
Chronicle
Apache Hadoop
Apache HBase GWT
Disruptor
JRubyAkka
Agrona
Aeron
Simple Binary Encoding
XRebel
Presto
jol
LWJGL
XAP
XStream
CapLogic
WildFly
Infinispan
www.hazelcast.com@noctarius2k
Used inside and outside the JDK / JRE
MapDB
Netty
Hazelcast
Cassandra Mockito
EasyMock
JMock
Scala
Robolectric
Grails
GsonNeo4j
Apache Ignite
Apache Spark
Apache Kafka
Apache Storm
Apache Continuum
Zookeeper
Dropwizard
Kryo
Byte Buddy
Hibernate
Liquibase
Spring Framework
Ehcache
OrientDB
Chronicle
Apache Hadoop
Apache HBase GWT
Disruptor
JRubyAkka
Agrona
Aeron
Simple Binary Encoding
XRebel
Presto
jol
LWJGL
XAP
XStream
CapLogic
WildFly
Infinispan
www.hazelcast.com@noctarius2k
Used inside and outside the JDK / JRE
MapDB
Netty
Hazelcast
Cassandra Mockito
EasyMock
JMock
Scala
Robolectric
Grails
GsonNeo4j
Apache Ignite
Apache Spark
Apache Kafka
Apache Storm
Apache Continuum
Zookeeper
Dropwizard
Kryo
Byte Buddy
Hibernate
Liquibase
Spring Framework
Ehcache
OrientDB
Chronicle
Apache Hadoop
Apache HBase GWT
Disruptor
JRubyAkka
Agrona
Aeron
Simple Binary Encoding
XRebel
Presto
jol
LWJGL
XAP
XStream
CapLogic
WildFly
Infinispan
www.hazelcast.com@noctarius2k
Hazelcast Use Cases
www.hazelcast.com@noctarius2k
Hazelcast Use Cases
www.hazelcast.com@noctarius2k
Hazelcast Use Cases
custom (64-bit)
memory allocation
fast
memory access
fast
(de)serialization
minimize
gc overhead
custom
memory fences
efficientmemory layout
(array element)
volatile semantics
www.hazelcast.com@noctarius2k
“There’s no place like home.”
www.hazelcast.com@noctarius2k
“There’s no place like home.”The Wizard of Oz
www.hazelcast.com@noctarius2k
www.hazelcast.com@noctarius2k
Close ;-)
Language URL sun.misc.Unsafe
Avian C++ https://github.com/ReadyTalk/avian Yes
BicaVM JavaScript https://github.com/nurv/BicaVM No
Cacao C http://www.cacaojvm.org Yes
Excelsior JVM C / C++ ? http://www.excelsiorjet.com Yes
Dalvik / ART / Android C / C++ https://source.android.com/source/index.html Yes
Graal mainly Java http://openjdk.java.net/projects/graal Yes
GCJ C / C++ https://gcc.gnu.org/java Yes
HaikuVM C http://haiku-vm.sourceforge.net No
IBM J9 C / C++ ? http://www.ibm.com/developerworks/java/jdk/index.html Yes
IcedTea C / C++ http://icedtea.classpath.org/wiki/Main_Page Yes
IKVM.NET C# http://www.ikvm.net Yes
Jamiga C https://sourceforge.net/projects/jamiga2 No
JamVM C http://jamvm.sourceforge.net Yes
JatoVM C http://jatovm.org Yes
JikesRVM C microkernel, Java http://www.jikesrvm.org Yes
JNode C microkernel, Java http://www.jnode.org Yes
JVM.go Go https://github.com/zxh0/jvm.go Yes
JX C http://www4.cs.fau.de/Projects/JX/index.html No
Kaffe C https://github.com/kaffe/kaffe Yes
NanoVM C http://harbaum.org/till/nanovm/index.shtml No
OpenJDK / Oracle / Zulu C / C++ http://openjdk.java.net Yes
RoboVM C / C++ / ObjC https://robovm.com Yes
SAPJVM C / C++ ? http://help.sap.com/saphelp_nwce10/helpdata/en/47/
dc90b4ef17452289f9128b8c2bbd77/content.htm
Yes
Waratek Multitenant JVM C / C++ ? http://www.waratek.com Yes
Zing JVM C / C++ ? https://www.azul.com/products/zing Yes
www.hazelcast.com@noctarius2k
“To infinity and beyond!”
www.hazelcast.com@noctarius2k
“To infinity and beyond!”Toy Story
www.hazelcast.com@noctarius2k
http://mail.openjdk.java.net/pipermail/openjfx-dev/2015-April/017028.html
Let me be blunt -- sun.misc.Unsafe must die in a fire. It is -- wait
for it -- Unsafe. It must go. Ignore any kind of theoretical rope and
start the path to righteousness _*/now/*_. It is still years until the
end of public updates to JDK 8, so we have /*years */to work this out
properly. But sticking our heads in the collective sands and hoping for
trivial work arounds to Unsafe is not going to work. If you're using
Unsafe, this is the year to explain where the API is broken and get it
straight....
Please help us kill Unsafe, kill Unsafe dead, kill Unsafe right, and do
so as quickly as possible to the ultimate benefit of everyone.
Wed Apr 8 19:15:42 UTC 2015, OpenJFX Mailinglist, Donald Smith, Oracle
www.hazelcast.com@noctarius2k
http://mail.openjdk.java.net/pipermail/openjfx-dev/2015-April/017028.html
Let me be blunt -- sun.misc.Unsafe must die in a fire. It is -- wait
for it -- Unsafe. It must go. Ignore any kind of theoretical rope and
start the path to righteousness _*/now/*_. It is still years until the
end of public updates to JDK 8, so we have /*years */to work this out
properly. But sticking our heads in the collective sands and hoping for
trivial work arounds to Unsafe is not going to work. If you're using
Unsafe, this is the year to explain where the API is broken and get it
straight....
Please help us kill Unsafe, kill Unsafe dead, kill Unsafe right, and do
so as quickly as possible to the ultimate benefit of everyone.
Wed Apr 8 19:15:42 UTC 2015, OpenJFX Mailinglist, Donald Smith, Oracle
www.hazelcast.com@noctarius2k
Oracle created a new Taskforce
www.hazelcast.com@noctarius2k
Oracle created a new Taskforce
K.U.T.T. - Kill Unsafe To Total death
www.hazelcast.com@noctarius2k
http://mail.openjdk.java.net/pipermail/openjfx-dev/2015-April/017028.html
Let me be blunt -- sun.misc.Unsafe must die in a fire. It is -- wait
for it -- Unsafe. It must go. Ignore any kind of theoretical rope and
start the path to righteousness _*/now/*_. It is still years until the
end of public updates to JDK 8, so we have /*years */to work this out
properly. But sticking our heads in the collective sands and hoping for
trivial work arounds to Unsafe is not going to work. If you're using
Unsafe, this is the year to explain where the API is broken and get it
straight....
Please help us kill Unsafe, kill Unsafe dead, kill Unsafe right, and do
so as quickly as possible to the ultimate benefit of everyone.
Wed Apr 8 19:15:42 UTC 2015, OpenJFX Mailinglist, Donald Smith, Oracle
www.hazelcast.com@noctarius2k
https://docs.google.com/document/d/1GDm_cAxYInmoHMor-AkStzWvwE9pw6tnz_CebJQxuUE
Hazelcast
jClarity
Azul Systems
Higher Frequency Trading
Rafael Winterhalter
Richard Warburton
and many others…
www.hazelcast.com@noctarius2k
www.hazelcast.com@noctarius2k
www.hazelcast.com@noctarius2k
www.hazelcast.com@noctarius2k
Mutation: it is the key to our evolution.
www.hazelcast.com@noctarius2k
Mutation: it is the key to our evolution.
X-Men
www.hazelcast.com@noctarius2k
Problem 1: Get Access
www.hazelcast.com@noctarius2k
Problem 1: Get Access
Unsafe unsafe = Unsafe.getUnsafe();
Easy One (not working outside the JRE / JDK)
www.hazelcast.com@noctarius2k
Problem 1: Get Access
private static final Unsafe UNSAFE;

static {

try {

Field theUnsafeField = Unsafe.class.getDeclaredField("theUnsafe");

theUnsafeField.setAccessible(true);

UNSAFE = (Unsafe) theUnsafeField.get(Unsafe.class);



} catch (Exception e) {

// We need you! =(

throw new Error(e);

}

}
The Ugly One
www.hazelcast.com@noctarius2k
Problem 1: Get Accessprivate static Unsafe findUnsafe() {

try {

return Unsafe.getUnsafe();

} catch (SecurityException se) {

return AccessController.doPrivileged(new PrivilegedAction<Unsafe>() {

@Override

public Unsafe run() {

try {

Class<Unsafe> type = Unsafe.class;

try {

Field field = type.getDeclaredField("theUnsafe");

field.setAccessible(true);

return type.cast(field.get(type));



} catch (Exception e) {

for (Field field : type.getDeclaredFields()) {

if (type.isAssignableFrom(field.getType())) {

field.setAccessible(true);

return type.cast(field.get(type));

}

}

}

} catch (Exception e) {

throw new RuntimeException("Unsafe unavailable", e);

}

throw new RuntimeException("Unsafe unavailable");

}

});

}

}
The Hazelcast One
(also working in most other JVMs)
www.hazelcast.com@noctarius2k
Problem 1: Get Access
The Tricky One
private static final Unsafe UNSAFE;

static {

try {

Constructor<Unsafe> constructor =
Unsafe.class.getDeclaredConstructor();


constructor.setAccessible(true);

UNSAFE = constructor.newInstance();



} catch (Exception e) {

// We need you! =(

throw new Error(e);

}

}
www.hazelcast.com@noctarius2k
Problem 1: Get Access
The Tricky One
private static final Unsafe UNSAFE;

static {

try {

Constructor<Unsafe> constructor =
Unsafe.class.getDeclaredConstructor();


constructor.setAccessible(true);

UNSAFE = constructor.newInstance();



} catch (Exception e) {

// We need you! =(

throw new Error(e);

}

}
www.hazelcast.com@noctarius2k
Problem 1: Get Access
Does Any Of This Feel Right?
www.hazelcast.com@noctarius2k
Problem 1: Get Access
Weird!
No!
www.hazelcast.com@noctarius2k
Problem 1: Get Access
WAAAAAT!?!?
No!
www.hazelcast.com@noctarius2k
Solution 1: Get Access
www.hazelcast.com@noctarius2k
Solution 1: Get Access
Nothing; not needed anymore!
www.hazelcast.com@noctarius2k
Problem 2: Atomic Updates
private static final Unsafe UNSAFE = findUnsafe();
private static long VERSION_OFFSET = findVersionOffset();
// Updated through Unsafe only!
private volatile long version = 0;
public long increment() {
while(true) {
long version = this.version;
long newVersion = version + 1;
if (UNSAFE.compareAndSwapLong(
this, VERSION_OFFSET, version, newVersion)) {
return newVersion;
}
}
}
Going Unsafe
www.hazelcast.com@noctarius2k
Problem 2: Atomic Updates
We can do better! There’s an API already!
www.hazelcast.com@noctarius2k
Problem 2: Atomic Updates
private final AtomicLong version = new AtomicLong(0);
public long increment() {
return version.incrementAndGet();
}
We can do better! There’s an API already!
But one AtomicLong instance per version
www.hazelcast.com@noctarius2k
Problem 2: Atomic Updates
We can still do better! There’s yet another API already!
www.hazelcast.com@noctarius2k
Problem 2: Atomic Updates
We can still do better! There’s yet another API already!
private static final AtomicLongFieldUpdater<Record> VERSION =

AtomicLongFieldUpdater.newUpdater(Record, "version");

// Updated through atomic field updater only!

private volatile long version = 0;



public long increment() {

return VERSION.incrementAndGet(this);

}
www.hazelcast.com@noctarius2k
Solution 2: Atomic Updates
We can still do better! There’s yet another API already!
private static final AtomicLongFieldUpdater<Record> VERSION =

AtomicLongFieldUpdater.newUpdater(Record, "version");

// Updated through atomic field updater only!

private volatile long version = 0;



public long increment() {

return VERSION.incrementAndGet(this);

}
You guessed it, __ uses it ;-)
www.hazelcast.com@noctarius2k
Solution 2: Atomic Updates
private static final VarHandle VERSION = findVersionVarHandle();



// Updated through VarHandle only!

private volatile long version = 0;



public long increment() {

return (long) VERSION.addAndGet(this, 1);

}
JVM can inline those calls
www.hazelcast.com@noctarius2k
Solution 2: Atomic Updates
public static VarHandle findVersionVarHandle() {

try {

return MethodHandles.lookup().

findFieldVarHandle(Record.class, "version", long.class);



} catch (Exception e) {

throw new Error(e);

}

}
Statically cache the VarHandle instance
www.hazelcast.com@noctarius2k
Problem 3: Memory Management
public long memory() {

long address = UNSAFE.allocateMemory(8);


UNSAFE.putLong(address, Long.MAX_VALUE);


return UNSAFE.getLong(address);

}
Keyword: Off-Heap
www.hazelcast.com@noctarius2k
Problem 3: Memory Management
ByteBuffer possible; API is 32bit though
public long memory() {

ByteBuffer byteBuffer = ByteBuffer.allocateDirect(8);



byteBuffer.putLong(0, Long.MAX_VALUE);



return byteBuffer.getLong(0);

}
www.hazelcast.com@noctarius2k
Solution 3: Memory Management
public long memory() {

ByteBuffer byteBuffer = ByteBuffer.allocateDirect(8);



VarHandle bufferView =

MethodHandles.byteBufferViewVarHandle(long[].class, true);



bufferView.set(byteBuffer, 0, Long.MAX_VALUE);



return bufferView.get(byteBuffer, 0);

}
Simplifies off-heap implementations,

empowers new ideas
www.hazelcast.com@noctarius2k
Solution 3.5: Memory Management
Even easier to build a great off-heap
public long memory(long index) {

try (Scope scope = new NativeScope()) {

Pointer<Long> ptr = scope.allocate(

NativeLibrary.createLayout(long.class), numElements);



Reference<Long> ref = ptr.offset(index).deref();



ref.set(Long.MAX_VALUE);



return ref.get();

}

}
www.hazelcast.com@noctarius2k
Problem 4: Serialization
private static final Unsafe UNSAFE = findUnsafe();



private static final long VALUE_OFFSET = findValueOffset();



public String deserializeString() throws Exception {

char[] chars = magicallyDecodeUTF8FromStream();

String allocated = (String) UNSAFE.allocateInstance(String.class);

UNSAFE.putObjectVolatile(allocated, VALUE_OFFSET, chars);

return allocated;

}
www.hazelcast.com@noctarius2k
Problem 4: Serialization
private static final Unsafe UNSAFE = findUnsafe();



private static final long VALUE_OFFSET = findValueOffset();



public String deserializeString() throws Exception {

char[] chars = magicallyDecodeUTF8FromStream();

String allocated = (String) UNSAFE.allocateInstance(String.class);

UNSAFE.putObjectVolatile(allocated, VALUE_OFFSET, chars);

return allocated;

}
Will break in Java 9 (compressed Strings)
www.hazelcast.com@noctarius2k
Solution 4: Serialization
public String deserializeString() throws Exception {

char[] chars = magicallyDecodeUTF8FromStream();



ReflectionFactory reflectionFactory =

ReflectionFactory.getReflectionFactory();



Constructor<String> constructor = reflectionFactory

.newConstructorForSerialization(String.class, char[].class);



return constructor.newInstance(chars);

}
sun.reflect.ReflectionFactory -> java.lang.reflect.ReflectionFactory (or similar)
www.hazelcast.com@noctarius2k
Problem 5: Native Interoperability
extern c {

JNIEXPORT int JNICALL

Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);

}



JNIEXPORT int JNICALL

Java_ProcessIdentifier_getProcessId(JNIEnv *env, jobject thisObj) {

return getpid();

}



public class ProcessIdentifier {

static {

System.loadLibrary("processidentifier");

}



public native void getProcessId();

}
www.hazelcast.com@noctarius2k
Problem 5: Native Interoperability
extern c {

JNIEXPORT int JNICALL

Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);

}



JNIEXPORT int JNICALL

Java_ProcessIdentifier_getProcessId(JNIEnv *env, jobject thisObj) {

return getpid();

}



public class ProcessIdentifier {

static {

System.loadLibrary("processidentifier");

}



public native void getProcessId();

}
Fortunately we don’t deal with it, but who loves it anyways ;-)
www.hazelcast.com@noctarius2k
Solution 5: Native Interoperability (for now)
interface LibC {

void getpid();

}



public int call() {

LibC c = LibraryLoader.create(LibC.class).load("c");

return c.getpid();

}
JNR, but guess what it uses internally ;-)
www.hazelcast.com@noctarius2k
Solution 5: Native Interoperability
public void call() {
MethodType intType = MethodType.methodType(int.class);


MethodHandle handle = MethodHandles

.findNative(null, “getpid”, intType);


return (int) handle.invokeExact();

}
They inline … just fine.
www.hazelcast.com@noctarius2k
Problem 6: Immutable Types
Defensive Copies, no real optimization yet
www.hazelcast.com@noctarius2k
Solution 6: Immutable Types
value class Point {

final int x;

final int y;

}



// Create a Point instance

Point point = makeValue(1, 2);
Value Types
www.hazelcast.com@noctarius2k
Solution 6: Immutable Types
int[] values = new int[2];

int x = values[0];

int y = values[1];
Looks like
value class Point {

final int x;

final int y;

}



// Create a Point instance

Point point = makeValue(1, 2);
Value Types
www.hazelcast.com@noctarius2k
Solution 6: Immutable Types
value class Point {

final int x;

final int y;

}



// Create a Point instance

Point point = makeValue(1, 2);
Value Types
int[] values = new int[2];

int x = values[0];

int y = values[1];
Stack
var X
var Y
Looks like
Stack Allocation!
www.hazelcast.com@noctarius2k
Problem 7: Generics
HazelcastInstance client = HazelcastClient.newHazelcastClient();
Map<Long, String> messages = client.getMap("messages");
String message = messages.get(1234L);
No generics on primitives
www.hazelcast.com@noctarius2k
Problem 7: Generics
HazelcastInstance client = HazelcastClient.newHazelcastClient();
Map<Long, String> messages = client.getMap("messages");
String message = messages.get(1234L);
No generics on primitives
Auto-(Un)Boxing
www.hazelcast.com@noctarius2k
Problem 7: Generics
HazelcastInstance client = HazelcastClient.newHazelcastClient();
Map<Long, String> messages = client.getMap("messages");
String message = messages.get(1234L);
No generics on primitives
Auto-(Un)Boxing
www.hazelcast.com@noctarius2k
Solution 7: Generics
class Box<any T> {

void set(T element) { ... };


T get() { ... };

}
Specialized Generics (yeah it’s kind of a template)
www.hazelcast.com@noctarius2k
Solution 7: Generics
class Box<any T> {

void set(T element) { ... };


T get() { ... };

}
Specialized Generics (yeah it’s kind of a template)
Box<int> Box${T=int}.class

Box<String> Box${T=java.lang.String}.class

Box<RandomClass> Box${T=RandomClass}.class
www.hazelcast.com@noctarius2k
Solution 7: Generics
public void generics() {

List<int> intList = client.getList("foo");

intList.add(1);

int intValue = intList.get(0);



Queue<String> stringQueue = client.getQueue("foo");

stringQueue.offer("hello");

String stringValue = stringQueue.poll();



Map<int, String> messages = client.getMap("messages");

messages.put(1234L, "hello");

String message = messages.get(1234L);

}
www.hazelcast.com@noctarius2k
www.hazelcast.com@noctarius2k
Arrays 2.0
int[] values = new int[Long.MAX_VALUE];
www.hazelcast.com@noctarius2k
Arrays 2.0
int[] values = new int[Long.MAX_VALUE];
Arrays.chop(T[] a, int newlength);
www.hazelcast.com@noctarius2k
Arrays 2.0
int[] values = new int[Long.MAX_VALUE];
Arrays.chop(T[] a, int newlength);
Box<String>[] ... = new Box<String>[];
www.hazelcast.com@noctarius2k
Arrays 2.0
int[] values = new int[Long.MAX_VALUE];
Arrays.chop(T[] a, int newlength);
Box<int>[] ... = new Box<int>[];
www.hazelcast.com@noctarius2k
Arrays 2.0
int[] values = new int[Long.MAX_VALUE];
Arrays.chop(T[] a, int newlength);
Box<int>[] ... = new Box<int>[];
char[] frozen = new char[20L].freeze();
www.hazelcast.com@noctarius2k
Arrays 2.0
int[] values = new int[Long.MAX_VALUE];
Arrays.chop(T[] a, int newlength);
Box<int>[] ... = new Box<int>[];
char[] frozen = new char[20L].freeze();
www.hazelcast.com@noctarius2k
Cleaner API
package java.nio;
import sun.misc.Cleaner;
class DirectByteBuffer

extends MappedByteBuffer

implements DirectBuffer {
private static class Deallocator implements Runnable {
private Deallocator(long address, long size, int capacity) {...}
public void run() {...}
}
private final Cleaner cleaner;
DirectByteBuffer(int cap) {
...
cleaner = Cleaner.create(this, new Deallocator(base, size, cap));
}
}
www.hazelcast.com@noctarius2k
Cleaner API
public selfCleaning() {

try(AutoCleaning autoCleaning : new AutoCleaning()) {

// do your thing here

}

}
www.hazelcast.com@noctarius2k
Cleaner API
public class AutoCleaning implements AutoCloseable {
// A cleaner, preferably one shared within a library
private static final Cleaner cleaner = ...;
static class State
implements Runnable {
State(...) {/* initialize State needed for cleaning action */}
public void run() {/*cleanup action accessing State, executed at most once*/}
}
private final State state;
private final Cleaner.Cleanable cleanable;
public AutoCleaning() {
this.state = new State(...);
this.cleanable = cleaner.register(this, state);
}
public void close() {
cleanable.clean();
}
}
www.hazelcast.com@noctarius2k
Class Dynamic
• Templating functionality
www.hazelcast.com@noctarius2k
Class Dynamic
• Templating functionality
• Aspect-like approach
www.hazelcast.com@noctarius2k
Class Dynamic
• Templating functionality
• Aspect-like approach
• Group common functionality
www.hazelcast.com@noctarius2k
Class Dynamic
• Templating functionality
• Aspect-like approach
• Group common functionality
• Enhanced Proxies
R methodName(ARGS) {

synchronized (this) {

underlying.methodName(ARGS);

}

}
Collections::sychronizedMap
www.hazelcast.com@noctarius2k
Class Dynamic
• Templating functionality
• Aspect-like approach
• Group common functionality
• Enhanced Proxies
Logging / Tracing
R methodName(ARGS) {

logger.trace("Before methodname X"); 

underlying.methodName(ARGS);

logger.trace("After methodname X");

}
www.hazelcast.com@noctarius2k
What Else?
No idea!
A lot is changing now.
Java / JVM will be different.
… but lots of interesting features, not only for us :)
www.hazelcast.com@noctarius2k
What Else?
Don’t forget about Jigsaw,
test your application with Java 9 EA builds!
https://jdk9.java.net/jigsaw/
www.hazelcast.com@noctarius2k
“My mama always said, ‘Life was like a box of
chocolates. You never know what you’re gonna get.”
www.hazelcast.com@noctarius2k
“My mama always said, ‘Life was like a box of
chocolates. You never know what you’re gonna get.”
Forrest Gump
www.hazelcast.com@noctarius2k
Thank You!
Any Questions?
@noctarius2k
http://www.sourceprojects.org
http://github.com/noctarius
@hazelcast
http://www.hazelcast.com
http://www.hazelcast.org
http://github.com/hazelcast
www.hazelcast.com@noctarius2k
More information:
• http://openjdk.java.net/jeps/193
• http://openjdk.java.net/jeps/254
• http://openjdk.java.net/jeps/285
• http://openjdk.java.net/projects/valhalla/
• http://cr.openjdk.java.net/~jrose/arrays/frozen-array-value-rules.html
• https://twitter.com/PaulSandoz/status/623891528432394240
• http://openjdk.java.net/projects/panama/
• http://cr.openjdk.java.net/~jrose/values/values-0.html
• http://cr.openjdk.java.net/~briangoetz/valhalla/spec-classdyn.html
• http://blog.codefx.org/java/dev/the-road-to-valhalla/
Thank You!
www.hazelcast.com@noctarius2k
Thank You!
http://openjdk.java.net/jeps/259
http://openjdk.java.net/jeps/286
http://openjdk.java.net/jeps/276
http://openjdk.java.net/jeps/269
http://openjdk.java.net/jeps/266
http://openjdk.java.net/jeps/191
http://openjdk.java.net/jeps/186
http://openjdk.java.net/jeps/277

More Related Content

Viewers also liked

Kommunikation und Qualität - Java Forum Nord 2016
Kommunikation und Qualität - Java Forum Nord 2016Kommunikation und Qualität - Java Forum Nord 2016
Kommunikation und Qualität - Java Forum Nord 2016
Sabine Wojcieszak
 
Gimme Caching - The JCache Way
Gimme Caching - The JCache WayGimme Caching - The JCache Way
Gimme Caching - The JCache Way
Christoph Engelbert
 
Distributed Computing with Hazelcast - Brazil Tour
Distributed Computing with Hazelcast - Brazil TourDistributed Computing with Hazelcast - Brazil Tour
Distributed Computing with Hazelcast - Brazil Tour
Christoph Engelbert
 
Do we need Unsafe in Java?
Do we need Unsafe in Java?Do we need Unsafe in Java?
Do we need Unsafe in Java?
Andrei Pangin
 
Get along with JHipster
Get along with JHipsterGet along with JHipster
Get along with JHipster
Dmytro Panin
 
No Container: a Modern Java Stack with Bootique
No Container: a Modern Java Stack with BootiqueNo Container: a Modern Java Stack with Bootique
No Container: a Modern Java Stack with Bootique
Andrus Adamchik
 
Get Back in Control of your SQL
Get Back in Control of your SQLGet Back in Control of your SQL
Get Back in Control of your SQL
Java Usergroup Berlin-Brandenburg
 
Java & low latency applications
Java & low latency applicationsJava & low latency applications
Java & low latency applications
Ruslan Shevchenko
 
Java Concurrency Quick Guide
Java Concurrency Quick GuideJava Concurrency Quick Guide
Java Concurrency Quick Guide
Anton Shchastnyi
 
Die Java Plattform Strategie
Die Java Plattform StrategieDie Java Plattform Strategie
Die Java Plattform Strategie
Java Usergroup Berlin-Brandenburg
 
Presentation Erfolgreiche Software mit großartiger Dokumentation - Asciidoctor
Presentation Erfolgreiche Software mit großartiger Dokumentation - AsciidoctorPresentation Erfolgreiche Software mit großartiger Dokumentation - Asciidoctor
Presentation Erfolgreiche Software mit großartiger Dokumentation - Asciidoctor
Robert Panzer
 
Robust and Scalable Concurrent Programming: Lesson from the Trenches
Robust and Scalable Concurrent Programming: Lesson from the TrenchesRobust and Scalable Concurrent Programming: Lesson from the Trenches
Robust and Scalable Concurrent Programming: Lesson from the TrenchesSangjin Lee
 
Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey
J On The Beach
 
IBM Java PackedObjects
IBM Java PackedObjectsIBM Java PackedObjects
IBM Java PackedObjects
Marcel Mitran
 
Was jeder Java-Entwickler über Strings wissen sollte
Was jeder Java-Entwickler über Strings wissen sollteWas jeder Java-Entwickler über Strings wissen sollte
Was jeder Java-Entwickler über Strings wissen sollte
berndmueller
 
(GAM404) Hunting Monsters in a Low-Latency Multiplayer Game on EC2
(GAM404) Hunting Monsters in a Low-Latency Multiplayer Game on EC2(GAM404) Hunting Monsters in a Low-Latency Multiplayer Game on EC2
(GAM404) Hunting Monsters in a Low-Latency Multiplayer Game on EC2
Amazon Web Services
 
What are the Cool Kids Doing With Continuous Delivery?
What are the Cool Kids Doing With Continuous Delivery?What are the Cool Kids Doing With Continuous Delivery?
What are the Cool Kids Doing With Continuous Delivery?
CA Technologies
 
Pitfalls of migrating projects to JDK 9
Pitfalls of migrating projects to JDK 9Pitfalls of migrating projects to JDK 9
Pitfalls of migrating projects to JDK 9
Pavel Bucek
 
Technische Schulden in Architekturen erkennen und beseitigen
Technische Schulden in Architekturen erkennen und beseitigenTechnische Schulden in Architekturen erkennen und beseitigen
Technische Schulden in Architekturen erkennen und beseitigen
Carola Lilienthal
 
Angular2 Development for Java developers
Angular2 Development for Java developersAngular2 Development for Java developers
Angular2 Development for Java developers
Yakov Fain
 

Viewers also liked (20)

Kommunikation und Qualität - Java Forum Nord 2016
Kommunikation und Qualität - Java Forum Nord 2016Kommunikation und Qualität - Java Forum Nord 2016
Kommunikation und Qualität - Java Forum Nord 2016
 
Gimme Caching - The JCache Way
Gimme Caching - The JCache WayGimme Caching - The JCache Way
Gimme Caching - The JCache Way
 
Distributed Computing with Hazelcast - Brazil Tour
Distributed Computing with Hazelcast - Brazil TourDistributed Computing with Hazelcast - Brazil Tour
Distributed Computing with Hazelcast - Brazil Tour
 
Do we need Unsafe in Java?
Do we need Unsafe in Java?Do we need Unsafe in Java?
Do we need Unsafe in Java?
 
Get along with JHipster
Get along with JHipsterGet along with JHipster
Get along with JHipster
 
No Container: a Modern Java Stack with Bootique
No Container: a Modern Java Stack with BootiqueNo Container: a Modern Java Stack with Bootique
No Container: a Modern Java Stack with Bootique
 
Get Back in Control of your SQL
Get Back in Control of your SQLGet Back in Control of your SQL
Get Back in Control of your SQL
 
Java & low latency applications
Java & low latency applicationsJava & low latency applications
Java & low latency applications
 
Java Concurrency Quick Guide
Java Concurrency Quick GuideJava Concurrency Quick Guide
Java Concurrency Quick Guide
 
Die Java Plattform Strategie
Die Java Plattform StrategieDie Java Plattform Strategie
Die Java Plattform Strategie
 
Presentation Erfolgreiche Software mit großartiger Dokumentation - Asciidoctor
Presentation Erfolgreiche Software mit großartiger Dokumentation - AsciidoctorPresentation Erfolgreiche Software mit großartiger Dokumentation - Asciidoctor
Presentation Erfolgreiche Software mit großartiger Dokumentation - Asciidoctor
 
Robust and Scalable Concurrent Programming: Lesson from the Trenches
Robust and Scalable Concurrent Programming: Lesson from the TrenchesRobust and Scalable Concurrent Programming: Lesson from the Trenches
Robust and Scalable Concurrent Programming: Lesson from the Trenches
 
Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey
 
IBM Java PackedObjects
IBM Java PackedObjectsIBM Java PackedObjects
IBM Java PackedObjects
 
Was jeder Java-Entwickler über Strings wissen sollte
Was jeder Java-Entwickler über Strings wissen sollteWas jeder Java-Entwickler über Strings wissen sollte
Was jeder Java-Entwickler über Strings wissen sollte
 
(GAM404) Hunting Monsters in a Low-Latency Multiplayer Game on EC2
(GAM404) Hunting Monsters in a Low-Latency Multiplayer Game on EC2(GAM404) Hunting Monsters in a Low-Latency Multiplayer Game on EC2
(GAM404) Hunting Monsters in a Low-Latency Multiplayer Game on EC2
 
What are the Cool Kids Doing With Continuous Delivery?
What are the Cool Kids Doing With Continuous Delivery?What are the Cool Kids Doing With Continuous Delivery?
What are the Cool Kids Doing With Continuous Delivery?
 
Pitfalls of migrating projects to JDK 9
Pitfalls of migrating projects to JDK 9Pitfalls of migrating projects to JDK 9
Pitfalls of migrating projects to JDK 9
 
Technische Schulden in Architekturen erkennen und beseitigen
Technische Schulden in Architekturen erkennen und beseitigenTechnische Schulden in Architekturen erkennen und beseitigen
Technische Schulden in Architekturen erkennen und beseitigen
 
Angular2 Development for Java developers
Angular2 Development for Java developersAngular2 Development for Java developers
Angular2 Development for Java developers
 

Similar to A Post-Apocalyptic sun.misc.Unsafe World

Semantic Web For Distributed Social Networks
Semantic Web For Distributed Social NetworksSemantic Web For Distributed Social Networks
Semantic Web For Distributed Social Networks
David Peterson
 
SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진
VMware Tanzu Korea
 
Augmented twitter - open, mobile social augmented reality via ARwave
Augmented twitter - open, mobile social augmented reality via ARwaveAugmented twitter - open, mobile social augmented reality via ARwave
Augmented twitter - open, mobile social augmented reality via ARwave
Tish Shute
 
A Stuxnet for Mainframes
A Stuxnet for MainframesA Stuxnet for Mainframes
A Stuxnet for Mainframes
Cheryl Biswas
 
Hazelcast Jet - Riding the Jet Streams
Hazelcast Jet - Riding the Jet StreamsHazelcast Jet - Riding the Jet Streams
Hazelcast Jet - Riding the Jet Streams
Christoph Engelbert
 
Welcome to planet Fintlewoodlewix - SmashingConf NYC 2014
Welcome to planet Fintlewoodlewix - SmashingConf NYC 2014Welcome to planet Fintlewoodlewix - SmashingConf NYC 2014
Welcome to planet Fintlewoodlewix - SmashingConf NYC 2014
Christian Heilmann
 
TRICK2015 results
TRICK2015 resultsTRICK2015 results
TRICK2015 results
mametter
 
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...
Burr Sutter
 
Candies for everybody: Hacking from 9 to 6
Candies for everybody: Hacking from 9 to 6Candies for everybody: Hacking from 9 to 6
Candies for everybody: Hacking from 9 to 6
Alberto López Martín
 
20210809 story book_driven_new_system_development_nuxtjs
20210809 story book_driven_new_system_development_nuxtjs20210809 story book_driven_new_system_development_nuxtjs
20210809 story book_driven_new_system_development_nuxtjs
虎の穴 開発室
 
Continuous Delivery on Steroids - Introduction to Heroku Pipelines
Continuous Delivery on Steroids - Introduction to Heroku PipelinesContinuous Delivery on Steroids - Introduction to Heroku Pipelines
Continuous Delivery on Steroids - Introduction to Heroku Pipelines
Benedikt Ritter
 
Snakes on the Web
Snakes on the WebSnakes on the Web
Snakes on the Web
Jacob Kaplan-Moss
 
101 ways to configure kafka - badly (Kafka Summit)
101 ways to configure kafka - badly (Kafka Summit)101 ways to configure kafka - badly (Kafka Summit)
101 ways to configure kafka - badly (Kafka Summit)
Henning Spjelkavik
 
The Seven Wastes of Software Development
The Seven Wastes of Software DevelopmentThe Seven Wastes of Software Development
The Seven Wastes of Software Development
Matt Stine
 
Rackspace Cloud Monitoring - Strata NYC
Rackspace Cloud Monitoring - Strata NYCRackspace Cloud Monitoring - Strata NYC
Rackspace Cloud Monitoring - Strata NYCgdusbabek
 
Mistakes I Made Building Netflix for the iPhone
Mistakes I Made Building Netflix for the iPhoneMistakes I Made Building Netflix for the iPhone
Mistakes I Made Building Netflix for the iPhone
kentbrew
 
Katy perry and trend detection red dirt
Katy perry and trend detection   red dirtKaty perry and trend detection   red dirt
Katy perry and trend detection red dirthexgnu
 
Smashingconf nyc-final
Smashingconf nyc-finalSmashingconf nyc-final
Smashingconf nyc-final
Christian Heilmann
 
Nikki Tirado - the pillars of cloudiness / Unlocked: the Hybrid Cloud 12 May ...
Nikki Tirado - the pillars of cloudiness / Unlocked: the Hybrid Cloud 12 May ...Nikki Tirado - the pillars of cloudiness / Unlocked: the Hybrid Cloud 12 May ...
Nikki Tirado - the pillars of cloudiness / Unlocked: the Hybrid Cloud 12 May ...
Rackspace Academy
 
Hacking school computers for fun profit and better grades short
Hacking school computers for fun profit and better grades shortHacking school computers for fun profit and better grades short
Hacking school computers for fun profit and better grades short
Vincent Ohprecio
 

Similar to A Post-Apocalyptic sun.misc.Unsafe World (20)

Semantic Web For Distributed Social Networks
Semantic Web For Distributed Social NetworksSemantic Web For Distributed Social Networks
Semantic Web For Distributed Social Networks
 
SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진
 
Augmented twitter - open, mobile social augmented reality via ARwave
Augmented twitter - open, mobile social augmented reality via ARwaveAugmented twitter - open, mobile social augmented reality via ARwave
Augmented twitter - open, mobile social augmented reality via ARwave
 
A Stuxnet for Mainframes
A Stuxnet for MainframesA Stuxnet for Mainframes
A Stuxnet for Mainframes
 
Hazelcast Jet - Riding the Jet Streams
Hazelcast Jet - Riding the Jet StreamsHazelcast Jet - Riding the Jet Streams
Hazelcast Jet - Riding the Jet Streams
 
Welcome to planet Fintlewoodlewix - SmashingConf NYC 2014
Welcome to planet Fintlewoodlewix - SmashingConf NYC 2014Welcome to planet Fintlewoodlewix - SmashingConf NYC 2014
Welcome to planet Fintlewoodlewix - SmashingConf NYC 2014
 
TRICK2015 results
TRICK2015 resultsTRICK2015 results
TRICK2015 results
 
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...
 
Candies for everybody: Hacking from 9 to 6
Candies for everybody: Hacking from 9 to 6Candies for everybody: Hacking from 9 to 6
Candies for everybody: Hacking from 9 to 6
 
20210809 story book_driven_new_system_development_nuxtjs
20210809 story book_driven_new_system_development_nuxtjs20210809 story book_driven_new_system_development_nuxtjs
20210809 story book_driven_new_system_development_nuxtjs
 
Continuous Delivery on Steroids - Introduction to Heroku Pipelines
Continuous Delivery on Steroids - Introduction to Heroku PipelinesContinuous Delivery on Steroids - Introduction to Heroku Pipelines
Continuous Delivery on Steroids - Introduction to Heroku Pipelines
 
Snakes on the Web
Snakes on the WebSnakes on the Web
Snakes on the Web
 
101 ways to configure kafka - badly (Kafka Summit)
101 ways to configure kafka - badly (Kafka Summit)101 ways to configure kafka - badly (Kafka Summit)
101 ways to configure kafka - badly (Kafka Summit)
 
The Seven Wastes of Software Development
The Seven Wastes of Software DevelopmentThe Seven Wastes of Software Development
The Seven Wastes of Software Development
 
Rackspace Cloud Monitoring - Strata NYC
Rackspace Cloud Monitoring - Strata NYCRackspace Cloud Monitoring - Strata NYC
Rackspace Cloud Monitoring - Strata NYC
 
Mistakes I Made Building Netflix for the iPhone
Mistakes I Made Building Netflix for the iPhoneMistakes I Made Building Netflix for the iPhone
Mistakes I Made Building Netflix for the iPhone
 
Katy perry and trend detection red dirt
Katy perry and trend detection   red dirtKaty perry and trend detection   red dirt
Katy perry and trend detection red dirt
 
Smashingconf nyc-final
Smashingconf nyc-finalSmashingconf nyc-final
Smashingconf nyc-final
 
Nikki Tirado - the pillars of cloudiness / Unlocked: the Hybrid Cloud 12 May ...
Nikki Tirado - the pillars of cloudiness / Unlocked: the Hybrid Cloud 12 May ...Nikki Tirado - the pillars of cloudiness / Unlocked: the Hybrid Cloud 12 May ...
Nikki Tirado - the pillars of cloudiness / Unlocked: the Hybrid Cloud 12 May ...
 
Hacking school computers for fun profit and better grades short
Hacking school computers for fun profit and better grades shortHacking school computers for fun profit and better grades short
Hacking school computers for fun profit and better grades short
 

More from Christoph Engelbert

Data Pipeline Plumbing
Data Pipeline PlumbingData Pipeline Plumbing
Data Pipeline Plumbing
Christoph Engelbert
 
Gute Nachrichten, Schlechte Nachrichten
Gute Nachrichten, Schlechte NachrichtenGute Nachrichten, Schlechte Nachrichten
Gute Nachrichten, Schlechte Nachrichten
Christoph Engelbert
 
Of Farm Topologies and Time-Series Data
Of Farm Topologies and Time-Series DataOf Farm Topologies and Time-Series Data
Of Farm Topologies and Time-Series Data
Christoph Engelbert
 
What I learned about IoT Security ... and why it's so hard!
What I learned about IoT Security ... and why it's so hard!What I learned about IoT Security ... and why it's so hard!
What I learned about IoT Security ... and why it's so hard!
Christoph Engelbert
 
PostgreSQL: The Time-Series Database You (Actually) Want
PostgreSQL: The Time-Series Database You (Actually) WantPostgreSQL: The Time-Series Database You (Actually) Want
PostgreSQL: The Time-Series Database You (Actually) Want
Christoph Engelbert
 
Road to (Enterprise) Observability
Road to (Enterprise) ObservabilityRoad to (Enterprise) Observability
Road to (Enterprise) Observability
Christoph Engelbert
 
Oops-Less Operation
Oops-Less OperationOops-Less Operation
Oops-Less Operation
Christoph Engelbert
 
Instan(t)a-neous Monitoring
Instan(t)a-neous MonitoringInstan(t)a-neous Monitoring
Instan(t)a-neous Monitoring
Christoph Engelbert
 
Don't Go, Java!
Don't Go, Java!Don't Go, Java!
Don't Go, Java!
Christoph Engelbert
 
TypeScript Go(es) Embedded
TypeScript Go(es) EmbeddedTypeScript Go(es) Embedded
TypeScript Go(es) Embedded
Christoph Engelbert
 
CBOR - The Better JSON
CBOR - The Better JSONCBOR - The Better JSON
CBOR - The Better JSON
Christoph Engelbert
 
Project Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) WallProject Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) Wall
Christoph Engelbert
 
The Delivery Hero - A Simpsons As A Service Storyboard
The Delivery Hero - A Simpsons As A Service StoryboardThe Delivery Hero - A Simpsons As A Service Storyboard
The Delivery Hero - A Simpsons As A Service Storyboard
Christoph Engelbert
 
In-Memory Computing - Distributed Systems - Devoxx UK 2015
In-Memory Computing - Distributed Systems - Devoxx UK 2015In-Memory Computing - Distributed Systems - Devoxx UK 2015
In-Memory Computing - Distributed Systems - Devoxx UK 2015
Christoph Engelbert
 
In-Memory Distributed Computing - Porto Tech Hub
In-Memory Distributed Computing - Porto Tech HubIn-Memory Distributed Computing - Porto Tech Hub
In-Memory Distributed Computing - Porto Tech Hub
Christoph Engelbert
 
JCache - Gimme Caching - JavaLand
JCache - Gimme Caching - JavaLandJCache - Gimme Caching - JavaLand
JCache - Gimme Caching - JavaLand
Christoph Engelbert
 
Distributed Computing - An Interactive Introduction
Distributed Computing - An Interactive IntroductionDistributed Computing - An Interactive Introduction
Distributed Computing - An Interactive Introduction
Christoph Engelbert
 
Gimme Caching - The JCache Way
Gimme Caching - The JCache WayGimme Caching - The JCache Way
Gimme Caching - The JCache Way
Christoph Engelbert
 
Gimme Caching, the Hazelcast JCache Way
Gimme Caching, the Hazelcast JCache WayGimme Caching, the Hazelcast JCache Way
Gimme Caching, the Hazelcast JCache Way
Christoph Engelbert
 
Distributed computing with Hazelcast - JavaOne 2014
Distributed computing with Hazelcast - JavaOne 2014Distributed computing with Hazelcast - JavaOne 2014
Distributed computing with Hazelcast - JavaOne 2014
Christoph Engelbert
 

More from Christoph Engelbert (20)

Data Pipeline Plumbing
Data Pipeline PlumbingData Pipeline Plumbing
Data Pipeline Plumbing
 
Gute Nachrichten, Schlechte Nachrichten
Gute Nachrichten, Schlechte NachrichtenGute Nachrichten, Schlechte Nachrichten
Gute Nachrichten, Schlechte Nachrichten
 
Of Farm Topologies and Time-Series Data
Of Farm Topologies and Time-Series DataOf Farm Topologies and Time-Series Data
Of Farm Topologies and Time-Series Data
 
What I learned about IoT Security ... and why it's so hard!
What I learned about IoT Security ... and why it's so hard!What I learned about IoT Security ... and why it's so hard!
What I learned about IoT Security ... and why it's so hard!
 
PostgreSQL: The Time-Series Database You (Actually) Want
PostgreSQL: The Time-Series Database You (Actually) WantPostgreSQL: The Time-Series Database You (Actually) Want
PostgreSQL: The Time-Series Database You (Actually) Want
 
Road to (Enterprise) Observability
Road to (Enterprise) ObservabilityRoad to (Enterprise) Observability
Road to (Enterprise) Observability
 
Oops-Less Operation
Oops-Less OperationOops-Less Operation
Oops-Less Operation
 
Instan(t)a-neous Monitoring
Instan(t)a-neous MonitoringInstan(t)a-neous Monitoring
Instan(t)a-neous Monitoring
 
Don't Go, Java!
Don't Go, Java!Don't Go, Java!
Don't Go, Java!
 
TypeScript Go(es) Embedded
TypeScript Go(es) EmbeddedTypeScript Go(es) Embedded
TypeScript Go(es) Embedded
 
CBOR - The Better JSON
CBOR - The Better JSONCBOR - The Better JSON
CBOR - The Better JSON
 
Project Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) WallProject Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) Wall
 
The Delivery Hero - A Simpsons As A Service Storyboard
The Delivery Hero - A Simpsons As A Service StoryboardThe Delivery Hero - A Simpsons As A Service Storyboard
The Delivery Hero - A Simpsons As A Service Storyboard
 
In-Memory Computing - Distributed Systems - Devoxx UK 2015
In-Memory Computing - Distributed Systems - Devoxx UK 2015In-Memory Computing - Distributed Systems - Devoxx UK 2015
In-Memory Computing - Distributed Systems - Devoxx UK 2015
 
In-Memory Distributed Computing - Porto Tech Hub
In-Memory Distributed Computing - Porto Tech HubIn-Memory Distributed Computing - Porto Tech Hub
In-Memory Distributed Computing - Porto Tech Hub
 
JCache - Gimme Caching - JavaLand
JCache - Gimme Caching - JavaLandJCache - Gimme Caching - JavaLand
JCache - Gimme Caching - JavaLand
 
Distributed Computing - An Interactive Introduction
Distributed Computing - An Interactive IntroductionDistributed Computing - An Interactive Introduction
Distributed Computing - An Interactive Introduction
 
Gimme Caching - The JCache Way
Gimme Caching - The JCache WayGimme Caching - The JCache Way
Gimme Caching - The JCache Way
 
Gimme Caching, the Hazelcast JCache Way
Gimme Caching, the Hazelcast JCache WayGimme Caching, the Hazelcast JCache Way
Gimme Caching, the Hazelcast JCache Way
 
Distributed computing with Hazelcast - JavaOne 2014
Distributed computing with Hazelcast - JavaOne 2014Distributed computing with Hazelcast - JavaOne 2014
Distributed computing with Hazelcast - JavaOne 2014
 

Recently uploaded

BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Jay Das
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 

Recently uploaded (20)

BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 

A Post-Apocalyptic sun.misc.Unsafe World