Tag: JVM

Profiling in Production

If you ever had some serious issues with a performance of your Java application, most probably you know how valuable thread profiling can be. But do you know which profiler you should use? There are two basic techniques used by profilers – sampling and instrumentation. Sampling Profilers A sampling profiler involves periodically asking…

Ring Buffer – a Data Structure Behind Disruptor

Disruptor is a high-performance library for passing messages between threads, developed and open sourced some years ago by LMAX Exchange company. They created this piece of software to handle an enormous traffic (more than 6 million TPS) in their retail financial trading platform. In 2010 they surprised everyone how fast their system can be by…

When Throughput Matters – Parallel GC

As I mentioned in one of the previous posts, Parallel Collector is also called Throughput Collector, because its main goal is to maximize overall throughput of the application. The two basic operations that Parallel Collector performs are Minor GC and Full GC. These are pretty straightforward. Minor GC When Eden fills up, the young…

User, Sys and Real Times in GC Log

Have you ever wondered what user, sys and real times in a GC log mean? Well, I have, a couple of times at least. Let’s say that we have the following line after Full GC entry: [Times: user=4.21 sys=0.03, real=0.75 secs] To find out what they represent, we should check UNIX command time first. time…

GC Algorithms

As described in the previous post, we have four different garbage collectors available in HotSpot JVM. There are some significant differences between them, but the actual concepts behind the algorithms which are used to do the actual job are quite similar. In this short post, I will try to explain three basic algorithms: Mark-sweep Mark-sweep-compact…

Why Server If It’s Not a Server?

Have you ever wondered why when you type java -version, you usually get something like that: java version “1.8.0_131” Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode) Why Server VM? For JVM, some machines are considered to be “client-class” and some are “server-class”. If the given machine…

Garbage Collectors Overview

The current version of HotSpot JVM includes three types of garbage collectors: – Serial Collector – Parallel Collector – The Mostly Concurrent Collectors All of them are generational ones, meaning that they take advantage of the way the heap is divided. There are three main operations which garbage collector is responsible for: –…

Yet Another Post About Java Heap Space

Generational Garbage Collectors JVM heap is divided into two different Generations. One is called Young and the second one is the Old (sometimes referred to as Tenured). The Young Generation is further separated into two main logical sections: Eden and Survivor spaces. There are also Virtual spaces for both Young and the Old Generations which…

What Causes OutOfMemoryError?

OutOfMemoryError might be thrown when one of the following circumstances occurs: JVM has run out of native memory Java heap is out of memory PermGen or Metaspace has run out of memory JVM spent too much time trying to collect the garbage The root cause of OutOfMemoryError can be usually deducted from the error message. Let’s…

Shallow, Retained and Deep Size

If you ever worked with heap analysis, you might have encountered terms such as shallow, retained and deep size of an object. It doesn’t really matter if we’re talking about analyzing JVM heap dump with VisualVM or JavaScript heap snapshot with Chrome DevTools – the terms are the same. The difference between shallow, retained and…