Posts

Showing posts from December, 2011

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=...

ANTLR ile Lexer Generation

Java platformunda bir lexer oluşturmak istediğimizde elimizdeki seçenekler JavaCC, SableCC ve ANTLR olarak karşımıza çıkıyor. ANTLR ile elimizdeki dil için bir lexer oluşturmaya çalışalım. Lexer için kullanacağımız dilin token kuralları: Identifier: Harf ile başlar. Harf, rakam ve alt çizgilerden oluşan stringdir. Büyük haft – küçük harf farklı olarak değerlendirilir. Integer constant: Rakamlardan oluşan string. Binary operator: Aşağıdakilerden biri: + - * / && Yorum: İki türlü yorum olabilir: Blok tipi yorum: /* */ Satır tipi yorum: // ANTLR kurulumu için yapılması gerekenler: Antlrworks'ü indir ve üzerine tıkla. En sevdiğin kafeinli içecek de dahil olmak üzere bilgilerini göndermeyi kabul et. ;) Yeni gramer dökümanı mı oluşturmak istiyorsun? Evet Grammar name: MyLexer Type: Lexer Lexical items: Identifier, Integer, Comments (single line + multiline), Whitespace Oluşturacağımız lexer için belirlenen kuralları ana pencerede görüyoruz: ID : ('a'..'z...

"REGULAR EXPRESSIONS" KONUSUNU TAM OLARAK VE KOLAYCA ANLAMAK

Herhangi bir dilde yazılmış bilgisayar programının derlenebilmesi veya yorumlanabilmesi için öncelikle "lexical analysis" denilen aşamadan geçmesi gerekiyor. Bu aşamada program kelimelere veya "token" denilen yapıtaşlarına ayrılıyor. Programlama dilinin sentaksı, tokenlerin türleri hakkında bilgi verir. Örneğin birçok dilde yer alan bazı token türleri: ID Örnek: price calculateRate lastItem NUM Örnek: 73 0 REAL Örnek: 12.5 0.23 COMMA , IF if Bir lexical analyser (lexer) yazabilmek için herhangi bir programlama dili kullanılabilir. Fakat özellikle "regular expressions" dili bu iş için kullanıma uygun. Regular Expressions Dil (language), bir string kümesi olarak tanımlansın. Örneğin Java dili, legal java programı oluşturabilecek tüm string lerin kümesidir. Bu durumda Java dili sonsuz elemana sahip bir küme. Peki bir dili (belki sonsuz elemana sahip), nasıl sonlu ifadelerle (açıklamalarla) tanımlayabiliriz? İşte burad...

nijhof2axon

Axon framework kullanıcılarına katkıda bulunmak amacıyla paylaştığım proje ile ilgili yorum ve sorular gelmeye başladı. http://code.google.com/p/nijhof2axon/ >>You share the Data between the Domain and the Query Model? When a command is dispatched, a CommandHandler uses the aggregate root to handle the command. Aggregate root fires DomainEvents. => Query layer related code listens to domain events and updates the query model. (Example: ClientTableUpdater) Domain entities are first class objects but Query Model classes are just DTOs with getters and setters. We have Client as entity and ClientDetailsEntry as DTO. >>The (generated?) table domainevententry looks like you can not replay events? missing the event data? To observe how events are replayed by the framework, you can follow these steps: Click on sample client change name stop server start server put a breakpoint to EventSourcingRepository.doLoad() method put a breakpoint to Client.handleClientNameChangedEvent() me...

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