SlideShare ist ein Scribd-Unternehmen logo
1 von 102
invokedynamic
  You Ain’t Seen Nothin’ Yet
Me
@headius
JRuby Guy
JVM Guy
I KNOW
 π
What is
invokedynamic?
Invoke?
Invoke?
That’s one use, but there are many others
Dynamic?
Dynamic?
Dynamic typing is a common reason,
    but there are many others
User-defined Data
    Endpoint
User-defined Data
    Endpoint
           Hä
             ?!
JVM 101
JVM 101
200 opcodes
JVM 101
       200 opcodes
Ten (or 16) “data endpoints”
JVM 101
                   200 opcodes
            Ten (or 16) “data endpoints”
   Invocation
 invokevirtual
invokeinterface
 invokestatic
 invokespecial
JVM 101
                   200 opcodes
            Ten (or 16) “data endpoints”
   Invocation       Field Access
 invokevirtual       getfield
invokeinterface      setfield
 invokestatic        getstatic
 invokespecial       setstatic
JVM 101
                   200 opcodes
            Ten (or 16) “data endpoints”
   Invocation       Field Access     Array Access
 invokevirtual       getfield          *aload
invokeinterface      setfield          *astore
 invokestatic        getstatic     b,s,c,i,l,d,f,a
 invokespecial       setstatic
JVM 101
                   200 opcodes
            Ten (or 16) “data endpoints”
   Invocation       Field Access      Array Access
 invokevirtual       getfield          *aload
invokeinterface      setfield          *astore
 invokestatic        getstatic     b,s,c,i,l,d,f,a
 invokespecial       setstatic

   All Java code revolves around these endpoints
  Remaining ops are stack, local vars, flow control
    allocation, and math/boolean/bit operations
JVM
Opcodes
JVM
              Opcodes
 Invocation       Field Access   Array Access
 invokevirtual      getfield
                                     *aload
invokeinterface     setfield
                                     *astore
 invokestatic       getstatic
                                 b,s,c,i,l,d,f,a
 invokespecial      setstatic
JVM
              Opcodes
 Invocation       Field Access   Array Access
 invokevirtual      getfield
                                     *aload
invokeinterface     setfield
                                     *astore
 invokestatic       getstatic
                                 b,s,c,i,l,d,f,a
 invokespecial      setstatic




    Stack                            Local Vars
                  Flow Control


                                  Allocation
 Boolean and Numeric
JVM
              Opcodes
 Invocation       Field Access   Array Access
 invokevirtual      getfield
                                     *aload
invokeinterface     setfield
                                     *astore
 invokestatic       getstatic
                                 b,s,c,i,l,d,f,a
 invokespecial      setstatic




    Stack                            Local Vars
                  Flow Control


                                  Allocation
 Boolean and Numeric
JVM
              Opcodes
 Invocation       Field Access   Array Access
 invokevirtual      getfield
                                     *aload
invokeinterface     setfield
                                     *astore
 invokestatic       getstatic
                                 b,s,c,i,l,d,f,a
 invokespecial      setstatic




    Stack                            Local Vars
                  Flow Control


                                  Allocation
 Boolean and Numeric
Invocation
Invocation
Invocation
Call Site   VM Operations
Invocation
 Call Site      VM Operations
Method Name
  Signature
Target + Args
Invocation
 Call Site      VM Operations
Method Name      Method Lookup
  Signature      Type Checking
Target + Args       Branch
                 Method Cache
Invocation
                          Target
                          Object

                                   instanceof
obj.foo()     JVM
                         Object’s
                          Class
                            void foo()

                         static void bar()
Invocation
VM Operations
                              Target
                              Object

                                       instanceof
   obj.foo()      JVM
                             Object’s
                              Class
   Call Site                    void foo()

                             static void bar()
Invocation
VM Operations
                              Target
                              Object

                                       instanceof
   obj.foo()      JVM
                             Object’s
                              Class
   Call Site                    void foo()

                             static void bar()
Invocation
VM Operations
  Method Lookup
                                  Target
                                  Object

                                           instanceof
   obj.foo()         JVM
                                 Object’s
                                  Class
   Call Site                        void foo()
                    void foo()
                                 static void bar()
Invocation
VM Operations
  Method Lookup
  Type Checking                   Target
                                  Object

                                           instanceof
   obj.foo()         JVM
                                 Object’s
                                  Class
   Call Site                        void foo()
                    void foo()
                                 static void bar()
Invocation
VM Operations
  Method Lookup
  Type Checking                   Target
     Branch                       Object

                                           instanceof
   obj.foo()         JVM
                                 Object’s
                                  Class
   Call Site                        void foo()
                    void foo()
                                 static void bar()
Invocation
VM Operations
  Method Lookup
  Type Checking                    Target
     Branch                        Object
  Method Cache

                                            instanceof
   obj.foo()        JVM
                                  Object’s
                                   Class
                     void foo()




   Call Site                         void foo()

                                  static void bar()
Invocation
Invocation
  Virtual        Interface
Method Lookup   Method Lookup
Type Checking   Type Checking
   Branch          Branch
Method Cache    Method Cache
Invocation
   Virtual       Interface
Method Lookup   Method Lookup
Type Checking   Type Checking
   Branch          Branch
Method Cache    Method Cache

   Static
Method Lookup
   Branch
Method Cache
Invocation
   Virtual        Interface
Method Lookup   Method Lookup
Type Checking   Type Checking
   Branch          Branch
Method Cache    Method Cache

   Static          Special
                Method Lookup
Method Lookup
                Access Checking
   Branch
                    Branch
Method Cache
                 Method Cache
Field Access
Field Access

  Call Site
  Field Name
   Signature
Target [+ Value]
Field Access

  Call Site        VM Operations
  Field Name        Get Field Offset
   Signature         Type Check
Target [+ Value]     Access Field
Array Access
Array Access

      Call Site
Target + Offset [+ Value]
Array Access

      Call Site             VM Operations
Target + Offset [+ Value]     Type Check
                             Access Element
Deja Vu?

• Similar call site
• Similar VM operations
• Why can’t we compose our own?
invokedynamic
Call Site
invokedynamic
Call Site   VM Operations
invokedynamic
bytecode + Site
      Call bootstrap   Method Handles
                       VM Operations
invokedynamic
bytecode
bytecode

• invokedynamic
 • like invokevirtual, invokestatic, etc
• Name and signature, like the others
• Additional bootstrap method
 • JVM defers to you
Method Handles

• Function/field/array pointers
• Argument manipulation
• Flow control
• Optimizable by the JVM
 • This is very important
invokedynamic bytecode
invokedynamic bytecode




bo
  ot
     stra
         p
             m
              et
                ho
                  d
invokedynamic bytecode




bo
  ot
     stra
         p
             m
              et
                ho
                  d             method handles
invokedynamic bytecode

                                  target method



bo
  ot
     stra
         p
             m
              et
                ho
                  d             method handles
invokedynamic bytecode

                                  target method



bo
  ot
     stra
         p
             m
              et
                ho
                  d             method handles
invokedynamic bytecode

                                  target method



bo
  ot
     stra
         p
             m
              et
                ho
                  d             method handles
You Decide
How to reach some data endpoint
You Decide
What transformations to perform on arguments
You Decide
When and why the endpoint should change
You Decide
How to make the JVM work for you!
Use Cases
Dynamic Invocation

• The obvious one
• Method lookup based on runtime types
 • Potentially mutable types
• Type check specific to language
Dynamic Invocation
                  Target
                  Object

                         associated with
obj.foo()   JVM
                  Method
                   Table
                  def foo ...

                  def bar ...
Dynamic Invocation
VM Operations
                      Target
                      Object

                             associated with
   obj.foo()    JVM
                      Method
                       Table
   Call Site          def foo ...

                      def bar ...
Dynamic Invocation
VM Operations
                      Target
                      Object

                             associated with
   obj.foo()    JVM
                      Method
                       Table
   Call Site          def foo ...

                      def bar ...
Dynamic Invocation
VM Operations
  Method Lookup                 Target
                                Object

                                       associated with
   obj.foo()       JVM
                                Method
                                 Table
   Call Site                    def foo ...
                  def foo ...
                                def bar ...
Dynamic Invocation
VM Operations
  Method Lookup                 Target
     Branch
                                Object

                                       associated with
   obj.foo()       JVM
                                Method
                                 Table
   Call Site                    def foo ...
                  def foo ...
                                def bar ...
Dynamic Invocation
VM Operations
  Method Lookup              Target
     Branch
  Method Cache               Object

                                    associated with
   obj.foo()           JVM
         def foo ...
                             Method
                              Table
   Call Site                 def foo ...

                             def bar ...
Lazy Constants

• Call site just produces a value
• Value calculated once
• Subsequent access is direct, optimizable
Lazy Constant



                  JVM       Lazy
LAZY_CONST
                         Computation

  Call Site
Lazy Constant
VM Operations



                   JVM       Lazy
LAZY_CONST
                          Computation

   Call Site
Lazy Constant
VM Operations



                   JVM       Lazy
LAZY_CONST
                          Computation

   Call Site
Lazy Constant
VM Operations
  Calculate Value




                    JVM         Lazy
LAZY_CONST
                             Computation
                          value

   Call Site
Lazy Constant
VM Operations
  Calculate Value
 Bind Permanently



                     JVM      Lazy
LAZY_CONST
             value         Computation

   Call Site
Delegates

• Arbitrary function pointers
 • No anon inner classes
 • No bridge methods
• Java 8 “Lambda” will do this
Lambda Expression


                    Surrounding
String s ->   JVM      Class
toString()             lambda
                         body
  Call Site
Lambda Expression
VM Operations


                      Surrounding
 String s ->    JVM      Class
 toString()              lambda
                           body
   Call Site
Lambda Expression
VM Operations


                      Surrounding
 String s ->    JVM      Class
 toString()              lambda
                           body
   Call Site
Lambda Expression
VM Operations
Retrieve Lambda Obj



                            Surrounding
 String s ->
     lambda           JVM      Class
       body
 toString()

    Call Site
Lambda Expression
VM Operations
Retrieve Lambda Obj
  Bind and Invoke


                            Surrounding
 String s ->
     lambda           JVM      Class
       body
 toString()

    Call Site
Multi-dispatch

• Dispatch based on runtime types
 • Java is single-dispatch
• Call site looks like normal invoke
• VM side examines target, args
• Multiple targets cached with branches
How Do You Benefit?
Future
• New language impls
 • JavaScript: Dyn.js and Nashorn
 • Redline Smalltalk
• Improved language performance
 • JRuby, Groovy, Jython, Clojure, Scala
 • Java features too!
JRuby/Java 6   JRuby/Java 7
JRuby/Java 6                      JRuby/Java 7
                          Times Faster than Ruby 1.9.3
  5




3.75




 2.5




1.25




  0
       base64            richards              neural            redblack
JRuby/Java 6                        JRuby/Java 7
                             Times Faster than Ruby 1.9.3
  5




3.75




 2.5

                                               1.914

                          1.538                                       1.565
1.25   1.346




  0
          base64             richards              neural               redblack
JRuby/Java 6                        JRuby/Java 7
                                 Times Faster than Ruby 1.9.3
  5


                                                                                  4.32

3.75
                                                             3.66
                                       3.44



 2.5           2.658



                                                   1.914

                              1.538                                       1.565
1.25   1.346




  0
          base64                 richards              neural               redblack
invokedynamic
is the future of Java!
Thank You!
• @headius
• blog.headius.com
 • invokedynamic post coming soon
• headius@headius.com
• Come to my deep dive at 16:00
• Have fun with invokedynamic!

Weitere ähnliche Inhalte

Mehr von Charles Nutter

The Year of JRuby - RubyC 2018
The Year of JRuby - RubyC 2018The Year of JRuby - RubyC 2018
The Year of JRuby - RubyC 2018Charles Nutter
 
Down the Rabbit Hole: An Adventure in JVM Wonderland
Down the Rabbit Hole: An Adventure in JVM WonderlandDown the Rabbit Hole: An Adventure in JVM Wonderland
Down the Rabbit Hole: An Adventure in JVM WonderlandCharles Nutter
 
Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Charles Nutter
 
JRuby 9000 - Optimizing Above the JVM
JRuby 9000 - Optimizing Above the JVMJRuby 9000 - Optimizing Above the JVM
JRuby 9000 - Optimizing Above the JVMCharles Nutter
 
JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015Charles Nutter
 
JRuby 9000 - Taipei Ruby User's Group 2015
JRuby 9000 - Taipei Ruby User's Group 2015JRuby 9000 - Taipei Ruby User's Group 2015
JRuby 9000 - Taipei Ruby User's Group 2015Charles Nutter
 
Fast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible JavaFast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible JavaCharles Nutter
 
Open Source Software Needs You!
Open Source Software Needs You!Open Source Software Needs You!
Open Source Software Needs You!Charles Nutter
 
InvokeBinder: Fluent Programming for Method Handles
InvokeBinder: Fluent Programming for Method HandlesInvokeBinder: Fluent Programming for Method Handles
InvokeBinder: Fluent Programming for Method HandlesCharles Nutter
 
Over 9000: JRuby in 2015
Over 9000: JRuby in 2015Over 9000: JRuby in 2015
Over 9000: JRuby in 2015Charles Nutter
 
Doing Open Source the Right Way
Doing Open Source the Right WayDoing Open Source the Right Way
Doing Open Source the Right WayCharles Nutter
 
Bringing Concurrency to Ruby - RubyConf India 2014
Bringing Concurrency to Ruby - RubyConf India 2014Bringing Concurrency to Ruby - RubyConf India 2014
Bringing Concurrency to Ruby - RubyConf India 2014Charles Nutter
 
Beyond JVM - YOW! Sydney 2013
Beyond JVM - YOW! Sydney 2013Beyond JVM - YOW! Sydney 2013
Beyond JVM - YOW! Sydney 2013Charles Nutter
 
Beyond JVM - YOW! Brisbane 2013
Beyond JVM - YOW! Brisbane 2013Beyond JVM - YOW! Brisbane 2013
Beyond JVM - YOW! Brisbane 2013Charles Nutter
 
Beyond JVM - YOW Melbourne 2013
Beyond JVM - YOW Melbourne 2013Beyond JVM - YOW Melbourne 2013
Beyond JVM - YOW Melbourne 2013Charles Nutter
 
The Future of JRuby - Baruco 2013
The Future of JRuby - Baruco 2013The Future of JRuby - Baruco 2013
The Future of JRuby - Baruco 2013Charles Nutter
 
High Performance Ruby - E4E Conference 2013
High Performance Ruby - E4E Conference 2013High Performance Ruby - E4E Conference 2013
High Performance Ruby - E4E Conference 2013Charles Nutter
 
Invokedynamic in 45 Minutes
Invokedynamic in 45 MinutesInvokedynamic in 45 Minutes
Invokedynamic in 45 MinutesCharles Nutter
 

Mehr von Charles Nutter (20)

The Year of JRuby - RubyC 2018
The Year of JRuby - RubyC 2018The Year of JRuby - RubyC 2018
The Year of JRuby - RubyC 2018
 
Down the Rabbit Hole: An Adventure in JVM Wonderland
Down the Rabbit Hole: An Adventure in JVM WonderlandDown the Rabbit Hole: An Adventure in JVM Wonderland
Down the Rabbit Hole: An Adventure in JVM Wonderland
 
Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016
 
JRuby 9000 - Optimizing Above the JVM
JRuby 9000 - Optimizing Above the JVMJRuby 9000 - Optimizing Above the JVM
JRuby 9000 - Optimizing Above the JVM
 
JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015
 
JRuby 9000 - Taipei Ruby User's Group 2015
JRuby 9000 - Taipei Ruby User's Group 2015JRuby 9000 - Taipei Ruby User's Group 2015
JRuby 9000 - Taipei Ruby User's Group 2015
 
Fast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible JavaFast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible Java
 
Open Source Software Needs You!
Open Source Software Needs You!Open Source Software Needs You!
Open Source Software Needs You!
 
InvokeBinder: Fluent Programming for Method Handles
InvokeBinder: Fluent Programming for Method HandlesInvokeBinder: Fluent Programming for Method Handles
InvokeBinder: Fluent Programming for Method Handles
 
Over 9000: JRuby in 2015
Over 9000: JRuby in 2015Over 9000: JRuby in 2015
Over 9000: JRuby in 2015
 
Doing Open Source the Right Way
Doing Open Source the Right WayDoing Open Source the Right Way
Doing Open Source the Right Way
 
JRuby: The Hard Parts
JRuby: The Hard PartsJRuby: The Hard Parts
JRuby: The Hard Parts
 
Bringing Concurrency to Ruby - RubyConf India 2014
Bringing Concurrency to Ruby - RubyConf India 2014Bringing Concurrency to Ruby - RubyConf India 2014
Bringing Concurrency to Ruby - RubyConf India 2014
 
Beyond JVM - YOW! Sydney 2013
Beyond JVM - YOW! Sydney 2013Beyond JVM - YOW! Sydney 2013
Beyond JVM - YOW! Sydney 2013
 
Beyond JVM - YOW! Brisbane 2013
Beyond JVM - YOW! Brisbane 2013Beyond JVM - YOW! Brisbane 2013
Beyond JVM - YOW! Brisbane 2013
 
Beyond JVM - YOW Melbourne 2013
Beyond JVM - YOW Melbourne 2013Beyond JVM - YOW Melbourne 2013
Beyond JVM - YOW Melbourne 2013
 
Down the Rabbit Hole
Down the Rabbit HoleDown the Rabbit Hole
Down the Rabbit Hole
 
The Future of JRuby - Baruco 2013
The Future of JRuby - Baruco 2013The Future of JRuby - Baruco 2013
The Future of JRuby - Baruco 2013
 
High Performance Ruby - E4E Conference 2013
High Performance Ruby - E4E Conference 2013High Performance Ruby - E4E Conference 2013
High Performance Ruby - E4E Conference 2013
 
Invokedynamic in 45 Minutes
Invokedynamic in 45 MinutesInvokedynamic in 45 Minutes
Invokedynamic in 45 Minutes
 

Kürzlich hochgeladen

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 

Kürzlich hochgeladen (20)

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

InvokeDynamic - You Ain't Seen Nothin Yet

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. Perhaps even more transcendental...\n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. Also loading constants, which are read-only; not as interesting\n
  18. Also loading constants, which are read-only; not as interesting\n
  19. Also loading constants, which are read-only; not as interesting\n
  20. Also loading constants, which are read-only; not as interesting\n
  21. Also loading constants, which are read-only; not as interesting\n
  22. Also loading constants, which are read-only; not as interesting\n
  23. Also loading constants, which are read-only; not as interesting\n
  24. Also loading constants, which are read-only; not as interesting\n
  25. Also loading constants, which are read-only; not as interesting\n
  26. Also loading constants, which are read-only; not as interesting\n
  27. Also loading constants, which are read-only; not as interesting\n
  28. Also loading constants, which are read-only; not as interesting\n
  29. Also loading constants, which are read-only; not as interesting\n
  30. Also loading constants, which are read-only; not as interesting\n
  31. Also loading constants, which are read-only; not as interesting\n
  32. Also loading constants, which are read-only; not as interesting\n
  33. Also loading constants, which are read-only; not as interesting\n
  34. Also loading constants, which are read-only; not as interesting\n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. Type check for instances; statics are known\nField offset remains static\n
  80. Type check for instances; statics are known\nField offset remains static\n
  81. Type check for instances; statics are known\nField offset remains static\n
  82. Type check for instances; statics are known\nField offset remains static\n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n
  157. \n
  158. \n
  159. \n
  160. \n
  161. \n
  162. \n
  163. \n
  164. \n
  165. \n
  166. \n
  167. \n
  168. \n
  169. \n
  170. \n
  171. \n