What to Do About Java Memory Leaks: Tools, Fixes, and More

Memory management is Java’s strongest suit and one of the many reasons developers choose Java over other platforms and programming languages. On paper, you create objects, and Java deploys its garbage collector to allocate and free up memory. But that’s not to say Java is flawless. As a matter of fact, memory leaks happen and they happen a lot in Java applications. We put together this guide to arm you with the know-how to detect, avoid and fix memory leaks in Java.


How to Handle Exceptions in Java: Complete Tutorial with Examples and Best Practices

As developers, we would like our users to interact with applications that run smoothly and without issues. We want the libraries that we create to be widely adopted and successful. All of that will not happen without the code that handles errors. Java exception handling is often a significant part of the application code. You might use conditionals to handle cases where you expect a certain state and want to avoid erroneous execution – for example, division by zero.


Improve Application Performance with These Advanced GC Techniques

Automated garbage collection (along with the JIT HotSpot Compiler) is one of the most advanced and most valued components of the JVM, but many developers and engineers are far less familiar with Garbage Collection (GC), how it works and how it impacts application performance. First, what is GC even for? Garbage collection is the memory management process for objects in the heap.


Java Application Manual Instrumentation for Distributed Traces

In this blog series, we are covering application instrumentation steps for distributed tracing with OpenTelemetry standards across multiple languages. Earlier, we covered Golang Application Instrumentation for Distributed Traces and DotNet Application Instrumentation for Distributed Traces. Here we are going to cover the instrumentation for Java.


How to Find Hibernate Performance Issues in Development and Production

The Java Persistence API (JPA) is used in most Java applications to interact with a relational database. One of its most popular implementations is the Hibernate ORM, because it uses object-relational mapping to abstract database interactions and makes implementing simple CRUD operations very simple. But this abstraction also has its downsides. Hibernate uses a lot of internal optimizations and hides all database interactions behind its API.


Troubleshooting Spring Applications with Epsagon

Spring is an application development framework for Java. But as any developer will tell you, Spring and Spring Boot are more than just frameworks. They have become synonyms for Java because most web-based applications written in Java are based on the Spring framework. This is due to the fact that when it was first introduced in 2003 by Rod Johnson, it brought a much-needed structure to Java projects and made it very easy for anybody to get started with building small and large applications in Java.


Clojure microservices for JavaScript developers part 2

This series was co-written by Musa Barighzaai and Tyler Sullberg. In the previous post, we explored high-level differences between thinking in Clojure compared to thinking in JavaScript. We are now ready to start building our first Clojure microservice. The microservice we are going to build will be very simple. It will be an HTTP server that uses a Redis data store to count how many times a given IP address has pinged the /counter endpoint.


Clojure microservices for JavaScript developers part 3

This series was co-written by Tyler Sullberg and Musa Barighzaai. This is the third and final post in a series of posts for JavaScript developers about how to set up Clojure microservices. The previous posts were: Those previous posts are useful context, but you can clone the repo and jump into this post without reading them.


Clojure microservices for JavaScript developers

This series was co-written by Tyler Sullberg and Musa Barighzaai. CircleCI is growing, which is wonderful. However, one of the growth challenges we have is that our backend is primarily written in Clojure, and few developers know Clojure. Many CircleCI engineers, including myself, have learned Clojure on the job. Before joining CircleCI, I was a JavaScript developer. As the lingua franca of software engineers, JavaScript is a relatively straightforward language to learn.