Zagadka z magicznymi Stringami

W związku ze sporym zainteresowaniem i wieloma prośbami, przygotowałem kolejną zagadkę. Tym razem należy napisać kawałek złośliwego kodu, aby „zaczarować” fragment inwokacji tak, by podczas jego wypisywania na ekran, pojawił się zupełnie inny napis.

Oto kod zagadki: Read the rest of this entry »

Clean Tests by Jacek Kiljański

Podczas konferencji Confitura 2012, Jacek Kiljański z Javart poprowadził prezentację na temat testów jednostkowych. Pojawiło się sporo ciekawych praktyk i wzorców, ale także kontrowersji, np. dotyczących konwencji nazewniczych w testach. Warto obejrzeć i skonfrontować z własnymi praktykami.
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? 🙂

Mechanizmy synchronizacji wątków w Javie 6

Jeśli piszesz aplikacje wielowątkowe w Javie, to prędzej czy później zainteresujesz się mechanizmami synchronizacji. Łukasz Dembiński przedstawia trzy najpopularniejsze sposoby synchronizacji wątków w Javie 6 oraz porównuje ich wydajność przy różnych współczynnikach współbieżności. W swoich porównaniach, oprócz wydajności, bierze pod uwagę także zapewnianie funkcjonalności:

  • reentrant locking
  • timed locking
  • lock polling
  • condition locking
  • shared / exclusive locking
  • lock ownership

Zapraszam do lektury.

Zagadka ze Stringami

Stosunkowo prosta lecz ciekawa zagadka dotycząca klasy String. Dlaczego po uruchomieniu poniższego kodu otrzymujemy:

<barista@javaczyherbata.pl> java StringPuzzle
true false

Read the rest of this entry »

Jak zapobiegać degradacji kodu

W 2010 roku, podczas ostatniej Javarsovii Jakub Nabrdalik z Touk opowiadał o „Biodegradacji kodu„. Stare, ale jare! Zapraszam do obejrzenia.
Read the rest of this entry »

Refaktoryzacja jest jak seks!

Dlaczego?
Oto kilka powodów:
Read the rest of this entry »

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 »

Jak pobrać PID w runtime’ie?

Jak pobrać PID w runtime’ie? Oto prosty sposób:

import java.lang.management.ManagementFactory;

public class PID {

	public static void main(String[] args) {
		final String vmName = ManagementFactory.getRuntimeMXBean().getName();
		final int position = vmName.indexOf('@');
		final String pid = vmName.substring(0, position);
		System.out.println("Your PID is: " + pid);
	}
}

Nagrania video z konferencji JDD 2012

Są już dostępne nagrania prezentacji z konferencji JDD 2012. Poniżej zamieszczam kilka najciekawszych* według mnie.
Read the rest of this entry »