Posts Tagged ‘JVM’

Busy Java Developer’s Guide to JVM Bytecode – Ted Neward

0xCAFEBABE
Podobno każdy programista Javy wie/powinien wiedzieć (niepotrzebne skreślić), co to jest CAFEBABE
Przyznam, że spotkałem się z tym terminem jedynie w książce Java Puzzlers.
Read the rest of this entry »

Do You Really Get Classloaders?

Jevgeni Kabanov (ZeroTurnaround) opowiada o niuansach pracy nad JRebel, skupiając się na aspekcie przeładowania kodu aplikacji bez restartu serwera. Mechanizm ładowania klas omawia zarówno od strony JVM jak i programisty. Każdy problem (np. NoClassDefFoundError, LinkageError) przedstawia na przykładzie i podaje rozwiązania. Wyjaśnia jak obiekty, klasy i classloadery są ze sobą powiązane.
Read the rest of this entry »

Zagadka z Java Memory

Ostatnia zagadka okazała się bardzo łatwa. Zatem dziś pora na nieco trudniejszą i ciekawszą.

Oto kod zagadki.

public class JVMPuzzle {

	private final int dataSize = (int) (Runtime.getRuntime().maxMemory() * 0.6);

	public void go() {
		{
			byte[] bytes1 = new byte[dataSize];
		}

//		for (int i = 0; i < 3; i++) {
//			System.out.println("Barista prosi: JVM zwolnij pamięć!");
//		}

		byte[] bytes2 = new byte[dataSize];
	}

	public static void main(String[] args) {
		new JVMPuzzle().go();
	}
}

Po skompilowaniu i uruchomieniu powyższego kodu otrzymujemy java.lang.OutOfMemoryError:

<barista@javaczyherbata.pl> java JVMPuzzle
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at JVMPuzzle.go(JVMPuzzle.java:14)
	at JVMPuzzle.main(JVMPuzzle.java:18)

Natomiast jeśli odkomentujemy linie 10-12, skompilujemy i uruchomimy program ponownie, to błąd braku pamięci się nie pojawi.
Jak to jest, że JVM słucha się Baristy? 🙂

NoClassDefFoundError vs ClassNotFoundException

java.lang.NoClassDefFoundError i java.lang.ClassNotFoundException brzmią bardzo podobnie ze względu na swoje nazwy i są często mylone. Tak naprawdę ich znaczenie jest różne.

Spójrzmy na hierarchię klas:
Read the rest of this entry »

Java concurrency: the hidden thread deadlocks

Pierre – Hugues Charbonneau jest konsultantem IT oraz architektem systemowym w CGI Inc specjalizującym się w Java EE, technologiach JVM oraz w optymalizacji systemów dużej skali. Jego blog Java EE Support Patterns to istna gratka dla osób zainteresowanych wątkami, współbieżnością, synchronizacją, zakleszczeniami, organizacją i problemami z pamięcią, profilowaniem czy maszyną wirtualną.

Polecam jeden z ostatnich postów: Java concurrency: the hidden thread deadlocks.

Zrozumieć JVM

Bardzo ciekawy artykuł wyjaśniający działanie JVM, opisujący jej strukturę oraz rolę podczas wykonywania programu. Sporo ilustracji i kodu.

Optymalizacja wydajności JVM, część 3

Druga część artykułu autorstwa Evy Andreasson pt. „JVM performance optimization, Part 3: Garbage collection” opublikowanego na JavaWorld.com.

Linki do poprzednich części:
Part 1: A JVM technology primer. Java performance for absolute beginners
Part 2: Compilers. Use the right Java compiler for your Java application

Understanding Java Garbage Collection and What You Can Do about It

Ciekawa prezentacja Gila Tene’a na temat garbage collection.

Optymalizacja wydajności JVM, część 2

Druga część artykułu autorstwa Evy Andreasson pt. „JVM performance optimization, Part 2: Compilers. Use the right Java compiler for your Java application” opublikowanego na JavaWorld.com.

Link do poprzedniej części:
Part 1: A JVM technology primer. Java performance for absolute beginners

Optymalizacja wydajności JVM, część 1

Pierwsza część artykułu autorstwa Evy Andreasson pt. „JVM performance optimization, Part 1: A JVM technology primer. Java performance for absolute beginners” opublikowanego na JavaWorld.com.