Posts

Showing posts from August, 2014

Observability of the Java Virtual Machine

Image
The JVM is one of the most observable runtimes. It provides us lots of tools for troubleshooting a JVM application in production. 1. Thread observability Threads are how the JVM actually does work. When something is wrong in production, the symptom is almost always a thread: stopped, blocked, leaking etc. Thread dumps work on any JVM with no  instrumentation, no agents, no restarts. <Example project link with /threaddump endpoint>         // (1) Deadlock — two threads grab the same pair of locks in opposite order.         new Thread(() -> grab(LOCK_A, LOCK_B), "deadlock-A-then-B").start();         new Thread(() -> grab(LOCK_B, LOCK_A), "deadlock-B-then-A").start(); http://localhost:8080/actuator/threaddump To list the JVMS, we can use the command below. PS C:\observe-jvm> jps -lv 25296 jdk.jcmd/sun.tools.jps.Jps -Dapplication.home=C:\Program Files\Microsoft\jdk-21.0.3.9-hotspot -Xms8m -Djdk.module.main=...

Decorator Tasarım Kalıbını Hatırlayalım

Bir sınıfın gerçekleştirebileceği işlemleri arttırmak için türetmeden yararlanabiliriz. Fakat türetme (subclassing), birçok dilde derleme aşamasında yapılabilen bir özellik. İşte Decorator kalıbı, dinamik olarak bir sınıfa yeni görevler verebilmemizi sağlıyor. Burada yaptığımız şey, bir sınıfa değil de bir nesneye yeni işlevsellik kazandırmak oluyor. Bu fikri daha iyi anlayabilmek için aşağıdaki basit örneğe bakalım: public class Program {     public static void main(String[] args) {         new TextField().draw();         TextField decoratedTextField = new TextField();         new ColorDecorator(new BorderDecorator(decoratedTextField)).draw();     } } public interface VisualComponent {     void draw(); } public class TextField implements VisualComponent {     @Override     public void draw() {         System.out.println("TextFiel...

Visitor Tasarım Kalıbını Hatırlayalım

Visitor kalıbına hangi durumda ihtiyaç duyabiliriz? Bir nesne yapısı üzerinde işlemler yapmak istiyoruz ve bu işlemlerin üzerinde çalıştığı nesne yapısından bağımsız olarak çeşitlenmesini istiyoruz. Bu durumda Visitor kalıbı işimize yarayabilir. Aşağıdaki örnekte bir arabanın parçaları üzerinde clean ve repair işlemleri yapılıyor: public interface CarElement {     void accept(CarElementVisitor visitor); } public interface CarElementVisitor {     void visit(Engine engine);     void visit(Wheel wheel); } public class Car implements CarElement {     private Engine engine;     private List wheels;     public Car(Engine engine, Wheel... wheels) {         this.engine = engine;         this.wheels = Arrays.asList(wheels);     }     @Override     public void accept(CarElementVisitor visitor) {         engine....

Popular posts from this blog

The WeakReference class, monitoring memory leak and garbage collection in a Java application

Simplescalar Simulator - Part 2: sim-outorder.c

Notes on Java Performance