SlideShare a Scribd company logo
1 of 37
Download to read offline
Beyond the Coffee Cup:
Leveraging Java Runtime Technologies for
Polyglot
Daryl Maier
Senior Software Developer at IBM Canada
IBM Runtimes
maier@ca.ibm.com
About me…
• IBM Canada Lab in Toronto (-ish)
• Member of IBM Runtime Technologies
team
• Compiler and runtime optimizations for
20 years
• Leading a not-so-secret project to
open-source IBM compilation
technology
Trademarks, Copyrights, Disclaimers
IBM’s statements regarding its plans, directions, and intent are subject to change or withdrawal without notice at IBM’s sole
discretion. Information regarding potential future products is intended to outline our general product direction and it should
not be relied on in making a purchasing decision. The information mentioned regarding potential future products is not a
commitment, promise, or legal obligation to deliver any material, code or functionality. Information about potential future
products may not be incorporated into any contract. The development, release, and timing of any future features or
functionality described for our products remains at our sole discretion.
IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corp., registered in many jurisdictions
worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of other IBM trademarks is available on the
web at "Copyright and trademark information" at http://www.ibm.com/legal/copytrade.shtml
Other company, product, or service names may be trademarks or service marks of others.
THE INFORMATION CONTAINED IN THIS PRESENTATION IS PROVIDED FOR INFORMATIONAL PURPOSES ONLY. WHILE EFFORTS WERE
MADE TO VERIFY THE COMPLETENESS AND ACCURACY OF THE INFORMATION CONTAINED IN THIS PRESENTATION, IT IS PROVIDED "AS
IS" WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. IN ADDITION, THIS INFORMATION IS BASED ON IBM’S CURRENT PRODUCT
PLANS AND STRATEGY, WHICH ARE SUBJECT TO CHANGE BY IBM WITHOUT NOTICE. IBM SHALL NOT BE RESPONSIBLE FOR ANY
DAMAGES ARISING OUT OF THE USE OF, OR OTHERWISE RELATED TO, THIS PRESENTATION OR ANY OTHER DOCUMENTATION. NOTHING
CONTAINED IN THIS PRESENTATION IS INTENDED TO, NOR SHALL HAVE THE EFFECT OF, CREATING ANY WARRANTIES OR
REPRESENTATIONS FROM IBM (OR ITS SUPPLIERS OR LICENSORS), OR ALTERING THE TERMS AND CONDITIONS OF ANY AGREEMENT OR
LICENSE GOVERNING THE USE OF IBM PRODUCTS OR SOFTWARE.
© Copyright International Business Machines Corporation 2015. All rights reserved.
Additional Important Disclaimers
THE INFORMATION CONTAINED IN THIS PRESENTATION IS PROVIDED FOR INFORMATIONAL PURPOSES ONLY.
WHILST EFFORTS WERE MADE TO VERIFY THE COMPLETENESS AND ACCURACY OF THE INFORMATION CONTAINED IN THIS PRESENTATION, IT IS PROVIDED “AS IS”,
WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED.
ALL PERFORMANCE DATA INCLUDED IN THIS PRESENTATION HAVE BEEN GATHERED IN A CONTROLLED ENVIRONMENT. YOUR OWN TEST RESULTS MAY VARY BASED
ON HARDWARE, SOFTWARE OR INFRASTRUCTURE DIFFERENCES.
ALL DATA INCLUDED IN THIS PRESENTATION ARE MEANT TO BE USED ONLY AS A GUIDE.
IN ADDITION, THE INFORMATION CONTAINED IN THIS PRESENTATION IS BASED ON IBM’S CURRENT PRODUCT PLANS AND STRATEGY, WHICH ARE SUBJECT TO CHANGE
BY IBM, WITHOUT NOTICE.
IBM AND ITS AFFILIATED COMPANIES SHALL NOT BE RESPONSIBLE FOR ANY DAMAGES ARISING OUT OF THE USE OF, OR OTHERWISE RELATED TO, THIS PRESENTATION
OR ANY OTHER DOCUMENTATION.
NOTHING CONTAINED IN THIS PRESENTATION IS INTENDED TO, OR SHALL HAVE THE EFFECT OF:
- CREATING ANY WARRANT OR REPRESENTATION FROM IBM, ITS AFFILIATED COMPANIES OR ITS OR THEIR SUPPLIERS AND/OR LICENSORS
• Announced by Mark
Stoodley at JVMLS 2015
• See the complete talk here.
IBM to open-source a runtime technology
toolkit!
{groan}
Oh, great – another common
runtime environment!
Polyglot VM Community
{cheer}
Woo hoo – a runtime toolkit that
integrates with my VM!
Polyglot VM Community
Motivation for a runtime toolkit
• Experiment with leveraging investment in J9 Java VM technology in a
way that facilitates integration of this technology into other VMs
• Compatibility with existing runtimes and their communities
• Lots of vibrant language communities can’t tolerate disruptive technologies
• Technology should be flexible enough to bend to the community rather than
the other way around
• Work with all the features that make that language great
• Simple consumption into existing runtimes
Unlock the “VM” from the J9 Java VM for
polyglot
• Refactor several J9 components to create a language-agnostic toolkit designed for
integration into language runtimes (including J9 JVM)
• Memory allocator, thread library, platform port library, event hook framework, VM and
application level trace engine, garbage collector, JIT compiler
• Experiments to bring capabilities from J9 to Ruby MRI, CPython, and CSOM
• Integration by specializing toolkit components with runtime details from MRI, CPython,
CSOM
• Gauge promise of this approach
• Not a research project: our JDK product development team aggressively
refactoring our VM, GC, and JIT technology
• Shipped IBM JDK8 from snapshot of refactored code base
• JDK9 development ongoing as we continue to experiment
Common
utilities
Thread
library
Port
library
Trace GC JIT
VM
Structures
…
Core
runtime
infrastructure
Tool
Agents
Transplanting J9 capabilities to other runtimes
Method profiling for Ruby MRI: introduce tracepoint to feed call stacks
samples to Health Center agent
Scalable garbage collector integration
• Integrated GC into Ruby MRI
• Type accurate, but used conservatively so extensions work as-is
• MRI: can move off-heap native memory into manageable heap
• Proof point: verbose GC
<cycle-start id="2" type="global" contextid="0" timestamp="2015-08-05T17:21:58.105" intervalms="5066.731" />
<gc-start id="3" type="global" contextid="2" timestamp="2015-08-05T17:21:58.105">
<mem-info id="4" free="596848" total="4194304" percent="14">
<mem type="tenure" free="596848" total="4194304" percent="14" />
</mem-info>
</gc-start>
<allocation-stats totalBytes="3596216" >
<allocated-bytes non-tlh="720016" tlh="2876200" />
</allocation-stats>
<gc-op id="5" type="mark" timems="4.881" contextid="2" timestamp="2015-08-05T17:21:58.110">
<trace-info objectcount="8914" scancount="7208" scanbytes="288320" />
</gc-op>
<gc-op id="8" type="sweep" timems="0.688" contextid="2" timestamp="2015-08-05T17:21:58.111" />
<gc-end id="9" type="global" contextid="2" durationms="5.896" usertimems="7.999" systemtimems="1.999" timestamp="2015-08-05T17:21:58.111" activeThreads="2">
<mem-info id="10" free="2508160" total="4194304" percent="59">
<mem type="tenure" free="2508160" total="4194304" percent="59" micro-fragmented="297048" macro-fragmented="723458" />
</mem-info>
</gc-end>
<cycle-end id="11" type="global" contextid="2" timestamp="2015-08-05T17:21:58.111" />
GC visualization for Ruby MRI via existing GC trace points
feeding GC events to Health Center agent
Garbage Collection Memory Visualizer for Ruby MRI with zero
changes to the tool
JIT integration
• Ruby MRI and CPython do not have JIT compilers
• Both environments are challenging for JIT compilers
• Highly dynamic
• Unmanaged direct use of internal data structures by extensions
• Design choices in the runtimes themselves (e.g., setjmp/longjmp)
• Our effort to date has particular emphases
• Compile native instructions for methods and blocks
• Avoid big changes to how MRI/CPython works (to ease adoption)
• Consistent behavior for compiled code vs. interpreted code
• No restrictions on native code used by extension modules
• No benchmark tuning or specials
• Compatibility success story: We can run Rails!
• Performance success story: 1.2x + on many Bench9k kernels on 3 architectures
without tuning
Proof point: IBM JDK 8
Health Center
enables remote
Bluemix performance
analysis
ORB optimizations
can show 3x
Improvements in
real-World banking
scenarios
Liberty and tWAS
Daytrader3 workload
increases (15% on
Linux Intel)
2x improvement per core
seen with SSL by using
SMT vs Java 7.1 on zEC12
Improved IBMJCE
crypto performance
New instruction exploitation
CPACF instructions: AES,
3DES, SHA1, SHA2 etc
Up to 50% less CPU to
ramp-up to steady state
JZOS Toolkit
enhancements
Public Key
improvements with ECC
Up to 25% faster Liberty
workload deployment
20% better ramp-up using
Runtime Instrumentation
NVIDIA GPU
support
IBMJCE crypto improvements on both AES and
ECC encryption using hardware exploitation
PERFORMANCE !
Java6
SR16 FP4
Java 6.1
SR8 FP4
Java 7
SR9
Java 7.1
SR3
Java 8
SR1
Apache Spark 1.4 Daytrader3 Linux Intel
Open community
• Create an open community of contribution based around a toolkit of components that can
be used to build VMs for any language
• Efficient place for individuals, communities, and companies to safely collaborate on core
VM infrastructure
• Enable everyone to focus more energy on innovation, not on building more wheels
• Build more robust core technology
– Fix bugs once
– Tested in many different scenarios
• Collection of best practices and shared learning
• Lower entry barrier for new languages and VM ideas
– Test ideas faster and more reliably
What this talk is about…
• Mark’s JVMLS talk focused on the “whys” and “whats”, this talk will
focus on the “hows”
• GC experience deep dive
• CON7863: What’s in an Object? Java Garbage Collection for the Polyglot
(Charlie Gracie)
• JIT experience with refactoring the “VM” from the “JVM”
Are there enough re-usable components in a
Java JIT to build a polyglot toolkit?
Sampling thread determines which methods
spend the most time executing
Add “hot” methods to compilation queue for
asynchronous compilation
Translate Java bytecode into compiler IR
Choose a method from the queue for
compilation
Choose a tiered optimization strategy
Perform high-level classical, speculative, and
Java-specific optimizations
Generate code (instructions from IR, register
assignment, binary encoding, relocations)
Publish method metadata
Bind method into VM
Direct interpreter and JIT call sites to newly
compiled body
Recompile at higher optimization level
Patch runtime assumption guards, polymorphic
inline caches, monitor speculative optimizations
Sampling thread determines which methods
spend the most time executing
Add “hot” methods to compilation queue for
asynchronous compilation
Translate Java bytecode into compiler IR
Choose a method from the queue for
compilation
Choose a tiered optimization strategy
Perform high-level classical, speculative, and
Java-specific optimizations
Generate code (instructions from IR, register
assignment, binary encoding, relocations)
Publish method metadata
Bind method into VM
Direct interpreter and JIT call sites to newly
compiled body
Recompile at higher optimization level
Patch runtime assumption guards, polymorphic
inline caches, monitor speculative optimizations
Choose methods or blocks to compile based on
invocation count
Chosen method is compiled synchronously on
application thread
Translate CRuby iseq to compiler IR
Choose a fixed optimization strategy
Perform high-level classical, speculative, and
Ruby-specific optimizations
Generate code (instructions from IR, register
assignment, binary encoding, relocations)
Publish method metadata
Bind method into VM
Direct interpreter and JIT call sites to newly
compiled body
Patch runtime assumption guards, polymorphic
inline caches, monitor speculative optimizations
Sampling thread determines which methods
spend the most time executing
Add “hot” methods to compilation queue for
asynchronous compilation
Translate Java bytecode into compiler IR
Choose a method from the queue for
compilation
Choose a tiered optimization strategy
Perform high-level classical, speculative, and
Java-specific optimizations
Generate code (instructions from IR, register
assignment, binary encoding, relocations)
Publish method metadata
Bind method into VM
Direct interpreter and JIT call sites to newly
compiled body
Recompile at higher optimization level
Patch runtime assumption guards, polymorphic
inline caches, monitor speculative optimizations
Choose methods or blocks to compile based on
invocation count
Chosen method is compiled synchronously on
application thread
Translate CRuby iseq to compiler IR
Choose a fixed optimization strategy
Perform high-level classical, speculative, and
Ruby-specific optimizations
Generate code (instructions from IR, register
assignment, binary encoding, relocations)
Publish method metadata
Bind method into VM
Direct interpreter and JIT call sites to newly
compiled body
Patch runtime assumption guards, polymorphic
inline caches, monitor speculative optimizations
Select a method to
compile
Compile a method with
appropriate optimizations
Dispatch to compiled body
Adapt compiled method
to changing environment
Life Cycle
JIT startup and shutdown; initialization and destruction of resources (compilation threads,
options processing, memory management, …)
Compilation Trigger
Logic for determining when a method should be compiled: runtime method sampling
at execution, sample processing, count-and-send targets
Infrastructure
Supporting infrastructure for compilation: data structures (CFGs, blocks, trees,
instructions, symbol reference tables, aliasing, code caches), tracing/logging, enabled
feature processing
VM/JIT Interface
API between VM and JIT. Ask/answer questions about environment (e.g., lookup class or method
info), language semantics (e.g., float association), available capabilities (e.g., GPU present), object
model (e.g., array header size), configuration (e.g., GC policy), runtime helpers
Compilation
Intermediate representation; data types; optimization frameworks; classical, dynamic, and
speculative optimizations; code generation; register assignment; instruction schedulers; binary
encoders; code cache management; relocation processing; stack mapping
Method Dispatch Dispatch to compiled method from interpreted and JITed call sites; call site fixup
Runtime Adaptation
Method meta data, runtime assumption managers, profiling, recompilation
framework, code patching
Components of a compiler toolkit
IBM creating a toolkit of extensible compiler
components
• Start with mature J9 Java just-in-time compiler (aka Testarossa, or TR)
• Isolate the Java parts from the generic parts
• Re-engineer source code to allow specialization
• TR technology has already proven to be highly-adaptable to different
compilation uses
• 8 different compiler technology products or use-cases
• Consumption model: clone VM; clone O/S JIT; make
Testarossa Java compiler technology
• Heritage is a dynamic JIT for embedded Java
• Clean room implementation
• Mix of C++, C, native assembler
• Design goals
• Fast startup time
• Miserly memory management
• Flexible to meet different footprint configurations
• Optimizations
• Configurable high-level optimization framework
• High performance code generation with deep platform exploitation
• Dynamic recompilation with profile-directed feedback
• Speculative optimizations and supporting runtime framework
Optimizer
Optimizations
cold warm hot FSDscorching AOT
Java Bytecode
…
IL Generators
x86
POWER
z Systems
Code Generators
Profile
Manager
Hardware
counters
Sampling
Thread
Interpreter
Profile Info
JIT
Profile Info
Profiler
..
Compile Time
Connectors
J9 JVM
• Connector Options
• Object Model
• Language Specific
Code Generators
• C library functions
• Threading
• Tracing
Testarossa
Reusable Compilation Components
codeMetadataRuntimeRT Connectors RT Helpers
very hot profiling
Specialization of compiler components
• Not straightforward how to distill generic functionality from core TR
components and allow specialization for polyglot
• Two main axes of specialization
• the kind of compiler you’re trying to build
• the processor architecture you’re targeting
• Goals
• Isolation of compiler features
• Minimize impact to key compilation metrics: startup, compile-time, and footprint
• Minimize future merge and integration costs of specializations (easy consumption)
• Permit future extensibility
Engineering for extensibility
• Some reorganization is necessary to facilitate building an extensible
model
• Code and source files organized into an ordered hierarchy of “projects” each
of which contains some specialization of compiler functionality
• Refactor core compiler technology classes into “extensible” C++
classes
• Follows a single-inheritance, composition model for specialization
• Static polymorphism for efficiency
• Makefile and include path determine which specializations to use
Compiler Sprocket (Open source project)
Power Extension
X86 Extension
i386 Ext
Compiler Sprocket (AwesomeVM Project)
X86
Ext
ARMv7 Ext Z Ext
Compiler Sprocket (MyOrg’s Multi-Language Runtime
Project)
X86
Power Ext
Compiler Sprocket (MyOrg’s C++ Compiler Project)
Power Ext X86 Ext
ARMv7 Ext
Effective Sprocket compositions
Compiler Sprocket (Open Source Project)
Compiler Sprocket X86 Extension (O/S)
Compiler Sprocket i386 Extension (O/S)
Compiler Sprocket (MyOrg MLR Project)
Compiler Sprocket (MyOrg C++ Project)
Compiler Sprocket X86 Extension (MyOrg C++)
Compiler Sprocket (Open Source Project)
Compiler Sprocket for i386 MyOrg C++ Build Compiler Sprocket for Power MyOrg C++ Build
Compiler Sprocket Power Extension (O/S)
Compiler Sprocket (MyOrg MLR Project)
Compiler Sprocket Power Ext (MyOrg MLR)
Compiler Sprocket (MyOrg C++ Project)
Compiler Sprocket Power Ext (MyOrg C++)
Compiler Sprocket Compiler Sprocket
Testarossa intermediate language
• Internal node opcodes and datatypes can be extended for different
projects and architectures
iload a
iload b
isub
bipush 2
imul
istore a
istore atreetop
iconst 2
imul
iload a
iload b
isub
Java Bytecode
• TR uses a tree-based intermediate representation, where the “tree”
represents a single expression or statement
IL generators
• Produce IL that can be consumed by JIT technology
• Highly specialized to the environment VM
• Depend largely on the input: bytecodes, instructions, etc.
• Consume and represent symbol information
• Each are generally independent, but shares IL construction utilities for
tree, node, and block creation
High-level IL optimizer
• Complete suite of classical and Java-specific optimizations
• Platform-neutral, each optimization consumes and produces IL
• Flexible configuration allows optimization strategies to be constructed
• Spend compile-time where and when it makes sense for each VM
• Most challenging to adapt for polyglot because some optimizations provide
VM- or architecture-specific specializations that are entwined with analysis
and transformation phases
• Make it easier to adapt by separating policy from mechanism in each
optimization, and then specializing both as necessary
Minimal compiler toolkit consumption model
1. Clone your favorite VM
2. Clone the open-source compiler toolkit
3. Implement a VM-specific extension to the compilation trigger and
method dispatch interface
4. Implement an IL generator for your VM, perhaps on a subset of all
possible “bytecodes” or “instructions”
5. Implement VM-specific extensions as needed to
• Core technology (e.g., IL nodes, opcodes, code generation, instructions)
• VM <-> JIT interface (e.g., Q&A about object model, name lookup, bytecode info)
6. Modify VM makefiles and include paths to integrate JIT technology
7. make
Implement richer support for all inputs and VM features once basic hookup is completed!
Longer term challenges
• Must optimize at a higher semantic level for maximum performance
• Optimizing for compatibility has a point of diminishing returns
• Can’t just optimize the connective tissue in the interpreter
• e.g., arithmetic operations
• Increase use of method meta data
• Don’t waste execution time maintaining interpreter state
• Leverage on-stack replacement to focus on what matters
• Build in fork tolerance
• Forking is the means by which some VMs achieve parallelism
• Difficult to manage compilation efficiently across multiple processes
The road to open-source
• Early results are very promising for all our technologies
• Next steps
• Some components in the toolkit are ready (Port, Thread, Trace, GC)
• Compiler technology needs more time
• Balance refactoring work against developing proof points
• Engage with runtime communities and partners
• I invite your feedback on our open proposal, our compiler toolkit, or
your interest in becoming involved
Daryl Maier
O/S JIT Lead
maier@ca.ibm.com
John Duimovich
CTO, IBM Runtime Technologies
John_Duimovich@ca.ibm.com
Mark Stoodley
O/S Project Lead
mstoodle@ca.ibm.com
Acknowledgements
• Clip art on slides 6 and 7 was sourced from
• https://openclipart.org/image/2400px/svg_to_png/92065/paro-AL-
calling.png

More Related Content

What's hot

Concierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded DevicesConcierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded DevicesJan S. Rellermeyer
 
Expect the unexpected: Anticipate and prepare for failures in microservices b...
Expect the unexpected: Anticipate and prepare for failures in microservices b...Expect the unexpected: Anticipate and prepare for failures in microservices b...
Expect the unexpected: Anticipate and prepare for failures in microservices b...Bhakti Mehta
 
Servlet 4.0 at GeekOut 2015
Servlet 4.0 at GeekOut 2015Servlet 4.0 at GeekOut 2015
Servlet 4.0 at GeekOut 2015Edward Burns
 
Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Roberto Cortez
 
WebSockets in Enterprise Applications
WebSockets in Enterprise ApplicationsWebSockets in Enterprise Applications
WebSockets in Enterprise ApplicationsPavel Bucek
 
Migrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFXMigrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFXBruno Borges
 
Seven Points for Applying Java EE 7
Seven Points for Applying Java EE 7Seven Points for Applying Java EE 7
Seven Points for Applying Java EE 7Hirofumi Iwasaki
 
IBM Monitoring and Diagnostics Tools - Health Center 3.0.2
IBM Monitoring and Diagnostics Tools - Health Center 3.0.2IBM Monitoring and Diagnostics Tools - Health Center 3.0.2
IBM Monitoring and Diagnostics Tools - Health Center 3.0.2Chris Bailey
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Ryan Cuprak
 
Reactive Java EE - Let Me Count the Ways!
Reactive Java EE - Let Me Count the Ways!Reactive Java EE - Let Me Count the Ways!
Reactive Java EE - Let Me Count the Ways!Reza Rahman
 
Future of Java EE with Java SE 8
Future of Java EE with Java SE 8Future of Java EE with Java SE 8
Future of Java EE with Java SE 8Hirofumi Iwasaki
 
What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)Pavel Bucek
 
FOSDEM2016 - Ruby and OMR
FOSDEM2016 - Ruby and OMRFOSDEM2016 - Ruby and OMR
FOSDEM2016 - Ruby and OMRCharlie Gracie
 
DEVNET-2002 Coding 201: Coding Skills 201: Going Further with REST and Python...
DEVNET-2002	Coding 201: Coding Skills 201: Going Further with REST and Python...DEVNET-2002	Coding 201: Coding Skills 201: Going Further with REST and Python...
DEVNET-2002 Coding 201: Coding Skills 201: Going Further with REST and Python...Cisco DevNet
 
Simple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvmSimple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvmJamie Coleman
 
HTTP/2 in the Java Platform -- Java Champions call February 2016
HTTP/2 in the Java Platform -- Java Champions call February 2016HTTP/2 in the Java Platform -- Java Champions call February 2016
HTTP/2 in the Java Platform -- Java Champions call February 2016Ed Burns
 
Tweet4Beer - Beertap powered by Java goes IoT and JavaFX
Tweet4Beer - Beertap powered by Java goes IoT and JavaFXTweet4Beer - Beertap powered by Java goes IoT and JavaFX
Tweet4Beer - Beertap powered by Java goes IoT and JavaFXBruno Borges
 
An Introduction to Play 2 Framework
An Introduction to Play 2 FrameworkAn Introduction to Play 2 Framework
An Introduction to Play 2 FrameworkPT.JUG
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
 

What's hot (20)

Concierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded DevicesConcierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded Devices
 
Expect the unexpected: Anticipate and prepare for failures in microservices b...
Expect the unexpected: Anticipate and prepare for failures in microservices b...Expect the unexpected: Anticipate and prepare for failures in microservices b...
Expect the unexpected: Anticipate and prepare for failures in microservices b...
 
Servlet 4.0 at GeekOut 2015
Servlet 4.0 at GeekOut 2015Servlet 4.0 at GeekOut 2015
Servlet 4.0 at GeekOut 2015
 
Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7
 
WebSockets in Enterprise Applications
WebSockets in Enterprise ApplicationsWebSockets in Enterprise Applications
WebSockets in Enterprise Applications
 
Migrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFXMigrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFX
 
Seven Points for Applying Java EE 7
Seven Points for Applying Java EE 7Seven Points for Applying Java EE 7
Seven Points for Applying Java EE 7
 
IBM Monitoring and Diagnostics Tools - Health Center 3.0.2
IBM Monitoring and Diagnostics Tools - Health Center 3.0.2IBM Monitoring and Diagnostics Tools - Health Center 3.0.2
IBM Monitoring and Diagnostics Tools - Health Center 3.0.2
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]
 
Reactive Java EE - Let Me Count the Ways!
Reactive Java EE - Let Me Count the Ways!Reactive Java EE - Let Me Count the Ways!
Reactive Java EE - Let Me Count the Ways!
 
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
 
Future of Java EE with Java SE 8
Future of Java EE with Java SE 8Future of Java EE with Java SE 8
Future of Java EE with Java SE 8
 
What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)
 
FOSDEM2016 - Ruby and OMR
FOSDEM2016 - Ruby and OMRFOSDEM2016 - Ruby and OMR
FOSDEM2016 - Ruby and OMR
 
DEVNET-2002 Coding 201: Coding Skills 201: Going Further with REST and Python...
DEVNET-2002	Coding 201: Coding Skills 201: Going Further with REST and Python...DEVNET-2002	Coding 201: Coding Skills 201: Going Further with REST and Python...
DEVNET-2002 Coding 201: Coding Skills 201: Going Further with REST and Python...
 
Simple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvmSimple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvm
 
HTTP/2 in the Java Platform -- Java Champions call February 2016
HTTP/2 in the Java Platform -- Java Champions call February 2016HTTP/2 in the Java Platform -- Java Champions call February 2016
HTTP/2 in the Java Platform -- Java Champions call February 2016
 
Tweet4Beer - Beertap powered by Java goes IoT and JavaFX
Tweet4Beer - Beertap powered by Java goes IoT and JavaFXTweet4Beer - Beertap powered by Java goes IoT and JavaFX
Tweet4Beer - Beertap powered by Java goes IoT and JavaFX
 
An Introduction to Play 2 Framework
An Introduction to Play 2 FrameworkAn Introduction to Play 2 Framework
An Introduction to Play 2 Framework
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 

Viewers also liked

Eclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimesEclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimesMark Stoodley
 
Jfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot RuntimesJfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot RuntimesCharlie Gracie
 
JavaOne 2015 : How I Rediscovered My Coding Mojo by Building an IoT/Robotics ...
JavaOne 2015 : How I Rediscovered My Coding Mojo by Building an IoT/Robotics ...JavaOne 2015 : How I Rediscovered My Coding Mojo by Building an IoT/Robotics ...
JavaOne 2015 : How I Rediscovered My Coding Mojo by Building an IoT/Robotics ...Mark West
 
Java 8 in Anger (JavaOne)
Java 8 in Anger (JavaOne)Java 8 in Anger (JavaOne)
Java 8 in Anger (JavaOne)Trisha Gee
 
Stop doing scrum; start doing agile
Stop doing scrum; start doing agileStop doing scrum; start doing agile
Stop doing scrum; start doing agilePeter Van de Voorde
 
Intro to web services
Intro to web servicesIntro to web services
Intro to web servicesNeil Ghosh
 
Web Services (SOAP, WSDL, UDDI)
Web Services (SOAP, WSDL, UDDI)Web Services (SOAP, WSDL, UDDI)
Web Services (SOAP, WSDL, UDDI)Peter R. Egli
 
Web Service Presentation
Web Service PresentationWeb Service Presentation
Web Service Presentationguest0df6b0
 
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn
 

Viewers also liked (14)

Eclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimesEclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimes
 
Jfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot RuntimesJfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot Runtimes
 
JavaOne 2015 : How I Rediscovered My Coding Mojo by Building an IoT/Robotics ...
JavaOne 2015 : How I Rediscovered My Coding Mojo by Building an IoT/Robotics ...JavaOne 2015 : How I Rediscovered My Coding Mojo by Building an IoT/Robotics ...
JavaOne 2015 : How I Rediscovered My Coding Mojo by Building an IoT/Robotics ...
 
Java web services
Java web servicesJava web services
Java web services
 
JavaOne 2015 Keynote Presentation
JavaOne 2015 Keynote PresentationJavaOne 2015 Keynote Presentation
JavaOne 2015 Keynote Presentation
 
Wsdl
WsdlWsdl
Wsdl
 
Java 8 in Anger (JavaOne)
Java 8 in Anger (JavaOne)Java 8 in Anger (JavaOne)
Java 8 in Anger (JavaOne)
 
Stop doing scrum; start doing agile
Stop doing scrum; start doing agileStop doing scrum; start doing agile
Stop doing scrum; start doing agile
 
Intro to web services
Intro to web servicesIntro to web services
Intro to web services
 
Web Services
Web ServicesWeb Services
Web Services
 
Web service introduction
Web service introductionWeb service introduction
Web service introduction
 
Web Services (SOAP, WSDL, UDDI)
Web Services (SOAP, WSDL, UDDI)Web Services (SOAP, WSDL, UDDI)
Web Services (SOAP, WSDL, UDDI)
 
Web Service Presentation
Web Service PresentationWeb Service Presentation
Web Service Presentation
 
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
 

Similar to JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technologies for Polyglot"

New Continuous Release and Deployment Capabilities for CICS Customers v4
New Continuous Release and Deployment Capabilities for CICS Customers v4New Continuous Release and Deployment Capabilities for CICS Customers v4
New Continuous Release and Deployment Capabilities for CICS Customers v4Susan Yoskin
 
Java on zSystems zOS
Java on zSystems zOSJava on zSystems zOS
Java on zSystems zOSTim Ellison
 
#IBMInterConnect - DCB-3094 Scaling Agile - Launching an Agile Release Train ...
#IBMInterConnect - DCB-3094 Scaling Agile - Launching an Agile Release Train ...#IBMInterConnect - DCB-3094 Scaling Agile - Launching an Agile Release Train ...
#IBMInterConnect - DCB-3094 Scaling Agile - Launching an Agile Release Train ...Reedy Feggins Jr
 
Accelerating Machine Learning Applications on Spark Using GPUs
Accelerating Machine Learning Applications on Spark Using GPUsAccelerating Machine Learning Applications on Spark Using GPUs
Accelerating Machine Learning Applications on Spark Using GPUsIBM
 
OpenWhisk Introduction
OpenWhisk IntroductionOpenWhisk Introduction
OpenWhisk IntroductionIoana Baldini
 
Java and the GPU - Everything You Need To Know
Java and the GPU - Everything You Need To KnowJava and the GPU - Everything You Need To Know
Java and the GPU - Everything You Need To KnowAdam Roberts
 
The OMR GC talk - Ruby Kaigi 2015
The OMR GC talk - Ruby Kaigi 2015The OMR GC talk - Ruby Kaigi 2015
The OMR GC talk - Ruby Kaigi 2015craig lehmann
 
Academic Discussion Group Workshop 2018 November 10 st 2018 Nimbix CAPI SNAP...
Academic Discussion  Group Workshop 2018 November 10 st 2018 Nimbix CAPI SNAP...Academic Discussion  Group Workshop 2018 November 10 st 2018 Nimbix CAPI SNAP...
Academic Discussion Group Workshop 2018 November 10 st 2018 Nimbix CAPI SNAP...Ganesan Narayanasamy
 
WebSphere Technical University: Introduction to the Java Diagnostic Tools
WebSphere Technical University: Introduction to the Java Diagnostic ToolsWebSphere Technical University: Introduction to the Java Diagnostic Tools
WebSphere Technical University: Introduction to the Java Diagnostic ToolsChris Bailey
 
Extending Jenkins to the Mainframe. A Simpler Approach.
Extending Jenkins to the Mainframe.  A Simpler Approach.Extending Jenkins to the Mainframe.  A Simpler Approach.
Extending Jenkins to the Mainframe. A Simpler Approach.DevOps.com
 
Enabling a hardware accelerated deep learning data science experience for Apa...
Enabling a hardware accelerated deep learning data science experience for Apa...Enabling a hardware accelerated deep learning data science experience for Apa...
Enabling a hardware accelerated deep learning data science experience for Apa...DataWorks Summit
 
Enabling a hardware accelerated deep learning data science experience for Apa...
Enabling a hardware accelerated deep learning data science experience for Apa...Enabling a hardware accelerated deep learning data science experience for Apa...
Enabling a hardware accelerated deep learning data science experience for Apa...Indrajit Poddar
 
Impact2014: Introduction to the IBM Java Tools
Impact2014: Introduction to the IBM Java ToolsImpact2014: Introduction to the IBM Java Tools
Impact2014: Introduction to the IBM Java ToolsChris Bailey
 
Improving Software Delivery with Software Defined Environments (IBM Interconn...
Improving Software Delivery with Software Defined Environments (IBM Interconn...Improving Software Delivery with Software Defined Environments (IBM Interconn...
Improving Software Delivery with Software Defined Environments (IBM Interconn...Michael Elder
 
Modernização do Gerenciamento, Monitoramento e Provisionamento em Mainframes ...
Modernização do Gerenciamento, Monitoramento e Provisionamento em Mainframes ...Modernização do Gerenciamento, Monitoramento e Provisionamento em Mainframes ...
Modernização do Gerenciamento, Monitoramento e Provisionamento em Mainframes ...Joao Galdino Mello de Souza
 
SHARE2016: DevOps - IIB Administration for Continuous Delivery and DevOps
SHARE2016:  DevOps - IIB Administration for Continuous Delivery and DevOpsSHARE2016:  DevOps - IIB Administration for Continuous Delivery and DevOps
SHARE2016: DevOps - IIB Administration for Continuous Delivery and DevOpsRob Convery
 
Harman deepak v - agile on steriod - dev ops led transformation
Harman  deepak v - agile on steriod - dev ops led transformationHarman  deepak v - agile on steriod - dev ops led transformation
Harman deepak v - agile on steriod - dev ops led transformationXebia India
 

Similar to JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technologies for Polyglot" (20)

New Continuous Release and Deployment Capabilities for CICS Customers v4
New Continuous Release and Deployment Capabilities for CICS Customers v4New Continuous Release and Deployment Capabilities for CICS Customers v4
New Continuous Release and Deployment Capabilities for CICS Customers v4
 
Java on zSystems zOS
Java on zSystems zOSJava on zSystems zOS
Java on zSystems zOS
 
#IBMInterConnect - DCB-3094 Scaling Agile - Launching an Agile Release Train ...
#IBMInterConnect - DCB-3094 Scaling Agile - Launching an Agile Release Train ...#IBMInterConnect - DCB-3094 Scaling Agile - Launching an Agile Release Train ...
#IBMInterConnect - DCB-3094 Scaling Agile - Launching an Agile Release Train ...
 
Accelerating Machine Learning Applications on Spark Using GPUs
Accelerating Machine Learning Applications on Spark Using GPUsAccelerating Machine Learning Applications on Spark Using GPUs
Accelerating Machine Learning Applications on Spark Using GPUs
 
Maximize o valor do z/OS
Maximize o valor do z/OSMaximize o valor do z/OS
Maximize o valor do z/OS
 
OpenWhisk Introduction
OpenWhisk IntroductionOpenWhisk Introduction
OpenWhisk Introduction
 
Java and the GPU - Everything You Need To Know
Java and the GPU - Everything You Need To KnowJava and the GPU - Everything You Need To Know
Java and the GPU - Everything You Need To Know
 
The OMR GC talk - Ruby Kaigi 2015
The OMR GC talk - Ruby Kaigi 2015The OMR GC talk - Ruby Kaigi 2015
The OMR GC talk - Ruby Kaigi 2015
 
Academic Discussion Group Workshop 2018 November 10 st 2018 Nimbix CAPI SNAP...
Academic Discussion  Group Workshop 2018 November 10 st 2018 Nimbix CAPI SNAP...Academic Discussion  Group Workshop 2018 November 10 st 2018 Nimbix CAPI SNAP...
Academic Discussion Group Workshop 2018 November 10 st 2018 Nimbix CAPI SNAP...
 
WebSphere Technical University: Introduction to the Java Diagnostic Tools
WebSphere Technical University: Introduction to the Java Diagnostic ToolsWebSphere Technical University: Introduction to the Java Diagnostic Tools
WebSphere Technical University: Introduction to the Java Diagnostic Tools
 
Extending Jenkins to the Mainframe. A Simpler Approach.
Extending Jenkins to the Mainframe.  A Simpler Approach.Extending Jenkins to the Mainframe.  A Simpler Approach.
Extending Jenkins to the Mainframe. A Simpler Approach.
 
1812 icap-v1.3 0430
1812 icap-v1.3 04301812 icap-v1.3 0430
1812 icap-v1.3 0430
 
Enabling a hardware accelerated deep learning data science experience for Apa...
Enabling a hardware accelerated deep learning data science experience for Apa...Enabling a hardware accelerated deep learning data science experience for Apa...
Enabling a hardware accelerated deep learning data science experience for Apa...
 
2829 liberty
2829 liberty2829 liberty
2829 liberty
 
Enabling a hardware accelerated deep learning data science experience for Apa...
Enabling a hardware accelerated deep learning data science experience for Apa...Enabling a hardware accelerated deep learning data science experience for Apa...
Enabling a hardware accelerated deep learning data science experience for Apa...
 
Impact2014: Introduction to the IBM Java Tools
Impact2014: Introduction to the IBM Java ToolsImpact2014: Introduction to the IBM Java Tools
Impact2014: Introduction to the IBM Java Tools
 
Improving Software Delivery with Software Defined Environments (IBM Interconn...
Improving Software Delivery with Software Defined Environments (IBM Interconn...Improving Software Delivery with Software Defined Environments (IBM Interconn...
Improving Software Delivery with Software Defined Environments (IBM Interconn...
 
Modernização do Gerenciamento, Monitoramento e Provisionamento em Mainframes ...
Modernização do Gerenciamento, Monitoramento e Provisionamento em Mainframes ...Modernização do Gerenciamento, Monitoramento e Provisionamento em Mainframes ...
Modernização do Gerenciamento, Monitoramento e Provisionamento em Mainframes ...
 
SHARE2016: DevOps - IIB Administration for Continuous Delivery and DevOps
SHARE2016:  DevOps - IIB Administration for Continuous Delivery and DevOpsSHARE2016:  DevOps - IIB Administration for Continuous Delivery and DevOps
SHARE2016: DevOps - IIB Administration for Continuous Delivery and DevOps
 
Harman deepak v - agile on steriod - dev ops led transformation
Harman  deepak v - agile on steriod - dev ops led transformationHarman  deepak v - agile on steriod - dev ops led transformation
Harman deepak v - agile on steriod - dev ops led transformation
 

Recently uploaded

Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
cpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptcpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptrcbcrtm
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 

Recently uploaded (20)

Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
cpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptcpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.ppt
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 

JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technologies for Polyglot"

  • 1. Beyond the Coffee Cup: Leveraging Java Runtime Technologies for Polyglot Daryl Maier Senior Software Developer at IBM Canada IBM Runtimes maier@ca.ibm.com
  • 2. About me… • IBM Canada Lab in Toronto (-ish) • Member of IBM Runtime Technologies team • Compiler and runtime optimizations for 20 years • Leading a not-so-secret project to open-source IBM compilation technology
  • 3. Trademarks, Copyrights, Disclaimers IBM’s statements regarding its plans, directions, and intent are subject to change or withdrawal without notice at IBM’s sole discretion. Information regarding potential future products is intended to outline our general product direction and it should not be relied on in making a purchasing decision. The information mentioned regarding potential future products is not a commitment, promise, or legal obligation to deliver any material, code or functionality. Information about potential future products may not be incorporated into any contract. The development, release, and timing of any future features or functionality described for our products remains at our sole discretion. IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of other IBM trademarks is available on the web at "Copyright and trademark information" at http://www.ibm.com/legal/copytrade.shtml Other company, product, or service names may be trademarks or service marks of others. THE INFORMATION CONTAINED IN THIS PRESENTATION IS PROVIDED FOR INFORMATIONAL PURPOSES ONLY. WHILE EFFORTS WERE MADE TO VERIFY THE COMPLETENESS AND ACCURACY OF THE INFORMATION CONTAINED IN THIS PRESENTATION, IT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. IN ADDITION, THIS INFORMATION IS BASED ON IBM’S CURRENT PRODUCT PLANS AND STRATEGY, WHICH ARE SUBJECT TO CHANGE BY IBM WITHOUT NOTICE. IBM SHALL NOT BE RESPONSIBLE FOR ANY DAMAGES ARISING OUT OF THE USE OF, OR OTHERWISE RELATED TO, THIS PRESENTATION OR ANY OTHER DOCUMENTATION. NOTHING CONTAINED IN THIS PRESENTATION IS INTENDED TO, NOR SHALL HAVE THE EFFECT OF, CREATING ANY WARRANTIES OR REPRESENTATIONS FROM IBM (OR ITS SUPPLIERS OR LICENSORS), OR ALTERING THE TERMS AND CONDITIONS OF ANY AGREEMENT OR LICENSE GOVERNING THE USE OF IBM PRODUCTS OR SOFTWARE. © Copyright International Business Machines Corporation 2015. All rights reserved.
  • 4. Additional Important Disclaimers THE INFORMATION CONTAINED IN THIS PRESENTATION IS PROVIDED FOR INFORMATIONAL PURPOSES ONLY. WHILST EFFORTS WERE MADE TO VERIFY THE COMPLETENESS AND ACCURACY OF THE INFORMATION CONTAINED IN THIS PRESENTATION, IT IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. ALL PERFORMANCE DATA INCLUDED IN THIS PRESENTATION HAVE BEEN GATHERED IN A CONTROLLED ENVIRONMENT. YOUR OWN TEST RESULTS MAY VARY BASED ON HARDWARE, SOFTWARE OR INFRASTRUCTURE DIFFERENCES. ALL DATA INCLUDED IN THIS PRESENTATION ARE MEANT TO BE USED ONLY AS A GUIDE. IN ADDITION, THE INFORMATION CONTAINED IN THIS PRESENTATION IS BASED ON IBM’S CURRENT PRODUCT PLANS AND STRATEGY, WHICH ARE SUBJECT TO CHANGE BY IBM, WITHOUT NOTICE. IBM AND ITS AFFILIATED COMPANIES SHALL NOT BE RESPONSIBLE FOR ANY DAMAGES ARISING OUT OF THE USE OF, OR OTHERWISE RELATED TO, THIS PRESENTATION OR ANY OTHER DOCUMENTATION. NOTHING CONTAINED IN THIS PRESENTATION IS INTENDED TO, OR SHALL HAVE THE EFFECT OF: - CREATING ANY WARRANT OR REPRESENTATION FROM IBM, ITS AFFILIATED COMPANIES OR ITS OR THEIR SUPPLIERS AND/OR LICENSORS
  • 5. • Announced by Mark Stoodley at JVMLS 2015 • See the complete talk here. IBM to open-source a runtime technology toolkit!
  • 6. {groan} Oh, great – another common runtime environment! Polyglot VM Community
  • 7. {cheer} Woo hoo – a runtime toolkit that integrates with my VM! Polyglot VM Community
  • 8. Motivation for a runtime toolkit • Experiment with leveraging investment in J9 Java VM technology in a way that facilitates integration of this technology into other VMs • Compatibility with existing runtimes and their communities • Lots of vibrant language communities can’t tolerate disruptive technologies • Technology should be flexible enough to bend to the community rather than the other way around • Work with all the features that make that language great • Simple consumption into existing runtimes
  • 9. Unlock the “VM” from the J9 Java VM for polyglot • Refactor several J9 components to create a language-agnostic toolkit designed for integration into language runtimes (including J9 JVM) • Memory allocator, thread library, platform port library, event hook framework, VM and application level trace engine, garbage collector, JIT compiler • Experiments to bring capabilities from J9 to Ruby MRI, CPython, and CSOM • Integration by specializing toolkit components with runtime details from MRI, CPython, CSOM • Gauge promise of this approach • Not a research project: our JDK product development team aggressively refactoring our VM, GC, and JIT technology • Shipped IBM JDK8 from snapshot of refactored code base • JDK9 development ongoing as we continue to experiment
  • 11. Method profiling for Ruby MRI: introduce tracepoint to feed call stacks samples to Health Center agent
  • 12. Scalable garbage collector integration • Integrated GC into Ruby MRI • Type accurate, but used conservatively so extensions work as-is • MRI: can move off-heap native memory into manageable heap • Proof point: verbose GC <cycle-start id="2" type="global" contextid="0" timestamp="2015-08-05T17:21:58.105" intervalms="5066.731" /> <gc-start id="3" type="global" contextid="2" timestamp="2015-08-05T17:21:58.105"> <mem-info id="4" free="596848" total="4194304" percent="14"> <mem type="tenure" free="596848" total="4194304" percent="14" /> </mem-info> </gc-start> <allocation-stats totalBytes="3596216" > <allocated-bytes non-tlh="720016" tlh="2876200" /> </allocation-stats> <gc-op id="5" type="mark" timems="4.881" contextid="2" timestamp="2015-08-05T17:21:58.110"> <trace-info objectcount="8914" scancount="7208" scanbytes="288320" /> </gc-op> <gc-op id="8" type="sweep" timems="0.688" contextid="2" timestamp="2015-08-05T17:21:58.111" /> <gc-end id="9" type="global" contextid="2" durationms="5.896" usertimems="7.999" systemtimems="1.999" timestamp="2015-08-05T17:21:58.111" activeThreads="2"> <mem-info id="10" free="2508160" total="4194304" percent="59"> <mem type="tenure" free="2508160" total="4194304" percent="59" micro-fragmented="297048" macro-fragmented="723458" /> </mem-info> </gc-end> <cycle-end id="11" type="global" contextid="2" timestamp="2015-08-05T17:21:58.111" />
  • 13. GC visualization for Ruby MRI via existing GC trace points feeding GC events to Health Center agent
  • 14. Garbage Collection Memory Visualizer for Ruby MRI with zero changes to the tool
  • 15. JIT integration • Ruby MRI and CPython do not have JIT compilers • Both environments are challenging for JIT compilers • Highly dynamic • Unmanaged direct use of internal data structures by extensions • Design choices in the runtimes themselves (e.g., setjmp/longjmp) • Our effort to date has particular emphases • Compile native instructions for methods and blocks • Avoid big changes to how MRI/CPython works (to ease adoption) • Consistent behavior for compiled code vs. interpreted code • No restrictions on native code used by extension modules • No benchmark tuning or specials • Compatibility success story: We can run Rails! • Performance success story: 1.2x + on many Bench9k kernels on 3 architectures without tuning
  • 16. Proof point: IBM JDK 8 Health Center enables remote Bluemix performance analysis ORB optimizations can show 3x Improvements in real-World banking scenarios Liberty and tWAS Daytrader3 workload increases (15% on Linux Intel) 2x improvement per core seen with SSL by using SMT vs Java 7.1 on zEC12 Improved IBMJCE crypto performance New instruction exploitation CPACF instructions: AES, 3DES, SHA1, SHA2 etc Up to 50% less CPU to ramp-up to steady state JZOS Toolkit enhancements Public Key improvements with ECC Up to 25% faster Liberty workload deployment 20% better ramp-up using Runtime Instrumentation NVIDIA GPU support IBMJCE crypto improvements on both AES and ECC encryption using hardware exploitation PERFORMANCE ! Java6 SR16 FP4 Java 6.1 SR8 FP4 Java 7 SR9 Java 7.1 SR3 Java 8 SR1 Apache Spark 1.4 Daytrader3 Linux Intel
  • 17. Open community • Create an open community of contribution based around a toolkit of components that can be used to build VMs for any language • Efficient place for individuals, communities, and companies to safely collaborate on core VM infrastructure • Enable everyone to focus more energy on innovation, not on building more wheels • Build more robust core technology – Fix bugs once – Tested in many different scenarios • Collection of best practices and shared learning • Lower entry barrier for new languages and VM ideas – Test ideas faster and more reliably
  • 18. What this talk is about… • Mark’s JVMLS talk focused on the “whys” and “whats”, this talk will focus on the “hows” • GC experience deep dive • CON7863: What’s in an Object? Java Garbage Collection for the Polyglot (Charlie Gracie) • JIT experience with refactoring the “VM” from the “JVM”
  • 19. Are there enough re-usable components in a Java JIT to build a polyglot toolkit?
  • 20. Sampling thread determines which methods spend the most time executing Add “hot” methods to compilation queue for asynchronous compilation Translate Java bytecode into compiler IR Choose a method from the queue for compilation Choose a tiered optimization strategy Perform high-level classical, speculative, and Java-specific optimizations Generate code (instructions from IR, register assignment, binary encoding, relocations) Publish method metadata Bind method into VM Direct interpreter and JIT call sites to newly compiled body Recompile at higher optimization level Patch runtime assumption guards, polymorphic inline caches, monitor speculative optimizations
  • 21. Sampling thread determines which methods spend the most time executing Add “hot” methods to compilation queue for asynchronous compilation Translate Java bytecode into compiler IR Choose a method from the queue for compilation Choose a tiered optimization strategy Perform high-level classical, speculative, and Java-specific optimizations Generate code (instructions from IR, register assignment, binary encoding, relocations) Publish method metadata Bind method into VM Direct interpreter and JIT call sites to newly compiled body Recompile at higher optimization level Patch runtime assumption guards, polymorphic inline caches, monitor speculative optimizations Choose methods or blocks to compile based on invocation count Chosen method is compiled synchronously on application thread Translate CRuby iseq to compiler IR Choose a fixed optimization strategy Perform high-level classical, speculative, and Ruby-specific optimizations Generate code (instructions from IR, register assignment, binary encoding, relocations) Publish method metadata Bind method into VM Direct interpreter and JIT call sites to newly compiled body Patch runtime assumption guards, polymorphic inline caches, monitor speculative optimizations
  • 22. Sampling thread determines which methods spend the most time executing Add “hot” methods to compilation queue for asynchronous compilation Translate Java bytecode into compiler IR Choose a method from the queue for compilation Choose a tiered optimization strategy Perform high-level classical, speculative, and Java-specific optimizations Generate code (instructions from IR, register assignment, binary encoding, relocations) Publish method metadata Bind method into VM Direct interpreter and JIT call sites to newly compiled body Recompile at higher optimization level Patch runtime assumption guards, polymorphic inline caches, monitor speculative optimizations Choose methods or blocks to compile based on invocation count Chosen method is compiled synchronously on application thread Translate CRuby iseq to compiler IR Choose a fixed optimization strategy Perform high-level classical, speculative, and Ruby-specific optimizations Generate code (instructions from IR, register assignment, binary encoding, relocations) Publish method metadata Bind method into VM Direct interpreter and JIT call sites to newly compiled body Patch runtime assumption guards, polymorphic inline caches, monitor speculative optimizations Select a method to compile Compile a method with appropriate optimizations Dispatch to compiled body Adapt compiled method to changing environment
  • 23. Life Cycle JIT startup and shutdown; initialization and destruction of resources (compilation threads, options processing, memory management, …) Compilation Trigger Logic for determining when a method should be compiled: runtime method sampling at execution, sample processing, count-and-send targets Infrastructure Supporting infrastructure for compilation: data structures (CFGs, blocks, trees, instructions, symbol reference tables, aliasing, code caches), tracing/logging, enabled feature processing VM/JIT Interface API between VM and JIT. Ask/answer questions about environment (e.g., lookup class or method info), language semantics (e.g., float association), available capabilities (e.g., GPU present), object model (e.g., array header size), configuration (e.g., GC policy), runtime helpers Compilation Intermediate representation; data types; optimization frameworks; classical, dynamic, and speculative optimizations; code generation; register assignment; instruction schedulers; binary encoders; code cache management; relocation processing; stack mapping Method Dispatch Dispatch to compiled method from interpreted and JITed call sites; call site fixup Runtime Adaptation Method meta data, runtime assumption managers, profiling, recompilation framework, code patching Components of a compiler toolkit
  • 24. IBM creating a toolkit of extensible compiler components • Start with mature J9 Java just-in-time compiler (aka Testarossa, or TR) • Isolate the Java parts from the generic parts • Re-engineer source code to allow specialization • TR technology has already proven to be highly-adaptable to different compilation uses • 8 different compiler technology products or use-cases • Consumption model: clone VM; clone O/S JIT; make
  • 25. Testarossa Java compiler technology • Heritage is a dynamic JIT for embedded Java • Clean room implementation • Mix of C++, C, native assembler • Design goals • Fast startup time • Miserly memory management • Flexible to meet different footprint configurations • Optimizations • Configurable high-level optimization framework • High performance code generation with deep platform exploitation • Dynamic recompilation with profile-directed feedback • Speculative optimizations and supporting runtime framework
  • 26. Optimizer Optimizations cold warm hot FSDscorching AOT Java Bytecode … IL Generators x86 POWER z Systems Code Generators Profile Manager Hardware counters Sampling Thread Interpreter Profile Info JIT Profile Info Profiler .. Compile Time Connectors J9 JVM • Connector Options • Object Model • Language Specific Code Generators • C library functions • Threading • Tracing Testarossa Reusable Compilation Components codeMetadataRuntimeRT Connectors RT Helpers very hot profiling
  • 27. Specialization of compiler components • Not straightforward how to distill generic functionality from core TR components and allow specialization for polyglot • Two main axes of specialization • the kind of compiler you’re trying to build • the processor architecture you’re targeting • Goals • Isolation of compiler features • Minimize impact to key compilation metrics: startup, compile-time, and footprint • Minimize future merge and integration costs of specializations (easy consumption) • Permit future extensibility
  • 28. Engineering for extensibility • Some reorganization is necessary to facilitate building an extensible model • Code and source files organized into an ordered hierarchy of “projects” each of which contains some specialization of compiler functionality • Refactor core compiler technology classes into “extensible” C++ classes • Follows a single-inheritance, composition model for specialization • Static polymorphism for efficiency • Makefile and include path determine which specializations to use
  • 29. Compiler Sprocket (Open source project) Power Extension X86 Extension i386 Ext Compiler Sprocket (AwesomeVM Project) X86 Ext ARMv7 Ext Z Ext Compiler Sprocket (MyOrg’s Multi-Language Runtime Project) X86 Power Ext Compiler Sprocket (MyOrg’s C++ Compiler Project) Power Ext X86 Ext ARMv7 Ext
  • 30. Effective Sprocket compositions Compiler Sprocket (Open Source Project) Compiler Sprocket X86 Extension (O/S) Compiler Sprocket i386 Extension (O/S) Compiler Sprocket (MyOrg MLR Project) Compiler Sprocket (MyOrg C++ Project) Compiler Sprocket X86 Extension (MyOrg C++) Compiler Sprocket (Open Source Project) Compiler Sprocket for i386 MyOrg C++ Build Compiler Sprocket for Power MyOrg C++ Build Compiler Sprocket Power Extension (O/S) Compiler Sprocket (MyOrg MLR Project) Compiler Sprocket Power Ext (MyOrg MLR) Compiler Sprocket (MyOrg C++ Project) Compiler Sprocket Power Ext (MyOrg C++) Compiler Sprocket Compiler Sprocket
  • 31. Testarossa intermediate language • Internal node opcodes and datatypes can be extended for different projects and architectures iload a iload b isub bipush 2 imul istore a istore atreetop iconst 2 imul iload a iload b isub Java Bytecode • TR uses a tree-based intermediate representation, where the “tree” represents a single expression or statement
  • 32. IL generators • Produce IL that can be consumed by JIT technology • Highly specialized to the environment VM • Depend largely on the input: bytecodes, instructions, etc. • Consume and represent symbol information • Each are generally independent, but shares IL construction utilities for tree, node, and block creation
  • 33. High-level IL optimizer • Complete suite of classical and Java-specific optimizations • Platform-neutral, each optimization consumes and produces IL • Flexible configuration allows optimization strategies to be constructed • Spend compile-time where and when it makes sense for each VM • Most challenging to adapt for polyglot because some optimizations provide VM- or architecture-specific specializations that are entwined with analysis and transformation phases • Make it easier to adapt by separating policy from mechanism in each optimization, and then specializing both as necessary
  • 34. Minimal compiler toolkit consumption model 1. Clone your favorite VM 2. Clone the open-source compiler toolkit 3. Implement a VM-specific extension to the compilation trigger and method dispatch interface 4. Implement an IL generator for your VM, perhaps on a subset of all possible “bytecodes” or “instructions” 5. Implement VM-specific extensions as needed to • Core technology (e.g., IL nodes, opcodes, code generation, instructions) • VM <-> JIT interface (e.g., Q&A about object model, name lookup, bytecode info) 6. Modify VM makefiles and include paths to integrate JIT technology 7. make Implement richer support for all inputs and VM features once basic hookup is completed!
  • 35. Longer term challenges • Must optimize at a higher semantic level for maximum performance • Optimizing for compatibility has a point of diminishing returns • Can’t just optimize the connective tissue in the interpreter • e.g., arithmetic operations • Increase use of method meta data • Don’t waste execution time maintaining interpreter state • Leverage on-stack replacement to focus on what matters • Build in fork tolerance • Forking is the means by which some VMs achieve parallelism • Difficult to manage compilation efficiently across multiple processes
  • 36. The road to open-source • Early results are very promising for all our technologies • Next steps • Some components in the toolkit are ready (Port, Thread, Trace, GC) • Compiler technology needs more time • Balance refactoring work against developing proof points • Engage with runtime communities and partners • I invite your feedback on our open proposal, our compiler toolkit, or your interest in becoming involved Daryl Maier O/S JIT Lead maier@ca.ibm.com John Duimovich CTO, IBM Runtime Technologies John_Duimovich@ca.ibm.com Mark Stoodley O/S Project Lead mstoodle@ca.ibm.com
  • 37. Acknowledgements • Clip art on slides 6 and 7 was sourced from • https://openclipart.org/image/2400px/svg_to_png/92065/paro-AL- calling.png