SlideShare a Scribd company logo
1 of 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!

More Related Content

More from 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
 

More from 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
 

Recently uploaded

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 

Recently uploaded (20)

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 

InvokeDynamic - You Ain't Seen Nothin Yet

Editor's Notes

  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