Blog on Java, Performance, Concurrency, NIO, Unsafe, Low latency, Programming, Software, Philosophy| psy-lob-saw.blogspot.com
Inlining is a powerful and common optimization technique used by compilers. | Psychosomatic, Lobotomy, Saw
JDK 9 is out! But as a library writer, this means change, and change can go either way... Once we've satisfied that JCTools works with JDK9, what other observations can we make? Well, one of the main motivations for using JCTools is performance, and since the code has been predominantly tested and run with JDK8, is it even better with JDK9? is it worse?| Psychosomatic, Lobotomy, Saw
Paved with well intended definitions it is.| Psychosomatic, Lobotomy, Saw
JCTools has a bunch of benchmarks we use to stress test the queues and evaluate optimizations. | Psychosomatic, Lobotomy, Saw
When considering concurrent queues people often go for either:| Psychosomatic, Lobotomy, Saw
I've just run into this issue this week, and it's very cute, so this here is a summary. Akka has their own MPSC linked queue implementation, and this week in was suggested they'd swap to using JCTools. The context in which the suggestion was made was a recently closed bug with the mystery title: AbstractNodeQueue suffers from nepotism| Psychosomatic, Lobotomy, Saw
This post builds on the basis of a previous post on safepoints. If you've not read it you might feel lost and confused. If you have read it, and still feel lost and confused, and you are certain this feeling is related to the matter at hand (as opposed to an existential crisis), please ask away.| Psychosomatic, Lobotomy, Saw
In this previous post about Safepoints I claimed that this here piece of code:| Psychosomatic, Lobotomy, Saw
I've been giving a couple of talks in the last year about profiling and about the JVM runtime/execution and in both I found myself coming up against the topic of Safepoints. Most people are blissfully ignorant of the existence of safepoints and of a room full of people I would typically find 1 or 2 developers who would have any familiarity with the term. This is not surprising, since safepoints are not a part of the Java language spec. But as safepoints are a part of every JVM implementation ...| Psychosomatic, Lobotomy, Saw
Continuing from previous post on the expansion of the Queue interface to support new ways of interacting with queues I have gone ahead and implemented relaxedOffer/Poll/Peek for the JCTools queues. This was pretty easy as the original algorithms all required a bit of mangling to support the strong semantic and relaxing it made life easier. Implementing batch/continuous interactions was a bit more involved, but the results were interestingly rewarding. I will save discussing the drain/fill res...| Psychosomatic, Lobotomy, Saw
There is an edge that JMH (read the jmh resources page for other posts and related nuggets) has over other frameworks. That edge is so sharp you may well cut yourself using it, but given an infinite supply of bandages you should definitely use it :-) This edge is the ultimate profiler, the perfasm (pronounced PERF-AWESOME!, the exclamation mark is silent). I've been meaning to write about it for a while and as it just saved my ass recently...| Psychosomatic, Lobotomy, Saw
It is a fact well known to those who know it well that "==" != "equals()" the example usually going something like:| Psychosomatic, Lobotomy, Saw
{This post is part of a long running series on lock free queues, checkout the full index to get more context here}| Psychosomatic, Lobotomy, Saw
{This post turned rather long, if you get lazy feel free to skip to the summary}| Psychosomatic, Lobotomy, Saw
Some years back I was working on a latency sensitive application, and since latency was sensitive it was a requirement that we somehow capture latency both on a transaction/event level and in summary form. The event level latency was post processed from the audit logs we had to produce in any case, but the summary form was used for live system monitoring. We ended up with a solution I've seen since in many places (mild variations on a theme), which is what I've come to think of as the linear ...| Psychosomatic, Lobotomy, Saw
{This post assumes some familiarity with JMH. For more JMH related content start at the new and improved JMH Resources Page and branch out from there!}| Psychosomatic, Lobotomy, Saw
PDF to HTML conversion helps improve your PDF content for browser display. BuildVu is one of the leading PDF to HTML solution for developers. In this article I will explain how to use our PDF files…| Java PDF Blog
In my previous article, I shared with you the steps I took, to further automate setting up my demo environment, and implementing a Service with service type LoadBalancer. Some years ago, I also wrote articles about the Quarkus Kubernetes Extension. This time I wanted to have a look at some others aspects of the Quarkus Kubernetes Extension, that I came across. Part of the “Developer Joy” is the so called “Remote Development”. Run dev mode remotely with changes to local files immediate...| Conclusion AMIS Technology Blog
A Puzzling Performance Puzzler Spoiler Alert Two points before getting into this. First, my apologies to all those that sent me their solution that I wasn’t able to respond to. Second, I’d encourage you to make your own attempt at this puzzle before reading any further. What follows is my solution so don’t read any further. Spoiler alert, solution about to start. Last warning, now onto my solution. The Puzzler On the surface, the puzzle appears quite trivial, take a method (from a large...| Random Notes and Cheat Sheets
タイトルで言いたいことをほぼ言い切っているし、Base64かつJavaならよくある話なので、ググったらいくらでも出てくるのですが、2025年時点の最新でそれなりに自分で計測してみた。 というだけの話。| xuwei-k's blog
/*What do you do in Java when you need to throw a checked exception in a context where it's not allowed, for instance when implementing a third party interface with no declared throws clause? If you're smart and its allowed you just write the code in another language. Otherwise you probably just wrap the bastard checked exception in an unchecked exception and be on your way.But the wrapping| One Div Zero
The warning "Type safety : A generic array of T is created for a varargs parameter" is so irritating it makes me want to beat Java with a snoracle, an implement that allows defunct tech companies to breath while underwater. This article will explain what the warning is, where it comes from, and why it is pretty boneheaded. The warning also shows just how hard it is to extend an existing language| One Div Zero
Running automated tests is a good thing for software quality assurance. Test reporting tools help you understand the results of the current test run. You could also be interested to see how your tests results evolve over time. Here are some open source tools to help you do this, as they produce meaningful tests reports and dashboard. This article lists the main open source test reporting tools available today. Use our contact form to make us aware of some open source test reporting tools that...| Software Testing Magazine
I’m currently working on a software designed more than a decade ago. It offers a plugin architecture: you can develop a plugin whose lifecycle is handled by the software. The tough part, though, is how you access the platform capabilities: via static methods on singletons. @Override public boolean start() { var aService = AService.getInstance(); var anotherService = AnotherService.getInstance(); // Do something with the services var result = ...; return result; } T| A Java geek
Two years ago, my friend José Paumard held the talk 'Concurrent and Asynchronous Programming : Loom' at the Geneva Java User Group. In his talk, he mentioned that the Spring team would need to completely redesign their approach to transaction: his reasoning was that the transactions are implemented on top of ThreadLocal object and Loom’s virtual threads break this approach. I was intrigued because though I used Spring transactions a lot via the @Transactional annotation, I never opened thou| A Java geek
In the fast-paced digital ecosystem of 2025, JavaScript is at the heart of cutting-edge software development; the language that supports Software 2.0, covering everything from dynamic websites to artificial intelligence-driven applications, mobile apps to serverless architectures. Thanks to its flexibility, supported by a rich ecosystem of libraries and frameworks, it is indispensable for developers who […] The post 20 Amazing Things You Can Do With JavaScript in 2025 appeared first on Carm...| Carmatec Inc – Mobile App Development Company
Learn Java instance variables with clear explanations and examples. A complete 2025 guide to understanding scope, usage, and best practices.| Carmatec Inc - Mobile App Development Company
Photo by Claudio Schwarz on UnsplashThis article is part of a series exploring design patterns using the Java programming language. The goal of this series is to help readers develop a solid understanding of design patterns while also sharing real-world examples from actual codebases that make use of these patterns.| amritpandey.io
The number of lines of code in a method/function follows the same pattern in the three languages for which I have measurements: C, Java, Pharo (derived from Smalltalk-80). The number of methods containing a given number of lines is a power law, with an exponent of 2.8 for C, 2.7 for Java and 2.6 for […]| The Shape of Code
Measuring causes profiles to change, so is there a way to work around it and know whether a profile is accurate?| stefan-marr.de
NewsPicksのクレジットカード決済における本人認証対応についてご紹介します。| Uzabase for Engineers
Recently, for a client of ours, we had to check if a JMS Queue on an 14c Oracle WebLogic Server was correctly configured and working. -| Conclusion AMIS Technology Blog
I was recently invited to speak at the Vancouver Java User Group https://www.linkedin.com/groups/14603101/. I proposed an AMA on performance tuning as in my experience, this turns a presentation into a group discussion which allows everyone to be engaged and that makes it more fun for everyone. The discussion in this session was mostly about methodology, or lack of it. I showed a chunk of code from one of the exercises from my performance tuning workshop. This seemingly simple exercise has st...| Random Notes and Cheat Sheets
Integrating AI into Java projects has traditionally been complex—requiring multiple SDKs, custom integrations, and provider-specific code. Spring AI simplifies this process by providing a single, consistent layer for working with large language models in Spring Boot. No more stitching together libraries or rewriting code for every provider. In this guide, we’ll explore what Spring AI is, why it matters for ... Read More The post Spring AI: An Overview appeared first on Keyhole Software.| Keyhole Software
These are the best things to do in Yogyakarta: from kampungs and authentic markets to museums, temples, the Sultan's Palace and Malioboro!| Backpack Moments
All you need to know about taking the train from Jakarta to Yogyakarta, including timetables, prices, tips and if the executive class is worth it.| Backpack Moments
Learn how to visit Borobudur and Prambanan in 1 day using public transportation in Yogyakarta. It's cheap and easy. But is it worth it?| Backpack Moments
Heroku's commitment to developer productivity shines through in its powerful buildpack system . They handle the heavy lifting of building your app, letting you focus on what matters most: writing code. A prime example is the Heroku Java buildpack , a versatile tool that simplifies deploying Java applications, especially those built with popular frameworks like Spring Boot, Quarkus, and Micronaut. One of the core strengths of Heroku buildpacks is their automatic nature. They intelligently dete...| Heroku
With advancements like records, sealed classes, and pattern matching, Java is steadily moving toward a more data‑centric style. Learning to use these tools is one of the clearest ways to write modern, expressive Java.| InfoWorld
The Factory pattern is the second most commonly used design pattern.| amritpandey.io
This is a summary of the JavaZone 2025 conference I attended in early September. It’s a conference focused on developers that I enjoyed and highly recommend.| blog.allegro.tech
I recently worked with GraalVM's Truffle language implementation framework. I wanted to write a tutorial about it, as I've found the existing explanations of how it works difficult to follow (I had to piece a lot of information from different sources to get the whole picture). Since it's a very large topic, I'm breaking it up into multiple parts. In the first installment, I want to explain exactly what Truffle and Graal is, and how they work together to help you easily create a high-performan...| www.endoflineblog.com
JDK 25 is the newest LTS release since JDK 21, and it ships with a gaggle of amazing VM-level features. This post will cover one of the most important improvements for command-line ecosystems like JRuby’s: the AOTCache (ahead-of-time cache) and its ability to pre-optimize code for future runs.| blog.headius.com
다중 접속 서버를 구현하기 위한 여정을 떠나봅니다. 소켓, 멀티 스레드, 멀티 플렉싱, 이벤트 루프에 대해 알아봅니다.| HARIL Blog
A guide on how to run QuestDB’s Java library in hardened environments where /tmp is mounted with noexec, by pre-bundling native libraries and using the questdb.libs.dir system property.| QuestDB Blog
Why is a fast hash table important for optimal SQL performance? We answer this question and explain how the QuestDB team designed FastMap, our hash table specialized for SQL execution.| QuestDB Blog
A guide to adding Rust to a Java codebase with JNI and the rust-maven-plugin.| QuestDB Blog
Fuzz tests have helped us catch many critical bugs. Should your team consider fuzz testing? They're the best thing to happen to our application tests so far.| QuestDB Blog
Oracle's Java 25 eliminates intimidating syntax barriers that have long deterred programming newcomers, while adding AI-focused features that prepare students for modern development careers.| The New Stack
$ cat HW.java && javac HW.java && java HW| Laurent Schneider
PDF is one of the most common formats for sharing documents. PDF files are portable and universally supported, but you may be unaware that PDF files can contain hidden content and functionality which may pose security or privacy risks. Malicious actors can use PDF files to deliver malware through embedded JavaScript or file attachments, and […] The post How to Sanitize PDF Files: Removing Hidden Risks appeared first on Java PDF Blog and was written by Jacob Collins.| Java PDF Blog
Sometimes you might want to duplicate pages in a PDF. For example, when filling in multiple copies of a form. Our Java PDF toolkit, JPedal, makes this an easy task. In this post I will show you the three simple steps of duplicating pages using JPedal. 1. Download JPedal You can download a JPedal trial […] The post How to Duplicate Pages in a PDF in Java (Tutorial) appeared first on Java PDF Blog and was written by Jacob Collins.| Java PDF Blog
If you have ever printed slides for a presentation and wanted to save paper when sharing handouts, you might have encountered N-up formatting. N-up is a common pre-print layout technique when working with PDF files and it means arranging multiple pages on a single sheet. For example, 2-up places two pages side by side, while […] The post How to N-Up Pages in PDF Files in Java (Tutorial) appeared first on Java PDF Blog and was written by Jacob Collins.| Java PDF Blog
Some PDF files can be “tagged” which means they contain information about the structure of the file. This structure is embedded as metadata within the PDF and is made up of a hierarchy of tags that label elements such as headings, paragraphs, lists, tables, and images. This is very similar to HTML where text is […] The post How to extract text from a PDF as Markdown appeared first on Java PDF Blog and was written by Jacob Collins.| Java PDF Blog
Why do we need to parse PDF files? PDF files are unusual in that they do not contain the actual content you see displayed when you view the file. Instead it is a program which draws the text, lines, shapes and images to create that display. This code needs to be ‘executed’ in order to […] The post JPedal: Java PDF Parser appeared first on Java PDF Blog and was written by Jacob Collins.| Java PDF Blog
Developers that work with PDF in Java often have to rely on SDKs made specifically for the document format. Where free community based libraries may be useful for solo developers and hobbyist, ente…| Java PDF Blog
以下を読めばわかる人、読んだことある人は、この先読む必要ありません。 github.com| xuwei-k's blog
Oracle’s new and well-published fee structure for Java is now in full force. It represents the fourth fee structure change in four years. Under the new schedule, companies using Java could pay 2-5 times more to continue using it. This begs a particularly important question: is the new fee structure pricing companies out? A January piece from Forbes Council’s Member Scott Sellers suggests that this is a very real possibility. Sellers notes that 98% of all businesses use Java for […] The ...| Miro Consulting
On January 23, 2023, Oracle quietly announced their new licensing metric for Java, the Employee for Java SE Universal Subscription metric. Since then, Oracle has done two (2) things; possibly three (3): Oracle no longer offers the older metrics of Processor (servers, with the core-factor applied) and Named User Plus (workstations). Even if you had originally licensed the older metrics (beginning in April 2019 and ending just prior to the adoption of the new metric), once that term ran its [...| Miro Consulting
I wrote about mutation testing a few times on this blog, and I even have a mutation testing workshop that I run on a pretty frequent basis.| On Test Automation
The changes to licensing scheme for Java is coming this January 2019. Here’s my summary notes of what’s coming. Changes There will be two different type of JDK from Oracle: OpenJDK Oracle JDK Oracle JDK Java 11 won’t be free for production OpenJDK Java 11 The post Oracle’s Java New Licensing Scheme for 2019 first appeared on djitz.com.| djitz.com
Here’s Java 25, ready to perform to the limit. It introduces stable values, and intensifies its focus on performance as more JEPs emerge from Project Leyden. On top of that, the Java Flight Recorder is now more equipped than ever to tackle performance issues. This post has all the info!| hanno.codes
You learn by comparing to what you already know. I was recently bitten by assuming Rust worked as Java regarding transitive dependency version resolution. In this post, I want to compare the two. Dependencies, transitivity, and version resolution Before diving into the specifics of each stack, let’s describe the domain and the problems that come with it. When developing any project above Hello World level, chances are you’ll face problems that others have faced before. If the pr| A Java geek
Java has a vast ecosystem of APIs, not all of which are effective or easy to learn. Developing a good API is not trivial: misdesigning key elements, defining simple abstractions, and threading models are among the themes that must be addressed. The official Elasticsearch Java SDK is a project with a design effort that has been made to address these elements. Recently, this project surprised me, and I tried to examine the design ideas that make it interesting and effective, while also having som| A Java geek
I first started programming Java at IBM back in 1999 as a Pre-University Employee. If I remember correctly, we had Java 1.1.8 installed at that time, but were moving to Java 1.2 (“Java 2”), which w…| Neil Madden
It is often said, with some evidence, that 80% of reported faults, for a program, occur in 20% of its code. I think this pattern is a consequence of 20% of the code being executed 80% of the time, while many researchers believe that 20% of the source code has characteristics that result in it […]| The Shape of Code
Because we can!| Silent Signal Techblog
许多语言的高性能程序库都是建立在 C/C++ 的核心实现上的。 例如,著名 Python 科学计算库 Pandas 和 Numpy 的核心是 C++ 实现的,RocksDB 的 Java 接口是对底层 C++ 接口的封装。 Rust 语言的基本目标之一就是替代 C++ 在这些领域的位置,为开发者提供 Rust 具备的安全性和可组合性优势。 Apache OpenDAL (incubating) 是 Databend 工程师 Xuanwo 开发的一个 Rust 语言实现的开放数据访问层。它的核心...| 夜天之书
本文成文于 2019 年。最近 Apache StreamPark (Incubating) 项目要做第一个 Apache 版本的发布,遇到了类似的发布多 Scala 支持版本时如何正确生成对应 POM 文件,又尽可能复用流水线的问题。由于过往发布记录都被删除,故重新发布。 近日在阅读 FLINK 代码时发现 FLINK 有一个 force-shading 模块,关于这个模块的作用注释在其使用点 maven-shade-plugin 的配置中是这样写的 现在这个模块已经移...| 夜天之书
近日尝试利用 Apache Ratis 这个项目包装一个 Raft 协议驱动的状态机的时候,遇到了需要用 Protobuf 传输数据的场景。由于 Gradle 构建工具的门槛和 Java 语言项目的某些惯例碰到了使用上的问题,这里记录一下我在这个玩具项目当中的用例。| 夜天之书
| mrT4ntr4's Blog
Learn all about Java 25's new CPU-time profiler and why it matters in this weeks blog post from the creator himself.| Mostly nerdless
Couple of years back I wrote a post describing the thundering herd problem. Now that I look back, I had very cursory knowledge about the problem. I knew what it was & how can it impact an application. I knew a possible solution that can be used to solve the problem. But these were individual pieces of information. There was nothing connecting them to give me an end to end view & that was primarily because I had neither seen the problem nor the solution in action. I knew the fundamental blocks...| Distributed Computing Musings
The Prototype Design Pattern is a creational pattern that lets us create new objects by cloning existing ones instead of instantiating them from scratch.| amritpandey.io
Photo by Bermix Studio on UnsplashThis article is part of a series exploring design patterns using the Java programming language. The goal of this series is to help readers develop a solid understanding of design patterns while also sharing real-world examples from actual codebases that make use of these patterns.| amritpandey.io
Advent Of Code is a set of puzzles that will test your problem-solving skills using your favourite programming language. You do not need extensive programming skills, but the knowledge of some standard algorithms is a pre. Plus, it is a lot of fun and a very exciting way to challenge yourself.| iO tech_hub
An exploration of Kotlin and coroutines to have a Spring reactive application written in direct style| iO tech_hub
This 2-part article is about going from a traditional MVC-style Spring Boot application written in Java to a modern, functional, reactive Spring Boot application using Kotlin and Coroutines.| iO tech_hub
You might have read my article about plugging Wasm into Kafka Connect, but I wanted to revisit this from a different angle: what if instead of consuming data from a topic and manipulating such data on the client-side, we intercepted data as it lands on the Kafka broker? But first of all, is it possible to extend the Kafka broker at all?| blog.evacchi.dev
Consider using JSON arrays instead of objects to transfer data in order to avoid overhead on client, server, and the data itself.| Java, SQL and jOOQ.
What is PDF Annotation? Annotating PDF files is an essential skill for collaboration, review, and seamless communication in both professional and educational workflows. PDF annotations allow you to draw over, highlight, label, or otherwise “annotate” the document without modifying the existing content. Why Annotate PDF Files? A common use case would be for gaining feedback […] The post How to add annotations to a PDF file appeared first on Java PDF Blog and was written by Jacob Collins.| Java PDF Blog
In Java, you can easily scale images with the help of libraries like JDeli, which offers both standard and advanced scaling options. This guide will show you how to scale images in Java using JDeli, explain different scaling approaches, and provide practical code examples. What is Image Scaling? Image scaling refers to resizing an image […] The post Scaling Images in Java with JDeli appeared first on Java PDF Blog and was written by Amy Pearson.| Java PDF Blog
Today I will demonstrate a worked example to show how you can create a PDF translator using our PDF toolkit JPedal and Translator. This will convert any PDF Document from one language to another (in this case English to Chinese). You can get a copy of JPedal here. Extracting text First, we will need to […] The post How to translate PDF files in Java (Tutorial) appeared first on Java PDF Blog and was written by Jacob Collins.| Java PDF Blog
Blurring is a fundamental image processing technique used to reduce noise, smooth features, and produce aesthetic effects. In Java, you can easily apply different types of blur using image processing libraries like JDeli. This post will guide you through basic blurring and Gaussian blurring of images in Java, explaining their differences and practical implementations. What […] The post Blurring Images in Java: Simple & Gaussian Blur Code Examples appeared first on Java PDF Blog and was writ...| Java PDF Blog
Everybody loves free stuff. In the field of software, developers use free solutions in countless projects. However, free solutions come with invisible costs as well, such as the time spent on self-…| Java PDF Blog
In my previous article, I shared with you the steps I took, to further automate setting up my demo environment, and implementing a Service of service type NodePort. Some years ago, I also wrote articles about the Quarkus Kubernetes Extension. In this article, you can read more about the steps I took to further automate setting up my demo environment, and implementing a Service with service type LoadBalancer. For the demo environment to start, from the directory named env on my Windows laptop,...| AMIS Technology Blog
The Java programming language is one of my favorite software development languages that you can choose to learn. Java is a high-level, object-oriented language that was first released by Sun Microsystems in 1995. It was designed by James Gosling and his team (pictured below) during the early 1990s as part| CoderOasis
In this article, I will explain how to read Avif files as Buffered Image in Java with some sample code. ImageIO does not read Avif file type in Java, forcing you to use an external library or plugin. If you are looking for a free solution, there is an AVIF library on GitHub (which includes […] The post How to read AVIF files in Java (Tutorial) appeared first on Java PDF Blog and was written by Mark Stephens.| Java PDF Blog
Minimal Scala Container Images using Nix| blog.aiono.dev
Introduction In Java programming, lambda expressions or Java one-liners have become widely adopted practices for writing concise and expressive code. These compact, anonymous functions introduce functional programming concepts to Java, streamlining operations on collections, simplifying data manipulation, and enhancing code readability. Introduced in Java 8, lambda expressions are designed to represent blocks of executable code. […] The post Simplifying Java One Liners (Lambda Expressions...| Lightrun
We are still playing a “game of ketchup” after the Independence Day holiday in the United States. This week, we learn that IBM i Java Development Kit 11 64-bit VMs Fail with UnsatisfiedLinkError After IBM i Java Group PTF Apply. You can find out more about this issue at this link. The affected IBM i| IT Jungle
Our team of 5 members are managing a microservice architecture that currently includes around 200 Java Spring boot microservices, with approximately 50 new services being added each year. We follow| Software Engineering Stack Exchange
JFR is getting a new method sampler that walks stacks at safepoints in JDK 25. Learn all about the new sampler in this week's blog post.| Mostly nerdless
We are excited to announce Amazon CodeWhisperer, a machine learning (ML)-powered service that helps improve developer productivity by providing code recommendations based on developers’ natural comments and prior code. With CodeWhisperer, developers can simply write a comment that outlines a specific task in plain English, such as “upload a file to S3.” Based on this, […]| Amazon Web Services
The Intelligence Cloud provides partners with Java inventory, vulnerability and code use analytics, as well as unique reporting and insights into active Java Virtual Machines from any OpenJDK distribution, including Oracle Java and Azul.| ITOps Times
For a very long time I’ve held off consulting Large Language Models besides the odd query out …| Brain Baking
Guava is a kind of Swiss Army knife API proposed by Google for Java 5 and more. It contains many functionalities that help the developer in its every day life. Guava proposes also a basic functional programming API. You can represent almost statically typed functions with it, map functions on collections, compose them, etc. Since […]| Kerflyn's Blog
What I like with factorial function is that it’s easy to implement by using different approaches. This month, I’ve presented functional programming and some of its main concepts (recurs…| Kerflyn's Blog
The Singleton pattern is one of the quirkiest and most trivial patterns in existence. This pattern was created to fulfil the need for a single, one-time instantiation of an object that is shared among multiple components.| amritpandey.io