SlideShare una empresa de Scribd logo
1 de 105
Descargar para leer sin conexión
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

Más contenido relacionado

Destacado

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 2016Sabine Wojcieszak
 
Distributed Computing with Hazelcast - Brazil Tour
Distributed Computing with Hazelcast - Brazil TourDistributed Computing with Hazelcast - Brazil Tour
Distributed Computing with Hazelcast - Brazil TourChristoph 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 JHipsterDmytro 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 BootiqueAndrus Adamchik
 
Java & low latency applications
Java & low latency applicationsJava & low latency applications
Java & low latency applicationsRuslan Shevchenko
 
Java Concurrency Quick Guide
Java Concurrency Quick GuideJava Concurrency Quick Guide
Java Concurrency Quick GuideAnton Shchastnyi
 
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 - AsciidoctorRobert 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 PackedObjectsMarcel 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 sollteberndmueller
 
(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 EC2Amazon 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 9Pavel 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 beseitigenCarola Lilienthal
 
Angular2 Development for Java developers
Angular2 Development for Java developersAngular2 Development for Java developers
Angular2 Development for Java developersYakov Fain
 

Destacado (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 a 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 NetworksDavid 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 ARwaveTish Shute
 
A Stuxnet for Mainframes
A Stuxnet for MainframesA Stuxnet for Mainframes
A Stuxnet for MainframesCheryl Biswas
 
Hazelcast Jet - Riding the Jet Streams
Hazelcast Jet - Riding the Jet StreamsHazelcast Jet - Riding the Jet Streams
Hazelcast Jet - Riding the Jet StreamsChristoph 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 2014Christian Heilmann
 
TRICK2015 results
TRICK2015 resultsTRICK2015 results
TRICK2015 resultsmametter
 
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 6Alberto 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 PipelinesBenedikt Ritter
 
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 DevelopmentMatt 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 iPhonekentbrew
 
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
 
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 shortVincent Ohprecio
 

Similar a 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
 

Más de Christoph Engelbert

Gute Nachrichten, Schlechte Nachrichten
Gute Nachrichten, Schlechte NachrichtenGute Nachrichten, Schlechte Nachrichten
Gute Nachrichten, Schlechte NachrichtenChristoph 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 DataChristoph 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) WantChristoph Engelbert
 
Road to (Enterprise) Observability
Road to (Enterprise) ObservabilityRoad to (Enterprise) Observability
Road to (Enterprise) ObservabilityChristoph Engelbert
 
Project Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) WallProject Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) WallChristoph 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 StoryboardChristoph 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 2015Christoph 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 HubChristoph Engelbert
 
JCache - Gimme Caching - JavaLand
JCache - Gimme Caching - JavaLandJCache - Gimme Caching - JavaLand
JCache - Gimme Caching - JavaLandChristoph Engelbert
 
Distributed Computing - An Interactive Introduction
Distributed Computing - An Interactive IntroductionDistributed Computing - An Interactive Introduction
Distributed Computing - An Interactive IntroductionChristoph Engelbert
 
Gimme Caching, the Hazelcast JCache Way
Gimme Caching, the Hazelcast JCache WayGimme Caching, the Hazelcast JCache Way
Gimme Caching, the Hazelcast JCache WayChristoph Engelbert
 
Distributed computing with Hazelcast - JavaOne 2014
Distributed computing with Hazelcast - JavaOne 2014Distributed computing with Hazelcast - JavaOne 2014
Distributed computing with Hazelcast - JavaOne 2014Christoph Engelbert
 

Más de 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
 

Último

W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
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 CCTVshikhaohhpro
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfCionsystems
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
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 WorkerThousandEyes
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
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 🔝✔️✔️Delhi Call girls
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 

Último (20)

W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
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
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdf
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
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
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
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 🔝✔️✔️
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 

A Post-Apocalyptic sun.misc.Unsafe World