Down the Rabbit Hole: An Adventure in JVM WonderlandCharles Nutter
The document discusses exploring interesting Java features and how they are compiled and executed by the JVM. It will look at bytecode, compiler logs, and native code generated for simple Java examples. The goal is to understand hidden performance costs, how code design impacts performance, and what the JVM can and cannot optimize. It begins with a "Hello World" example and examines the bytecode, compiler logs showing inlining, and native assembly code generated by the JIT compiler.
JRuby 9000 introduced a new intermediate representation that allows us to use classic compiler strategies to optimize Ruby. This talk describes what we're doing with this new IR and why current JVM capabilities are not sufficient.
JRuby 9000 - Taipei Ruby User's Group 2015Charles Nutter
The document discusses JRuby 9000, a new version of JRuby that runs on a new runtime based on an intermediate representation (IR). Some key points:
- JRuby 9000 includes major performance improvements like just-in-time compiling of blocks and optimized define_method performance.
- The new runtime represents code as IR instructions instead of an AST for better optimization capabilities. It allows registering passes to optimize the IR.
- Future work includes improved inlining, numeric specialization to use primitives on the JVM, and leveraging ahead-of-time compilation capabilities being added to the JVM to improve startup time.
- The overall goal is to continue optimizing JRuby to perform
A status update on JRuby, covering compatibility, Rails, and next-gen performance numbers. JRuby is currently the fastest way to run Rails apps, and we're doing work to make it even faster in the future.
The document discusses strategies for improving the startup performance of JRuby. It describes how the JRuby team optimized startup by using a Java-heavy JDK instead of native code, tweaking JVM flags, and implementing Drip - a technique that pre-boots the JVM and caches runtime configurations between runs. Drip reduced JRuby startup times from over 10 seconds to under 1 second for many common tasks. Later, it discusses challenges with JNI and how the Java Native Runtime (JNR) provides a better alternative for interfacing Java with native code and libraries.
Fast as C: How to Write Really Terrible JavaCharles Nutter
For years we’ve been told that the JVM’s amazing optimizers can take your running code and make it “fast” or “as fast as C++” or “as fast as C”…or sometimes “faster than C”. And yet we don’t often see this happen in practice, due in large part to (good and bad) development patterns that have taken hold in the Java world.
In this talk, we’ll explore the main reasons why Java code rarely runs as fast as C or C++ and how you can write really bad Java code that the JVM will do a better job of optimizing. We’ll take some popular microbenchmarks and burn them to the ground, monitoring JIT logs and assembly dumps along the way.
The document discusses exploring interesting Java features and how they are compiled and executed by the Java Virtual Machine (JVM). It begins with an introduction and overview of the topics that will be covered, including looking at Java bytecode, compiler logs, and generated native code. Examples of simple "Hello World" and math programs are provided and their compilation steps are examined at the bytecode, logging and native code levels to demonstrate how Java code is handled by the JVM.
The document provides an introduction to the Java Virtual Machine (JVM) bytecode and JIT compiler. It discusses how bytecode works, including inspection, generation and the bytecode instructions. It also covers how the JIT compiler works and is monitored. Examples of viewing bytecode with javap and generating bytecode with BiteScript are provided.
This document provides an overview of upcoming technologies related to the Java Virtual Machine (JVM). It begins with introductions and goals of the talk. It then discusses what the JVM is and lists many open-source JVMs. Next it explores reasons for and against using the JVM. A timeline of the OpenJDK project is presented. Features of Java 7 and 8 are highlighted. Alternative languages that run on the JVM are listed. Native interoperability via JNI and the Java Native Runtime (JNR) are described. Performance of JNR compared to JNA is shown.
This document provides an introduction to JVM bytecode, including how to inspect, generate, and understand bytecode. It discusses two main parts - JVM bytecode itself such as basic instructions and stack operations, and the JVM JIT compiler which compiles bytecode to machine code. Various tools for working with bytecode like javap and ASM are also introduced. The document is intended to help readers gain a better understanding of how the Java platform works from the lowest level.
The document provides an overview of implementing a high-performance JavaScript engine. It discusses the key components including the parser, runtime, execution engine, garbage collector, and foreign function interface. It also covers various implementation strategies and tradeoffs for aspects like value representation, object models, execution engines, and garbage collection. The document emphasizes learning from Self VM and using techniques like hidden classes, inline caching, and tiered compilation and optimization.
This document summarizes a presentation about a new way of developing Perl applications and the future of gperl, a fast Perl-like language. It discusses compiler modules for lexical analysis, parsing, and code generation that were originally developed for gperl and can now be used to build various tools and applications. These include a transpiler to run Perl 5 code in web browsers, a framework called PerlMotion for building iOS and OSX apps with Perl, and a static analysis tool for detecting copied code. The presentation encourages contributions to related open source projects and outlines plans to expand the capabilities of the static analysis and type inference engines.
Mastering java bytecode with ASM - GeeCON 2012Anton Arhipov
The document provides an overview of using the ASM bytecode manipulation framework. It discusses constructing a ClassWriter to output bytecode, visiting classes and methods, and generating simple bytecode instructions like loading constants, invoking methods, and control flow instructions like if/goto. The goal is to demonstrate how to generate and modify Java bytecode programmatically using ASM.
Building High Performance Android Applications in Java and C++Kenneth Geisshirt
This document discusses building high-performance Android applications using Java and C++. It covers using the Java Native Interface (JNI) to call C/C++ code from Java, mapping between Java and C/C++ types, memory management across languages, and logging and debugging native code. An example is provided of estimating pi by throwing virtual darts, implemented in pure Java, pure C++, and a mixture using JNI. Key steps like generating header files, building native code, and throwing Java exceptions from native code are explained.
The document discusses Java serialization and common myths surrounding it. It summarizes that Java serialization allows for flexible evolution of classes while maintaining backwards compatibility through the use of serialVersionUID. It debunks common myths that Java serialization is slow, inflexible, or that changing private fields breaks compatibility. The document explains that serialization performance depends more on how streams are used rather than the underlying implementation.
This document discusses Clojure, an immutable, functional programming language that runs on the JVM. It provides an overview of Clojure basics like its syntax, data structures, concurrency features and macros. It then discusses how Clojure is used in practice, including common tools, frameworks and patterns for web development, testing, persistence and more. Real-world examples are given throughout.
The document discusses a market data vendor that processes data from exchange feeds and distributes it to customers. It provides millions of quotes per second using a pure Java solution called QDS Core, which parses, normalizes, and distributes the data. QDS Core uses optimized data structures like arrays and lock-free synchronization to achieve high performance. The vendor also provides an easier to use API called dxFeed on top of QDS Core to enable integration.
Why scala is not my ideal language and what I can do with thisRuslan Shevchenko
- The document discusses some of the author's criticisms of Scala, including its use of implicit parameters to configure runtime behavior, and lack of good support for asynchronous programming.
- The author proposes some workarounds, like annotating imports to avoid implicit conflicts, and patching the compiler to add more information to Future exceptions. However, the ideal solution would be language changes or improvements to asynchronous abstractions like Async.
- Overall, the author argues that Scala is not ideal for some use cases like asynchronous programming, but provides some workarounds people can use in the meantime. The best solutions require changes to the language and standard library.
It is mainly about the multithreading and the multiprocessing in Python, and *in Python's flavor*.
It's also the share at Taipei.py [1].
[1] http://www.meetup.com/Taipei-py/events/220452029/
The document discusses Java memory allocation profiling using the Aprof tool. It explains that Aprof works by instrumenting bytecode to inject calls that count and track object allocations. This allows it to provide insights on where memory is being allocated and identify potential performance bottlenecks related to garbage collection.
Explains how to make use of ruby in java-based work environments. There are some hints at .NET equivalents along the way.
This is part 3 of a trilogy of Star Wars-themed ruby talks given at Protegra's SDEC 2011 in Winnipeg, Canada.
What You Need to Know About Lambdas - Jamie Allen (Typesafe)jaxLondonConference
This document summarizes Jamie Allen's presentation on lambdas. Some key points:
- Lambdas are anonymous functions that are limited in scope and difficult to test and debug in isolation.
- Using named functions instead of lambdas can help with readability and debugging by showing the function name in stack traces, but the name may still be mangled.
- Lambdas have access to variables in enclosing scopes, which can cause problems if mutable state is closed over.
- To maintain functional programming benefits while improving maintainability, techniques like "lifting" methods to treat them as first-class functions can help. This allows showing the method name in stack traces.
An overview of Ruby, jRuby, Rails, Torquebox, and PostgreSQL that was presented as a 3 hour class to other programmers at The Ironyard (http://theironyard.com) in Greenville, SC in July of 2013. The Rails specific sections are mostly code samples that were explained during the session so the real focus of the slides is Ruby, "the rails way" / workflow / differentiators and PostgreSQL.
The document provides an introduction to the Java Virtual Machine (JVM) bytecode and JIT compiler. It discusses how bytecode works, including inspection, generation and the bytecode instructions. It also covers how the JIT compiler works and is monitored. Examples of viewing bytecode with javap and generating bytecode with BiteScript are provided.
This document provides an overview of upcoming technologies related to the Java Virtual Machine (JVM). It begins with introductions and goals of the talk. It then discusses what the JVM is and lists many open-source JVMs. Next it explores reasons for and against using the JVM. A timeline of the OpenJDK project is presented. Features of Java 7 and 8 are highlighted. Alternative languages that run on the JVM are listed. Native interoperability via JNI and the Java Native Runtime (JNR) are described. Performance of JNR compared to JNA is shown.
This document provides an introduction to JVM bytecode, including how to inspect, generate, and understand bytecode. It discusses two main parts - JVM bytecode itself such as basic instructions and stack operations, and the JVM JIT compiler which compiles bytecode to machine code. Various tools for working with bytecode like javap and ASM are also introduced. The document is intended to help readers gain a better understanding of how the Java platform works from the lowest level.
The document provides an overview of implementing a high-performance JavaScript engine. It discusses the key components including the parser, runtime, execution engine, garbage collector, and foreign function interface. It also covers various implementation strategies and tradeoffs for aspects like value representation, object models, execution engines, and garbage collection. The document emphasizes learning from Self VM and using techniques like hidden classes, inline caching, and tiered compilation and optimization.
This document summarizes a presentation about a new way of developing Perl applications and the future of gperl, a fast Perl-like language. It discusses compiler modules for lexical analysis, parsing, and code generation that were originally developed for gperl and can now be used to build various tools and applications. These include a transpiler to run Perl 5 code in web browsers, a framework called PerlMotion for building iOS and OSX apps with Perl, and a static analysis tool for detecting copied code. The presentation encourages contributions to related open source projects and outlines plans to expand the capabilities of the static analysis and type inference engines.
Mastering java bytecode with ASM - GeeCON 2012Anton Arhipov
The document provides an overview of using the ASM bytecode manipulation framework. It discusses constructing a ClassWriter to output bytecode, visiting classes and methods, and generating simple bytecode instructions like loading constants, invoking methods, and control flow instructions like if/goto. The goal is to demonstrate how to generate and modify Java bytecode programmatically using ASM.
Building High Performance Android Applications in Java and C++Kenneth Geisshirt
This document discusses building high-performance Android applications using Java and C++. It covers using the Java Native Interface (JNI) to call C/C++ code from Java, mapping between Java and C/C++ types, memory management across languages, and logging and debugging native code. An example is provided of estimating pi by throwing virtual darts, implemented in pure Java, pure C++, and a mixture using JNI. Key steps like generating header files, building native code, and throwing Java exceptions from native code are explained.
The document discusses Java serialization and common myths surrounding it. It summarizes that Java serialization allows for flexible evolution of classes while maintaining backwards compatibility through the use of serialVersionUID. It debunks common myths that Java serialization is slow, inflexible, or that changing private fields breaks compatibility. The document explains that serialization performance depends more on how streams are used rather than the underlying implementation.
This document discusses Clojure, an immutable, functional programming language that runs on the JVM. It provides an overview of Clojure basics like its syntax, data structures, concurrency features and macros. It then discusses how Clojure is used in practice, including common tools, frameworks and patterns for web development, testing, persistence and more. Real-world examples are given throughout.
The document discusses a market data vendor that processes data from exchange feeds and distributes it to customers. It provides millions of quotes per second using a pure Java solution called QDS Core, which parses, normalizes, and distributes the data. QDS Core uses optimized data structures like arrays and lock-free synchronization to achieve high performance. The vendor also provides an easier to use API called dxFeed on top of QDS Core to enable integration.
Why scala is not my ideal language and what I can do with thisRuslan Shevchenko
- The document discusses some of the author's criticisms of Scala, including its use of implicit parameters to configure runtime behavior, and lack of good support for asynchronous programming.
- The author proposes some workarounds, like annotating imports to avoid implicit conflicts, and patching the compiler to add more information to Future exceptions. However, the ideal solution would be language changes or improvements to asynchronous abstractions like Async.
- Overall, the author argues that Scala is not ideal for some use cases like asynchronous programming, but provides some workarounds people can use in the meantime. The best solutions require changes to the language and standard library.
It is mainly about the multithreading and the multiprocessing in Python, and *in Python's flavor*.
It's also the share at Taipei.py [1].
[1] http://www.meetup.com/Taipei-py/events/220452029/
The document discusses Java memory allocation profiling using the Aprof tool. It explains that Aprof works by instrumenting bytecode to inject calls that count and track object allocations. This allows it to provide insights on where memory is being allocated and identify potential performance bottlenecks related to garbage collection.
Explains how to make use of ruby in java-based work environments. There are some hints at .NET equivalents along the way.
This is part 3 of a trilogy of Star Wars-themed ruby talks given at Protegra's SDEC 2011 in Winnipeg, Canada.
What You Need to Know About Lambdas - Jamie Allen (Typesafe)jaxLondonConference
This document summarizes Jamie Allen's presentation on lambdas. Some key points:
- Lambdas are anonymous functions that are limited in scope and difficult to test and debug in isolation.
- Using named functions instead of lambdas can help with readability and debugging by showing the function name in stack traces, but the name may still be mangled.
- Lambdas have access to variables in enclosing scopes, which can cause problems if mutable state is closed over.
- To maintain functional programming benefits while improving maintainability, techniques like "lifting" methods to treat them as first-class functions can help. This allows showing the method name in stack traces.
An overview of Ruby, jRuby, Rails, Torquebox, and PostgreSQL that was presented as a 3 hour class to other programmers at The Ironyard (http://theironyard.com) in Greenville, SC in July of 2013. The Rails specific sections are mostly code samples that were explained during the session so the real focus of the slides is Ruby, "the rails way" / workflow / differentiators and PostgreSQL.
JRuby allows running Ruby code on the Java Virtual Machine. It has the advantages of accessing Java libraries from Ruby and embedding Ruby in Java applications. Gems mostly work the same in JRuby as Ruby MRI, though some with native extensions may need alternatives. ActiveRecord can use JDBC drivers in JRuby to connect to databases. Converting Rails apps may require updating gems to specify platforms. JRuby is well-suited for deployment on Java application servers using WAR files generated by the Warbler gem.
The document discusses challenges in implementing the Ruby programming language on the Java Virtual Machine (JVM) using JRuby. It covers areas like parsing Ruby, implementing different interpreters and compilers, utilizing JVM tricks, ensuring compatibility with features like strings and fibers, and integrating native capabilities. The author also shares decisions they have made around these challenges and future work.
JRuby allows running Ruby code on the Java Virtual Machine. This provides access to Java libraries and enables deployment of Ruby/Rails applications as Java web archives for easier hosting. Integrating Rails with JRuby requires plugins like ActiveRecord-JDBC for database access. Performance is currently lower than native Ruby but may improve as JVM optimizations emerge. Full Ruby compatibility remains challenging due to differences from the JVM environment.
The document discusses JRuby, a Java implementation of the Ruby programming language. It provides an overview of JRuby and its benefits compared to MRI Ruby, including native threading, Unicode support, performance improvements from just-in-time compilation, better memory management from Java's garbage collection, and easier integration with existing Java libraries and enterprise infrastructure. Examples are given of ThoughtWorks projects like Mingle that use JRuby on Rails to take advantage of these benefits.
jRuby fixes some issues with the Ruby programming language like memory leaks and lack of kernel level threading by running Ruby code on the Java Virtual Machine which has features like a sophisticated garbage collector, just-in-time compilation for improved performance, and native threading; benchmarks show jRuby provides much higher concurrency and better performance than Ruby for background processing and web applications; deploying a Ruby application using jRuby and a Java application server like Torquebox allows it to take advantage of the reliability, scalability and deployment features of the Java platform.
The document discusses Cucumber, a tool that allows executing plain text behavioral descriptions as automated tests. It can:
- Execute Ruby code associated with sentences written in a natural language format. This allows customers to read and understand the tests.
- Be used for end-to-end testing of web applications from the user interface to the data layer.
- Leverage the Ruby programming language to access databases, configure tests, and more.
- Grow project-specific vocabularies over time through its framework and grammar to improve communication between customers and developers.
Reuven Lerner's first talk from Open Ruby Day, at Hi-Tech College in Herzliya, Israel, on June 27th 2010. An overview of what makes Rails a powerful framework for Web development -- what attracted Reuven to it, what are the components that most speak to him, and why others should consider Rails for their Web applications.
JRuby is a Ruby implementation that runs on the Java Virtual Machine (JVM). It allows Ruby code to leverage Java libraries and deployment options like WAR files. JRuby code is compiled to JVM bytecode, enabling features like multithreading and just-in-time compilation for performance. While C extensions and startup time are drawbacks, JRuby provides advantages for Java interoperability, threading, and deployment in Java environments.
Angular 2 is a new version of AngularJS that is currently in alpha. It embraces modern web standards like Shadow DOM and Web Workers. Angular 2 components replace directives and use classes instead of controllers. Templates are now called views. Two-way binding and ng-repeat are changed. The API is still changing but you can try it now on angular.io.
The document discusses the strategy for building and testing the programming language Hiroshi. It covers:
1. The Ruby Core team which maintains the language and includes over 80 volunteers.
2. The testing strategy for Ruby which involves testing at different levels from the interpreter to libraries. Extensive tests are run on Linux, Windows and macOS.
3. The CI environments used for Ruby development including GitHub Actions, Travis CI and AppVeyor, as well as internal VM clusters. Test results are collected on Ruby CI and discussed on Slack.
The code will print false, because paid = true assigns a local variable rather than setting the instance variable @paid. To fix it, use self.paid = true.
DrupalCampLA 2014 - Drupal backend performance and scalabilitycherryhillco
This document discusses various techniques for optimizing Drupal backend performance and scalability. It covers diagnosing issues through tools like Apache Benchmark and Munin, optimizing hardware, web and database servers like using Nginx, Varnish, MySQL tuning, and alternative databases like MongoDB. It also discusses PHP optimizations like opcode caching and HHVM. The goal is to provide strategies to handle more traffic, improve page response times, and minimize downtime through infrastructure improvements and code optimizations.
Fast, concurrent ruby web applications with EventMachine and EM::SynchronyKyle Drake
This document summarizes Kyle Drake's presentation on using EventMachine (EM) and EM::Synchrony to build fast, concurrent Ruby web applications without blocking I/O or callback hell. Key points include:
- EM implements the reactor pattern to handle blocking I/O without threads by using callbacks and kernel threads.
- EM::Synchrony avoids callback nesting by wrapping callbacks in fibers, allowing synchronous-looking code.
- Sinatra can be made concurrent by running each request in its own EM::Synchrony fiber with little code change.
- Ruby has strong options for building high-performance concurrent apps while maintaining productivity advantages over Node.js.
The document discusses the benefits of moving JIT compilation out of individual JVMs and into a shared, cloud-based compiler service. This "JIT-as-a-Service" approach improves efficiency by allowing optimization resources to be shared and elastic across JVMs. It also enables optimized code to be reused for applications that execute on multiple devices. Moving JIT compilation to the cloud reduces warmup time, memory footprint, and CPU usage for JVMs while improving the level of optimizations that can be performed.
JRuby is Ruby for the JVM, right? But what does that really mean? What do you get out of the deal?
We'll explore what makes JRuby unique among Ruby implementations, and why the JVM is a Rubyist's dream come true. Using JRuby means you have the best GC, real threads, easy and scalable deployment, high performance, no-compile cross-platform libraries, and the best monitoring and profiling tools of any VM. And you get it all without leaving Ruby behind. If you're not using JRuby already, this talk will convince you to give it a try.
APIs distribuidos con alta escalabilidadSoftware Guru
This document provides an overview of building REST APIs for distributed systems. It discusses motivation for APIs and the importance of an API contract. The document then covers tools for defining the API contract like RAML. It presents microservices architecture and implementation options like Spring Boot, Spring Cloud and Netflix OSS. The talk concludes with a demo of a microservices application deployed with Docker.
This document provides an overview of building REST APIs for distributed systems. It discusses motivation for APIs and the importance of an API contract. The document then covers tools for defining the API contract like RAML and code generation. It presents microservices architecture and implementation options using Spring Boot, Spring Cloud, and Netflix OSS frameworks. The talk concludes with a demo of a microservices application deployed with Docker.
The document discusses a 100-day challenge by NTT Corporation and the Japan Cloud Foundry Group to deploy 100 open source apps to Cloud Foundry. They successfully deployed 97 apps using various buildpacks and services, with 3 apps failing to deploy due to app-specific issues. The document provides details on the challenge and lessons learned around deploying different programming languages and frameworks to Cloud Foundry.
Have you ever used an open source project? Of course you have, but have you made any contributions yourself? Filed a bug report? Submitted a patch? Have you ever started your own OSS project, or taken a closed/private project public? What licenses should you use? How do you manage contributions? How do you encourage contributors and get work done? In this talk we'll go over the basics of OSS: how to get involved, how to start a project, how to manage contributions. We'll discuss project lifecycles, legal CYA tips, and how to keep projects moving. You'll see the inner workings of real OSS projects, and learn how to be a better OSS user and producer.
Presented at Jfokus 2015
InvokeBinder: Fluent Programming for Method HandlesCharles Nutter
The MethodHandle API provides a powerful way to build optimized function pointers that do a wide variety of call-path adaptations. Unfortunately, the API as designed requires mental contortions to write anything more than trivial handle chains by hand. Adaptations must be made backwards from the target, argument-list modifications are done by index and length, and debugging failed adaptations can be a terrific challenge. InvokeBinder seeks to make method handles fun and easy to use by providing a fluent API, building adaptations from the call forward, allowing argument-list manipulation by name and wildcard, and much more. We'll explore everything InvokeBinder does today and talk about improvements for the future.
JRuby 9000 represents the biggest-ever leap forward for JRuby. Not only have we caught up on compatibility (9000 will be 2.2-compatible from release), but we've completely redesigned our JVM-based runtime and have opened our codebase up to the JRuby+Truffle research project from Oracle Labs. The changes we've made will make it easier to keep up with MRI on compatibility and give us the potential to run Ruby as fast as Java or C. The entire Ruby world will change over the next year, and JRuby 9000 will be leading the way. We'll talk about what Ruby's going to look like once JRuby is "over 9000".
Have you ever used an open source project? Well of course you have, but how about contributed to one? Filed a bug report? Submitted a patch? Have you ever started your own OSS project, or taken a closed/private project public? What licenses should you use? How do you manage contributions? How do you encourage contributors and get work done? In this talk we'll go over the basics of OSS: how to get involved, how to start a project, how to manage contributions. We'll discuss project lifecycles, legal CYA tips, and how to keep projects moving. You'll see the inner workings of real OSS projects, and learn how to be a better OSS user and producer.
Bringing Concurrency to Ruby - RubyConf India 2014Charles Nutter
The document discusses bringing concurrency to Ruby. It begins by defining concurrency and parallelism, noting that both are needed but platforms only enable parallelism if jobs can split into concurrent tasks. It reviews concurrency and parallelism in popular Ruby platforms like MRI, JRuby, and Rubinius. The document outlines four rules for concurrency and discusses techniques like immutable data, locking, atomics, and specialized collections for mutable data. It highlights libraries that provide high-level concurrency abstractions like Celluloid for actors and Sidekiq for background jobs.
This document provides an overview of upcoming technologies beyond the Java Virtual Machine (JVM). It begins with introductions and then discusses several topics:
- There are many open-source JVMs beyond Oracle's HotSpot such as JamVM, Maxine, and JikesRVM.
- Reasons for using the JVM include its large standard library and ease of portability compared to alternative virtual machines. However, startup time can be slow.
- Techniques for improving JVM startup time are discussed, such as saving JIT-compiled code and using the Drip tool to pre-initialize JVMs.
- Native interoperability is explored through the Java Native Interface (JNI
The document discusses JRuby, a Ruby implementation that runs on the Java Virtual Machine. It provides an introduction to JRuby, describing how it allows Ruby code to leverage Java libraries and run on the JVM. It also discusses some of the challenges of implementing Ruby on the JVM, such as performance optimization, and outlines JRuby's approach to addressing issues like concurrency through libraries that provide thread-safe data structures.
The document discusses invokedynamic, a new bytecode introduced in Java 7 that allows for user-definable bytecode behavior. It provides more flexibility compared to the traditional bytecode instructions like invokevirtual. invokedynamic calls a bootstrap method that prepares a CallSite object and MethodHandle to invoke the target method. This allows dynamic dispatch, fast method pointers, and optimizable behavior like normal Java code. The document includes examples of using invokedynamic to implement dynamic language features and define new domain-specific languages.
This document summarizes Charles Nutter's involvement with JSR 292 (invokedynamic) and JRuby performance over several years. It describes early experiments adding invokedynamic support to JRuby in 2008-2009 before the Java 7 implementation. After Java 7's release, performance was still much slower than regular calls. The document lists efforts by Nutter and the Hotspot team from 2010-2011 to improve performance through JIT optimizations and other changes. It discusses options for dealing with invokedynamic's poor performance in Java 7 and monitoring future JVM versions for improvements.
JRuby is a Ruby implementation that runs on the Java Virtual Machine (JVM). It allows Ruby code to leverage Java libraries and frameworks and enables deployment on JVM platforms like Android. The JRuby team maintains and improves JRuby, but much of the underlying infrastructure like memory management, threading, and JIT compilation is provided by the JVM, allowing the team to focus on Ruby-specific aspects. JRuby can be used on many platforms and provides access to Java libraries and frameworks, enabling applications to leverage large Java ecosystems.
The "n" in the PrintCompilation output indicates that the method was not compiled, but is on deck to be compiled. So in this case, java.lang.Object::hashCode was not yet compiled, but is a candidate for compilation if/when it is called more.
High Performance Ruby - Golden Gate RubyConf 2012Charles Nutter
Hotspot optimizes the first loop in the benchmark and inlines the method calls. When the second loop with different method calls is encountered, Hotspot's assumptions change and performance is negatively impacted. Monitoring the JVM's optimization activities like JIT compilation and inlining is needed to better understand benchmark results, as small code behaves differently than large code during optimization.
Invokedynamic allows for more dynamic method dispatch at runtime. It works by adding a new bytecode called invokedynamic that defers method lookup to a bootstrap method specified by the developer. This gives developers control over how methods are looked up and invoked, enabling use cases like dynamic language implementation, lazy constants, delegates, multi-dispatch, and more. Languages like JRuby have seen significant performance improvements by using invokedynamic.
JRuby: What's Different (RORO Melbourne October 2011)Charles Nutter
JRuby runs Ruby code on the Java Virtual Machine. This allows Ruby programs to access Java libraries and tools like Swing, and take advantage of features like the JVM's garbage collection and just-in-time compilation. JRuby is compatible with Ruby 1.8.7 and 1.9.2 and runs on multiple platforms. While it has some missing or disabled features compared to MRI Ruby, JRuby programs typically see improved performance due to the JVM. JRuby also enables building scalable, concurrent server applications using Java servers and tools.
AgentExchange is Salesforce’s latest innovation, expanding upon the foundation of AppExchange by offering a centralized marketplace for AI-powered digital labor. Designed for Agentblazers, developers, and Salesforce admins, this platform enables the rapid development and deployment of AI agents across industries.
Email: [email protected]
Phone: +1(630) 349 2411
Website: https://www.fexle.com/blogs/agentexchange-an-ultimate-guide-for-salesforce-consultants-businesses/?utm_source=slideshare&utm_medium=pptNg
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AIdanshalev
If we were building a GenAI stack today, we'd start with one question: Can your retrieval system handle multi-hop logic?
Trick question, b/c most can’t. They treat retrieval as nearest-neighbor search.
Today, we discussed scaling #GraphRAG at AWS DevOps Day, and the takeaway is clear: VectorRAG is naive, lacks domain awareness, and can’t handle full dataset retrieval.
GraphRAG builds a knowledge graph from source documents, allowing for a deeper understanding of the data + higher accuracy.
Societal challenges of AI: biases, multilinguism and sustainabilityJordi Cabot
Towards a fairer, inclusive and sustainable AI that works for everybody.
Reviewing the state of the art on these challenges and what we're doing at LIST to test current LLMs and help you select the one that works best for you
Meet the Agents: How AI Is Learning to Think, Plan, and CollaborateMaxim Salnikov
Imagine if apps could think, plan, and team up like humans. Welcome to the world of AI agents and agentic user interfaces (UI)! In this session, we'll explore how AI agents make decisions, collaborate with each other, and create more natural and powerful experiences for users.
🌍📱👉COPY LINK & PASTE ON GOOGLE http://drfiles.net/ 👈🌍
Adobe Illustrator is a powerful, professional-grade vector graphics software used for creating a wide range of designs, including logos, icons, illustrations, and more. Unlike raster graphics (like photos), which are made of pixels, vector graphics in Illustrator are defined by mathematical equations, allowing them to be scaled up or down infinitely without losing quality.
Here's a more detailed explanation:
Key Features and Capabilities:
Vector-Based Design:
Illustrator's foundation is its use of vector graphics, meaning designs are created using paths, lines, shapes, and curves defined mathematically.
Scalability:
This vector-based approach allows for designs to be resized without any loss of resolution or quality, making it suitable for various print and digital applications.
Design Creation:
Illustrator is used for a wide variety of design purposes, including:
Logos and Brand Identity: Creating logos, icons, and other brand assets.
Illustrations: Designing detailed illustrations for books, magazines, web pages, and more.
Marketing Materials: Creating posters, flyers, banners, and other marketing visuals.
Web Design: Designing web graphics, including icons, buttons, and layouts.
Text Handling:
Illustrator offers sophisticated typography tools for manipulating and designing text within your graphics.
Brushes and Effects:
It provides a range of brushes and effects for adding artistic touches and visual styles to your designs.
Integration with Other Adobe Software:
Illustrator integrates seamlessly with other Adobe Creative Cloud apps like Photoshop, InDesign, and Dreamweaver, facilitating a smooth workflow.
Why Use Illustrator?
Professional-Grade Features:
Illustrator offers a comprehensive set of tools and features for professional design work.
Versatility:
It can be used for a wide range of design tasks and applications, making it a versatile tool for designers.
Industry Standard:
Illustrator is a widely used and recognized software in the graphic design industry.
Creative Freedom:
It empowers designers to create detailed, high-quality graphics with a high degree of control and precision.
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...Andre Hora
Unittest and pytest are the most popular testing frameworks in Python. Overall, pytest provides some advantages, including simpler assertion, reuse of fixtures, and interoperability. Due to such benefits, multiple projects in the Python ecosystem have migrated from unittest to pytest. To facilitate the migration, pytest can also run unittest tests, thus, the migration can happen gradually over time. However, the migration can be timeconsuming and take a long time to conclude. In this context, projects would benefit from automated solutions to support the migration process. In this paper, we propose TestMigrationsInPy, a dataset of test migrations from unittest to pytest. TestMigrationsInPy contains 923 real-world migrations performed by developers. Future research proposing novel solutions to migrate frameworks in Python can rely on TestMigrationsInPy as a ground truth. Moreover, as TestMigrationsInPy includes information about the migration type (e.g., changes in assertions or fixtures), our dataset enables novel solutions to be verified effectively, for instance, from simpler assertion migrations to more complex fixture migrations. TestMigrationsInPy is publicly available at: https://github.com/altinoalvesjunior/TestMigrationsInPy.
Solidworks Crack 2025 latest new + license codeaneelaramzan63
Copy & Paste On Google >>> https://dr-up-community.info/
The two main methods for installing standalone licenses of SOLIDWORKS are clean installation and parallel installation (the process is different ...
Disable your internet connection to prevent the software from performing online checks during installation
Adobe Master Collection CC Crack Advance Version 2025kashifyounis067
🌍📱👉COPY LINK & PASTE ON GOOGLE http://drfiles.net/ 👈🌍
Adobe Master Collection CC (Creative Cloud) is a comprehensive subscription-based package that bundles virtually all of Adobe's creative software applications. It provides access to a wide range of tools for graphic design, video editing, web development, photography, and more. Essentially, it's a one-stop-shop for creatives needing a broad set of professional tools.
Key Features and Benefits:
All-in-one access:
The Master Collection includes apps like Photoshop, Illustrator, InDesign, Premiere Pro, After Effects, Audition, and many others.
Subscription-based:
You pay a recurring fee for access to the latest versions of all the software, including new features and updates.
Comprehensive suite:
It offers tools for a wide variety of creative tasks, from photo editing and illustration to video editing and web development.
Cloud integration:
Creative Cloud provides cloud storage, asset sharing, and collaboration features.
Comparison to CS6:
While Adobe Creative Suite 6 (CS6) was a one-time purchase version of the software, Adobe Creative Cloud (CC) is a subscription service. CC offers access to the latest versions, regular updates, and cloud integration, while CS6 is no longer updated.
Examples of included software:
Adobe Photoshop: For image editing and manipulation.
Adobe Illustrator: For vector graphics and illustration.
Adobe InDesign: For page layout and desktop publishing.
Adobe Premiere Pro: For video editing and post-production.
Adobe After Effects: For visual effects and motion graphics.
Adobe Audition: For audio editing and mixing.
Douwan Crack 2025 new verson+ License codeaneelaramzan63
Copy & Paste On Google >>> https://dr-up-community.info/
Douwan Preactivated Crack Douwan Crack Free Download. Douwan is a comprehensive software solution designed for data management and analysis.
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)Andre Hora
Exceptions allow developers to handle error cases expected to occur infrequently. Ideally, good test suites should test both normal and exceptional behaviors to catch more bugs and avoid regressions. While current research analyzes exceptions that propagate to tests, it does not explore other exceptions that do not reach the tests. In this paper, we provide an empirical study to explore how frequently exceptional behaviors are tested in real-world systems. We consider both exceptions that propagate to tests and the ones that do not reach the tests. For this purpose, we run an instrumented version of test suites, monitor their execution, and collect information about the exceptions raised at runtime. We analyze the test suites of 25 Python systems, covering 5,372 executed methods, 17.9M calls, and 1.4M raised exceptions. We find that 21.4% of the executed methods do raise exceptions at runtime. In methods that raise exceptions, on the median, 1 in 10 calls exercise exceptional behaviors. Close to 80% of the methods that raise exceptions do so infrequently, but about 20% raise exceptions more frequently. Finally, we provide implications for researchers and practitioners. We suggest developing novel tools to support exercising exceptional behaviors and refactoring expensive try/except blocks. We also call attention to the fact that exception-raising behaviors are not necessarily “abnormal” or rare.
Secure Test Infrastructure: The Backbone of Trustworthy Software DevelopmentShubham Joshi
A secure test infrastructure ensures that the testing process doesn’t become a gateway for vulnerabilities. By protecting test environments, data, and access points, organizations can confidently develop and deploy software without compromising user privacy or system integrity.
F-Secure Freedome VPN 2025 Crack Plus Activation New Versionsaimabibi60507
Copy & Past Link 👉👉
https://dr-up-community.info/
F-Secure Freedome VPN is a virtual private network service developed by F-Secure, a Finnish cybersecurity company. It offers features such as Wi-Fi protection, IP address masking, browsing protection, and a kill switch to enhance online privacy and security .
Microsoft AI Nonprofit Use Cases and Live Demo_2025.04.30.pdfTechSoup
In this webinar we will dive into the essentials of generative AI, address key AI concerns, and demonstrate how nonprofits can benefit from using Microsoft’s AI assistant, Copilot, to achieve their goals.
This event series to help nonprofits obtain Copilot skills is made possible by generous support from Microsoft.
What You’ll Learn in Part 2:
Explore real-world nonprofit use cases and success stories.
Participate in live demonstrations and a hands-on activity to see how you can use Microsoft 365 Copilot in your own work!
Download Wondershare Filmora Crack [2025] With Latesttahirabibi60507
Copy & Past Link 👉👉
http://drfiles.net/
Wondershare Filmora is a video editing software and app designed for both beginners and experienced users. It's known for its user-friendly interface, drag-and-drop functionality, and a wide range of tools and features for creating and editing videos. Filmora is available on Windows, macOS, iOS (iPhone/iPad), and Android platforms.
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?steaveroggers
Migrating from Lotus Notes to Outlook can be a complex and time-consuming task, especially when dealing with large volumes of NSF emails. This presentation provides a complete guide on how to batch export Lotus Notes NSF emails to Outlook PST format quickly and securely. It highlights the challenges of manual methods, the benefits of using an automated tool, and introduces eSoftTools NSF to PST Converter Software — a reliable solution designed to handle bulk email migrations efficiently. Learn about the software’s key features, step-by-step export process, system requirements, and how it ensures 100% data accuracy and folder structure preservation during migration. Make your email transition smoother, safer, and faster with the right approach.
Read More:- https://www.esofttools.com/nsf-to-pst-converter.html
Who Watches the Watchmen (SciFiDevCon 2025)Allon Mureinik
Tests, especially unit tests, are the developers’ superheroes. They allow us to mess around with our code and keep us safe.
We often trust them with the safety of our codebase, but how do we know that we should? How do we know that this trust is well-deserved?
Enter mutation testing – by intentionally injecting harmful mutations into our code and seeing if they are caught by the tests, we can evaluate the quality of the safety net they provide. By watching the watchmen, we can make sure our tests really protect us, and we aren’t just green-washing our IDEs to a false sense of security.
Talk from SciFiDevCon 2025
https://www.scifidevcon.com/courses/2025-scifidevcon/contents/680efa43ae4f5
13. What you love from Ruby
• Latest Ruby language features
• Mostly-same Ruby standard library
• Pure-Ruby gems work great
• Native gems with JRuby support
• It walks like Ruby, talks like Ruby
• It is Ruby!
14. With the power of the JVM
• Fast JIT to native code
• Fully parallel threading
• Leading-edge garbage collectors
• Access to Java, Scala, Clojure, ...
• But it's still Ruby!
23. What do you optimize for?
• Easy to develop with: short time until first deploy
• Fast startup: good response cycle at command line
• Straight-line performance, many operations per second
• Parallelism: utilize many cores to get more done
25. Production Quality?
• Support for 99%+ of Ruby language features
• Important parts of standard library
• Runs typical Ruby applications and libraries
• Healthy extension ecosystem
• CRuby, JRuby are the only real options right now
26. CRuby (MRI)
• Up until 1.9, AST interpreter
• YARV bytecode VM introduced for 1.9.0
• GC and performance improvements through 2.x series
• Ruby 2.3 is latest, released in December
• Future work on JIT, GC, happening now
27. JRuby
• Many redesigns since creation in 2001
• AST interpreter until 2007
• Simple AST-to-bytecode JIT until JRuby 9000
• Optimizing compiler with JIT for 9k
• JRuby 9.0.5 is current, 9.1 in a couple weeks
• Next-gen Truffle runtime in the works
53. Concurrency? Parallelism?
• Parallelism happens on the harder, e.g. multi-core
• Concurrency happens in the software, e.g. Thread API
• You can have concurrency without parallelism
• You can have both with JRuby
55. Parallelism in Ruby
• On CRuby, usually process-level
• Ruby threads prevented from running in parallel
• Extensions, IO can opt to release lock
• On JRuby, usually thread-level
• Ruby thread == JVM thread == OS thread
• Single-process, shared memory
56. A Mailing Queue
• A simple example of concurrency
• For each job, construct an email to send
• Some computation added to make processing heavier
• "Ruby Concurrency and Parallelism: A Practical Tutorial"
https://www.toptal.com/ruby/ruby-concurrency-and-parallelism-a-
practical-primer
57. require "./lib/mailer"
require "benchmark"
puts Benchmark.measure{
(ARGV[0] || 10_000).times do |i|
Mailer.deliver do
from "eki_#{i}@eqbalq.com"
to "jill_#{i}@example.com"
subject "Threading and Forking (#{i})"
body "Some content"
end
end
}
58. POOL_SIZE = (ARGV[0] || 10).to_i
jobs = Queue.new
(ARGV[1] || 10_000).to_i.times{|i| jobs.push i}
workers = (POOL_SIZE).times.map do
Thread.new do
begin
while x = jobs.pop(true)
Mailer.deliver do
...
end
end
rescue ThreadError
end
end
end
workers.map(&:join)
75. Great Features, Hidden Costs
• Blocks are expensive to create, slower than method calls
• case/when is an O(n) cascade of calls
• Singleton classes/methods are costly and hurt method cache
• Literal arrays, hashes, strings have to be constructed, GCed
• Flow-control exceptions can be very expensive and hard to find
82. JVM Tooling
• Wide range of GCs: parallel, concurrent, realtime, pauseless
• Built-in tools for analyzing GC, JIT, thread, IO, heap
• Built-in remote monitoring via JMX
• Dozens of tools out there for profiling, management, and more
83. VisualVM
• Graphical console into your application
• Monitor GC, threads, CPU usage
• Sampled or full profiling with GUI browser
• Live memory dumping, heap inspection
• Ships with every OpenJDK install
86. Java Mission Control
• Extremely low-overhead application recording
• Analyze results offline in JMC
• GC, CPU, heap events, IO operation all browsable
• Commercial feature, free for development use
90. More on GC
• JVM GCs are incredibly tunable with sensible defaults
• Tools like http://gceasy.io and JClarity give you a deeper view
• These are the best GCs and the best tools in the world