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
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 »
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 »