Shooting yourself in the foot with Random number generators
Concurrency is hard. It becomes even harder when the lock contention issues are hidden deep into the standard libraries used as building blocks for regular applications. This post is opening up one particularly common issue where java.util.Random usage is affecting the application performance.
Turning on GC logging at runtime
There is a well-hidden way to adjust certain JVM parameters during runtime. This post describes a way to change the value of such parmeters with jinfo utility.
What is wrong with troubleshooting tools?
Troubleshooting tools such as heap dump analyzers, profilers, GC log analyzers and thread dump visualizers all have their place in a developer tool belt. However, all such tools have limitations built into their very core. In this post, these limitations are analyzed.
Minor GC vs Major GC vs Full GC
Do you know what differentiates Minor GC, Major GC and Full GC events within the JVM? Is this separation even necessary? The post busts some myths about the GC behavior while explaining the way GC really works.
Why is my JVM having access to less memory than specified via -Xmx?
Opening up the reason why certain tooling using Runtime.getRuntime().maxMemory() are displaying different total heap size than in the configuration specified via Xmx.
How JVMTI tagging can affect GC pauses
This post is analyzing why and how Plumbr Agents extended the length of GC pauses on certain occasions. Troubleshooting the underlying problem revealed interesting insights about how JVMTI tagging is handled during GC pauses.
How to define performance requirements?
Performance requirements build the foundation for performance testing and production monitoring. The job of creating specific and measurable performance requirements is harder than it looks at the first place. This post will discuss important points that are often missed when performance requirements are set.
2014 in retrospect
2014 was a good year for Plumbr. We made a big step towards our ultimate vision. See the key takeaways to how we have transformed the company to Java Performance Monitoring Solution in the post
Improving lock performance in Java
In this post I explain generic techniques to apply when facing lock contention issues in your Java application. I cover tools and techniques such as lock splitting, concurrent data structures, protecting the data instead of the code and lock scope reduction.
Java puzzle – solution
This post is describing the solution the the Java Puzzle we published couple of weeks ago. Spoiler alert - if you haven't solved the puzzle yet, you might be interested in reading the original post first.