SlideShare a Scribd company logo
1 of 100
Download to read offline
https://middleofnowheregaming.files.wordpress.com/2015/04/game-of-thrones_20150327091828.jpg
Project Panama
Beyond the (JVM) Wall
www.hazelcast.com@noctarius2k
Disclaimer
This is not a rant - promised!
Just a little bit about JNI ;-)
www.hazelcast.com@noctarius2k
Disclaimer #2
If you haven’t seen Game of Thrones yet

keep your eyes closed!
www.hazelcast.com@noctarius2k
Disclaimer #3
Everything is provisional
Don’t take anything as final!
www.hazelcast.com@noctarius2k
Who’s that dude?
• Chris Engelbert
• Manager of Developer Relations @Hazelcast
• Java-Passionate (10+ years)
• Performance
• Garbage Collection
• JVM / Benchmark Fairytales
www.hazelcast.com@noctarius2k
I drink and I know things (sometimes)
www.hazelcast.com@noctarius2k
Project Panama
The True Native Love
www.hazelcast.com@noctarius2k
Unite Enemies
C/C++Java
www.hazelcast.com@noctarius2k
JNI! That's a good name for you!
www.hazelcast.com@noctarius2k
JNI brings interaction between
native code and Java
#include <unistd.h>
int pid = getpid();
simple kernel call
www.hazelcast.com@noctarius2k
JNI brings interaction between
native code and Java
#include <unistd.h>
int pid = getpid();
simple kernel call header import
www.hazelcast.com@noctarius2k
JNI brings interaction between
native code and Java
#include <unistd.h>
int pid = getpid();
simple kernel call header import
request PID
www.hazelcast.com@noctarius2k
#include <unistd.h>
int pid = getpid();
Isn’t that easy in C?
www.hazelcast.com@noctarius2k
You know nothing, of JNI!
www.hazelcast.com@noctarius2k
Starting with the C part :-)
www.hazelcast.com@noctarius2k
Starting with the C part :-)
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
www.hazelcast.com@noctarius2k
Starting with the C part :-)
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
export it as a JNI method
www.hazelcast.com@noctarius2k
Starting with the C part :-)
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
export it as a JNI method
Java Classname
www.hazelcast.com@noctarius2k
Starting with the C part :-)
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
export it as a JNI method
Java Classname Java Methodname
www.hazelcast.com@noctarius2k
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
Starting with the C part :-)
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *env, jobject thisObject) {
return getpid();
}
www.hazelcast.com@noctarius2k
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
Starting with the C part :-)
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *env, jobject thisObject) {
return getpid();
}
kernel call
www.hazelcast.com@noctarius2k
When you think you just won…
www.hazelcast.com@noctarius2k
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *env, jobject thisObject) {
return getpid();
}
Starting with the C part :-)
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *vm, void *reserved) {
return JNI_VERSION_1_2;
}
www.hazelcast.com@noctarius2k
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *env, jobject thisObject) {
return getpid();
}
Starting with the C part :-)
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *vm, void *reserved) {
return JNI_VERSION_1_2;
}
JNI version definition
www.hazelcast.com@noctarius2k
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *env, jobject thisObject) {
return getpid();
}
done, easy right?
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *vm, void *reserved) {
return JNI_VERSION_1_2;
}
www.hazelcast.com@noctarius2k
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *env, jobject thisObject) {
return getpid();
}
oh, missing the Java side, still
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *vm, void *reserved) {
return JNI_VERSION_1_2;
}
public class ProcessIdentifier {
static {
System.loadLibrary("processidentifier");
}
public native void getProcessId();
}
www.hazelcast.com@noctarius2k
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *env, jobject thisObject) {
return getpid();
}
oh, missing the Java side, still
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *vm, void *reserved) {
return JNI_VERSION_1_2;
}
public class ProcessIdentifier {
static {
System.loadLibrary("processidentifier");
}
public native void getProcessId();
}
Java Classname
www.hazelcast.com@noctarius2k
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *env, jobject thisObject) {
return getpid();
}
oh, missing the Java side, still
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *vm, void *reserved) {
return JNI_VERSION_1_2;
}
public class ProcessIdentifier {
static {
System.loadLibrary("processidentifier");
}
public native void getProcessId();
}
Java Classname Java Methodname
www.hazelcast.com@noctarius2k
extern C {
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *, jobject);
}
JNIEXPORT int JNICALL
Java_ProcessIdentifier_getProcessId(JNIEnv *env, jobject thisObject) {
return getpid();
}
ok, ok, now we’re done!
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *vm, void *reserved) {
return JNI_VERSION_1_2;
}
public class ProcessIdentifier {
static {
System.loadLibrary("processidentifier");
}
public native void getProcessId();
}
www.hazelcast.com@noctarius2k
Wasn’t that easy?
www.hazelcast.com@noctarius2k
Wasn’t that easy?
but remember…
www.hazelcast.com@noctarius2k
Everybody struggles with JNI!
www.hazelcast.com@noctarius2k
meanwhile behind

the wall…
www.hazelcast.com@noctarius2k
Java 9 to the rescue
www.hazelcast.com@noctarius2k
Java 9 to the rescue
long pid = ProcessHandle.current().getPid();
www.hazelcast.com@noctarius2k
Java 9 to the rescue
long pid = ProcessHandle.current().getPid();
convenient, eh?
www.hazelcast.com@noctarius2k
but how many can
just update?
www.hazelcast.com@noctarius2k
So? JNI?
www.hazelcast.com@noctarius2k
So? JNI? - NO!
www.hazelcast.com@noctarius2k
A Song From Methods And Handles
www.hazelcast.com@noctarius2k
MethodHandles
MethodType type = MethodType.methodType(int.class);
MethodHandle mh = MethodHandles.lookup()
.findVirtual(ProcessIdentifier.class, "getProcessId", type);
int pid = mh.invokeExact();
www.hazelcast.com@noctarius2k
MethodHandles
MethodType type = MethodType.methodType(int.class);
MethodHandle mh = MethodHandles.lookup()
.findVirtual(ProcessIdentifier.class, "getProcessId", type);
int pid = mh.invokeExact();
type definition
www.hazelcast.com@noctarius2k
MethodHandles
MethodType type = MethodType.methodType(int.class);
MethodHandle mh = MethodHandles.lookup()
.findVirtual(ProcessIdentifier.class, "getProcessId", type);
int pid = mh.invokeExact();
returntypetype definition
www.hazelcast.com@noctarius2k
MethodHandles
MethodType type = MethodType.methodType(int.class);
MethodHandle mh = MethodHandles.lookup()
.findVirtual(ProcessIdentifier.class, "getProcessId", type);
int pid = mh.invokeExact();
returntypetype definition
Java Classname
www.hazelcast.com@noctarius2k
MethodHandles
MethodType type = MethodType.methodType(int.class);
MethodHandle mh = MethodHandles.lookup()
.findVirtual(ProcessIdentifier.class, "getProcessId", type);
int pid = mh.invokeExact();
returntypetype definition
Java Classname Java Methodname
www.hazelcast.com@noctarius2k
MethodHandles
MethodType type = MethodType.methodType(int.class);
MethodHandle mh = MethodHandles.lookup()
.findVirtual(ProcessIdentifier.class, "getProcessId", type);
int pid = mh.invokeExact();
returntypetype definition
Java Classname Java Methodnamecall the new callsite
www.hazelcast.com@noctarius2k
MethodHandles
So? What’s the deal? Java 7, right?
www.hazelcast.com@noctarius2k
MethodHandles
MethodType type = MethodType.methodType(int.class);
MethodHandle mh = MethodHandles.lookup()
.findVirtual(ProcessIdentifier.class, "getProcessId", type);
int pid = mh.invokeExact();
www.hazelcast.com@noctarius2k
MethodHandles
MethodType type = MethodType.methodType(int.class);
MethodHandle mh = MethodHandles.lookup()
.findVirtual(ProcessIdentifier.class, "getProcessId", type);
int pid = mh.invokeExact();
virtual call
www.hazelcast.com@noctarius2k
MethodHandles
MethodType type = MethodType.methodType(int.class);
MethodHandle mh = MethodHandles.lookup()
.findNative(null, "getpid", type);
int pid = mh.invokeExact();
native
www.hazelcast.com@noctarius2k
MethodHandles
MethodType type = MethodType.methodType(int.class);
MethodHandle mh = MethodHandles.lookup()
.findNative(null, "getpid", type);
int pid = mh.invokeExact();
native
native call
www.hazelcast.com@noctarius2k
MethodHandles
MethodType type = MethodType.methodType(int.class);
MethodHandle mh = MethodHandles.lookup()
.findNative(null, "getpid", type);
int pid = mh.invokeExact();
native
native call null = kernel call

otherwise lib name
www.hazelcast.com@noctarius2k
Easier than taking
the Iron Throne!
www.hazelcast.com@noctarius2k
The Mad King
www.hazelcast.com@noctarius2k
Pointer with sun.misc.Unsafe
Unsafe unsafe = getUnsafeWithMagic();
long ptr = unsafe.allocateMemory(20);
byte val = unsafe.getByte(ptr + 5);
www.hazelcast.com@noctarius2k
Pointer with sun.misc.Unsafe
Unsafe unsafe = getUnsafeWithMagic();
long ptr = unsafe.allocateMemory(20);
byte val = unsafe.getByte(ptr + 5);
retrieve sun.misc.Unsafe instance
www.hazelcast.com@noctarius2k
Pointer with sun.misc.Unsafe
Unsafe unsafe = getUnsafeWithMagic();
long ptr = unsafe.allocateMemory(20);
byte val = unsafe.getByte(ptr + 5);
retrieve sun.misc.Unsafe instance
allocate 20 bytes
www.hazelcast.com@noctarius2k
Pointer with sun.misc.Unsafe
Unsafe unsafe = getUnsafeWithMagic();
long ptr = unsafe.allocateMemory(20);
byte val = unsafe.getByte(ptr + 5);
retrieve sun.misc.Unsafe instance
allocate 20 bytesget byte at ptr+5
www.hazelcast.com@noctarius2k
So I die, for using Unsafe?
www.hazelcast.com@noctarius2k
Who needs Unsafe anyways
LayoutType<Byte> layout =
NativeLibrary.createLayout(byte.class);
try (Scope scope = new NativeScope()) {
Pointer<Byte> p = scope.allocate(layout, 20);
Reference<Byte> ref = p.offset(5).deref();
byte val = ref.get();
}
www.hazelcast.com@noctarius2k
Who needs Unsafe anyways
LayoutType<Byte> layout =
NativeLibrary.createLayout(byte.class);
try (Scope scope = new NativeScope()) {
Pointer<Byte> p = scope.allocate(layout, 20);
Reference<Byte> ref = p.offset(5).deref();
byte val = ref.get();
}
byte-array
layout
www.hazelcast.com@noctarius2k
Who needs Unsafe anyways
LayoutType<Byte> layout =
NativeLibrary.createLayout(byte.class);
try (Scope scope = new NativeScope()) {
Pointer<Byte> p = scope.allocate(layout, 20);
Reference<Byte> ref = p.offset(5).deref();
byte val = ref.get();
}
byte-array
layout
create a
scope
www.hazelcast.com@noctarius2k
Who needs Unsafe anyways
LayoutType<Byte> layout =
NativeLibrary.createLayout(byte.class);
try (Scope scope = new NativeScope()) {
Pointer<Byte> p = scope.allocate(layout, 20);
Reference<Byte> ref = p.offset(5).deref();
byte val = ref.get();
}
byte-array
layout
create a
scope
allocate

20 bytes
www.hazelcast.com@noctarius2k
Who needs Unsafe anyways
LayoutType<Byte> layout =
NativeLibrary.createLayout(byte.class);
try (Scope scope = new NativeScope()) {
Pointer<Byte> p = scope.allocate(layout, 20);
Reference<Byte> ref = p.offset(5).deref();
byte val = ref.get();
}
byte-array
layout
create a
scope
allocate

20 bytes
get byte

at ptr+5
www.hazelcast.com@noctarius2k
Who needs Unsafe anyways
www.hazelcast.com@noctarius2k
Who needs Unsafe anyways
www.hazelcast.com@noctarius2k
A REAL NULL POINTER! THANK YOU JAVA!
Who needs Unsafe anyways
www.hazelcast.com@noctarius2k
About Structs and
other Creatures
www.hazelcast.com@noctarius2k
Struct in Java? No, Layout!
typedef struct {
int32_t val;
Node next;
} Node;
www.hazelcast.com@noctarius2k
Same LinkedList Node in Java
@LayoutDesc({"x:jint:4", "y:Node:8"})
public interface Node extends Layout {
// …
}
www.hazelcast.com@noctarius2k
@LayoutDesc({"x:jint:4", "y:Node:8"})
public interface Node extends Layout {
interface EffectiveAddress {
IntPointer val();
Pointer<Node> next();
}
// …
}
Same LinkedList Node in Java
www.hazelcast.com@noctarius2k
@LayoutDesc({"x:jint:4", "y:Node:8"})
public interface Node extends Layout {
Node.EffectiveAddress EA();
long sizeof();
int val();
// …
}
Same LinkedList Node in Java
www.hazelcast.com@noctarius2k
@LayoutDesc({"x:jint:4", "y:Node:8"})
public interface Node extends Layout {
Node next();
void val(int val);
void next(Node next);
String toString();
}
Same LinkedList Node in Java
www.hazelcast.com@noctarius2k
Scope scope = new NativeScope();
Pointer<Node> ptr = scope.allocate(Node.class);
Node node = ptr.getLayout();
int val = node.val();
Node next = node.next();
Creating layouted Objects
www.hazelcast.com@noctarius2k
I slayed the Mad King
www.hazelcast.com@noctarius2k
Value Isn’t A Pit. Value Is A Ladder.
www.hazelcast.com@noctarius2k
Value Types
value class Point {
int x;
int y;
}
www.hazelcast.com@noctarius2k
Value Types
Point point = __make Point(1, 2);
int x = point.x;
int y = point.y;
www.hazelcast.com@noctarius2k
Yet another layout?
www.hazelcast.com@noctarius2k
class Point {}
Point[] points = …
Arrays of Points
www.hazelcast.com@noctarius2k
value class Point {}
Point[] points = …
Arrays of Points
www.hazelcast.com@noctarius2k
I’m feeling so Assembler today
www.hazelcast.com@noctarius2k
Coding a Vector-Function in Java
MethodType type = MethodType.methodType(
Float.class, Float.class, Float.class);
MethodHandle m256_vadds = CodeSnippets
.make(..., type, …);
m256_vadds.invokeExact(out, in1, in2);
low-level
www.hazelcast.com@noctarius2k
Coding a Vector-Function in Java
high-level
interface Vector<E, S extends Shape<Vector?, S>> {
Vector<E, S> add (Vector<E, S> other);
Vector<E, S> mul (Vector<E, S> other);
Vector<E, S> and (Vector<E, S> other);
// ... more operations
}
www.hazelcast.com@noctarius2k
Coding a Vector-Function in Java
high-level
void addVector(float[] left, float[] right,
float[] res, int length) {
// …
}
www.hazelcast.com@noctarius2k
Coding a Vector-Function in Java
high-level
void addVector(float[] left, float[] right,
float[] res, int length) {
FloatVector<S256Bit> l =
float256FromArray(left, length);
FloatVector<S256Bit> r =
float256FromArray(right, length);
// …
}
www.hazelcast.com@noctarius2k
Coding a Vector-Function in Java
high-level
void addVector(float[] left, float[] right,
float[] res, int length) {
// …
FloatVector<S256Bit> lr = l.add(r);
lr.intoArray(res, length);
}
www.hazelcast.com@noctarius2k
Razersharp tooling
www.hazelcast.com@noctarius2k
So what do we expect?
www.hazelcast.com@noctarius2k
Peace with the Dragons
www.hazelcast.com@noctarius2k
Peace with the Dragons
C / C++
www.hazelcast.com@noctarius2k
Painless communication…
www.hazelcast.com@noctarius2k
Painless communication…
…between native and Java code
www.hazelcast.com@noctarius2k
More fun…
www.hazelcast.com@noctarius2k
More fun…
… and faster code …
www.hazelcast.com@noctarius2k
More fun…
…without JNI
… and faster code …
www.hazelcast.com@noctarius2k
Thank You &
George R.R. Martin
www.hazelcast.com@noctarius2k
More information:
• http://openjdk.java.net/projects/valhalla/
• http://openjdk.java.net/projects/panama/
• http://cr.openjdk.java.net/~jrose/values/values-0.html
• http://blog.codefx.org/java/dev/the-road-to-valhalla/
• http://openjdk.java.net/jeps/191
• https://www.youtube.com/watch?v=JR1zI5gLhRM
• https://github.com/J9Java/panama-layout-prototype
• https://developer.ibm.com/open/openprojects/project-panama-layout-prototype/
• https://www.youtube.com/watch?v=Tc9vs_HFHVo
• https://www.youtube.com/watch?v=Z2XgO1H6xPM
Thank You!
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
German
speaking?
JVM related talk
on Slack
Get your own invite at:
https://slackin-jvm-german.herokuapp.com

More Related Content

What's hot

Java Bytecode: Passing Parameters
Java Bytecode: Passing ParametersJava Bytecode: Passing Parameters
Java Bytecode: Passing Parameters
Anton Arhipov
 
Android code puzzlers + tips & tricks
Android code puzzlers + tips & tricksAndroid code puzzlers + tips & tricks
Android code puzzlers + tips & tricks
NLJUG
 

What's hot (20)

Java Bytecode: Passing Parameters
Java Bytecode: Passing ParametersJava Bytecode: Passing Parameters
Java Bytecode: Passing Parameters
 
Cassandra Summit EU 2014 - Testing Cassandra Applications
Cassandra Summit EU 2014 - Testing Cassandra ApplicationsCassandra Summit EU 2014 - Testing Cassandra Applications
Cassandra Summit EU 2014 - Testing Cassandra Applications
 
When Enterprise Java Micro Profile meets Angular
When Enterprise Java Micro Profile meets AngularWhen Enterprise Java Micro Profile meets Angular
When Enterprise Java Micro Profile meets Angular
 
Deep Dive into Zone.JS
Deep Dive into Zone.JSDeep Dive into Zone.JS
Deep Dive into Zone.JS
 
Fault tolerant microservices - LJC Skills Matter 4thNov2014
Fault tolerant microservices - LJC Skills Matter 4thNov2014Fault tolerant microservices - LJC Skills Matter 4thNov2014
Fault tolerant microservices - LJC Skills Matter 4thNov2014
 
Tests unitaires mock_kesako_20130516
Tests unitaires mock_kesako_20130516Tests unitaires mock_kesako_20130516
Tests unitaires mock_kesako_20130516
 
Code as Risk
Code as RiskCode as Risk
Code as Risk
 
ReactJS for Programmers
ReactJS for ProgrammersReactJS for Programmers
ReactJS for Programmers
 
Process Doppelgänging
Process Doppelgänging Process Doppelgänging
Process Doppelgänging
 
15 tips to improve your unit tests (Droidcon Berlin 2016 Barcamp)
15 tips to improve your unit tests (Droidcon Berlin 2016 Barcamp)15 tips to improve your unit tests (Droidcon Berlin 2016 Barcamp)
15 tips to improve your unit tests (Droidcon Berlin 2016 Barcamp)
 
LJC Conference 2014 Cassandra for Java Developers
LJC Conference 2014 Cassandra for Java DevelopersLJC Conference 2014 Cassandra for Java Developers
LJC Conference 2014 Cassandra for Java Developers
 
Goto devoxx
Goto devoxxGoto devoxx
Goto devoxx
 
Server1
Server1Server1
Server1
 
Redux for ReactJS Programmers
Redux for ReactJS ProgrammersRedux for ReactJS Programmers
Redux for ReactJS Programmers
 
Android code puzzlers + tips & tricks
Android code puzzlers + tips & tricksAndroid code puzzlers + tips & tricks
Android code puzzlers + tips & tricks
 
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloadingJavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
 
Java设置环境变量
Java设置环境变量Java设置环境变量
Java设置环境变量
 
201913046 wahyu septiansyah network programing
201913046 wahyu septiansyah network programing201913046 wahyu septiansyah network programing
201913046 wahyu septiansyah network programing
 
Unit Testing: Special Cases
Unit Testing: Special CasesUnit Testing: Special Cases
Unit Testing: Special Cases
 
Cassandra is great but how do I test my application?
Cassandra is great but how do I test my application?Cassandra is great but how do I test my application?
Cassandra is great but how do I test my application?
 

Viewers also liked

Viewers also liked (20)

CBOR - The Better JSON
CBOR - The Better JSONCBOR - The Better JSON
CBOR - The Better JSON
 
TDD mit JUnit und Mockito
TDD mit JUnit und MockitoTDD mit JUnit und Mockito
TDD mit JUnit und Mockito
 
Its all about the domain honey
Its all about the domain honeyIts all about the domain honey
Its all about the domain honey
 
Javaslang Talk @ Javaland 2017
Javaslang Talk @ Javaland 2017Javaslang Talk @ Javaland 2017
Javaslang Talk @ Javaland 2017
 
Configuration beyond Java EE 8
Configuration beyond Java EE 8Configuration beyond Java EE 8
Configuration beyond Java EE 8
 
10 STEPS TO OVERCOME A LOUSY ATTITUDE
10 STEPS TO OVERCOME A LOUSY ATTITUDE10 STEPS TO OVERCOME A LOUSY ATTITUDE
10 STEPS TO OVERCOME A LOUSY ATTITUDE
 
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
 
色彩センスのいらない配色講座
色彩センスのいらない配色講座色彩センスのいらない配色講座
色彩センスのいらない配色講座
 
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
 
The Marketer's Guide To Customer Interviews
The Marketer's Guide To Customer InterviewsThe Marketer's Guide To Customer Interviews
The Marketer's Guide To Customer Interviews
 
Design in Tech Report 2017
Design in Tech Report 2017Design in Tech Report 2017
Design in Tech Report 2017
 
From pair programming to mob architecting
From pair programming to mob architecting From pair programming to mob architecting
From pair programming to mob architecting
 
DDD and reactive frameworks
DDD and reactive frameworksDDD and reactive frameworks
DDD and reactive frameworks
 
Idea21 2015
Idea21 2015Idea21 2015
Idea21 2015
 
Intelligence artificielle en médecine
Intelligence artificielle en médecineIntelligence artificielle en médecine
Intelligence artificielle en médecine
 
孤独なフリーランサー
孤独なフリーランサー孤独なフリーランサー
孤独なフリーランサー
 
Rapport de Triple-C sur l'audience du Carn@val numérique 1re saison
Rapport de Triple-C sur l'audience du Carn@val numérique 1re saisonRapport de Triple-C sur l'audience du Carn@val numérique 1re saison
Rapport de Triple-C sur l'audience du Carn@val numérique 1re saison
 
Aif gt-170317slide
Aif gt-170317slideAif gt-170317slide
Aif gt-170317slide
 
Knack success story - Gamification in recruitment - Manu Melwin Joy
Knack success story - Gamification in recruitment  - Manu Melwin JoyKnack success story - Gamification in recruitment  - Manu Melwin Joy
Knack success story - Gamification in recruitment - Manu Melwin Joy
 

Similar to Project Panama - Beyond the (JVM) Wall

The Power of the JVM: Applied Polyglot Projects with Java and JavaScript
The Power of the JVM: Applied Polyglot Projects with Java and JavaScriptThe Power of the JVM: Applied Polyglot Projects with Java and JavaScript
The Power of the JVM: Applied Polyglot Projects with Java and JavaScript
Hazelcast
 
Keep your Wicket application in production
Keep your Wicket application in productionKeep your Wicket application in production
Keep your Wicket application in production
Martijn Dashorst
 
Assignment #2.classpathAssignment #2.project Assig.docx
Assignment #2.classpathAssignment #2.project  Assig.docxAssignment #2.classpathAssignment #2.project  Assig.docx
Assignment #2.classpathAssignment #2.project Assig.docx
fredharris32
 
High Performance Django
High Performance DjangoHigh Performance Django
High Performance Django
DjangoCon2008
 

Similar to Project Panama - Beyond the (JVM) Wall (20)

Android ndk
Android ndkAndroid ndk
Android ndk
 
Curator intro
Curator introCurator intro
Curator intro
 
JMC/JFR: Kotlin spezial
JMC/JFR: Kotlin spezialJMC/JFR: Kotlin spezial
JMC/JFR: Kotlin spezial
 
Native Java with GraalVM
Native Java with GraalVMNative Java with GraalVM
Native Java with GraalVM
 
Tomorrow Java
Tomorrow JavaTomorrow Java
Tomorrow Java
 
The Power of the JVM: Applied Polyglot Projects with Java and JavaScript
The Power of the JVM: Applied Polyglot Projects with Java and JavaScriptThe Power of the JVM: Applied Polyglot Projects with Java and JavaScript
The Power of the JVM: Applied Polyglot Projects with Java and JavaScript
 
Keep your Wicket application in production
Keep your Wicket application in productionKeep your Wicket application in production
Keep your Wicket application in production
 
Fields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptxFields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptx
 
Assignment #2.classpathAssignment #2.project Assig.docx
Assignment #2.classpathAssignment #2.project  Assig.docxAssignment #2.classpathAssignment #2.project  Assig.docx
Assignment #2.classpathAssignment #2.project Assig.docx
 
4 Node.js Gotchas: What your ops team needs to know
4 Node.js Gotchas: What your ops team needs to know4 Node.js Gotchas: What your ops team needs to know
4 Node.js Gotchas: What your ops team needs to know
 
Make it test-driven with CDI!
Make it test-driven with CDI!Make it test-driven with CDI!
Make it test-driven with CDI!
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build system
 
A new execution model for Nashorn in Java 9
A new execution model for Nashorn in Java 9A new execution model for Nashorn in Java 9
A new execution model for Nashorn in Java 9
 
Inside the JVM - Follow the white rabbit! / Breizh JUG
Inside the JVM - Follow the white rabbit! / Breizh JUGInside the JVM - Follow the white rabbit! / Breizh JUG
Inside the JVM - Follow the white rabbit! / Breizh JUG
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010
 
Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!
 
Portable, secure, and lightweight: Wasm runtimes and their use-cases - Natali...
Portable, secure, and lightweight: Wasm runtimes and their use-cases - Natali...Portable, secure, and lightweight: Wasm runtimes and their use-cases - Natali...
Portable, secure, and lightweight: Wasm runtimes and their use-cases - Natali...
 
Java script for web developer
Java script for web developerJava script for web developer
Java script for web developer
 
Devoxx uk 2014 High performance in-memory Java with open source
Devoxx uk 2014   High performance in-memory Java with open sourceDevoxx uk 2014   High performance in-memory Java with open source
Devoxx uk 2014 High performance in-memory Java with open source
 
High Performance Django
High Performance DjangoHigh Performance Django
High Performance Django
 

More from 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
 
Hazelcast Jet - Riding the Jet Streams
Hazelcast Jet - Riding the Jet StreamsHazelcast Jet - Riding the Jet Streams
Hazelcast Jet - Riding the Jet Streams
 
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
 
A Post-Apocalyptic sun.misc.Unsafe World
A Post-Apocalyptic sun.misc.Unsafe WorldA Post-Apocalyptic sun.misc.Unsafe World
A Post-Apocalyptic sun.misc.Unsafe World
 
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
 
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
 
Unsafe Java World - Crossing the Borderline - JokerConf 2014 Saint Petersburg
Unsafe Java World - Crossing the Borderline - JokerConf 2014 Saint PetersburgUnsafe Java World - Crossing the Borderline - JokerConf 2014 Saint Petersburg
Unsafe Java World - Crossing the Borderline - JokerConf 2014 Saint Petersburg
 
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

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Recently uploaded (20)

VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
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...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 

Project Panama - Beyond the (JVM) Wall