Recently in Java Category

Memory Management in the Java HotSpot Virtual Machine

Als Systemadministrator und Betreiber von Java-Server-Applikationen sollte man das Innere des Java Garbage Collectors ansatzweise verstehen.

Gerade bei Applikationen die einen großen Speicherbedarf haben (Daten im Arbeitsspeicher halten um sie schneller ausliefern zu können) sollte man sich überlegen ob der Standardcollector der Richtige ist.

jconsole2.png

Die JVM entscheidet anhand diverser Systemkennzahlen (ab einer bestimmten Anzahl von RAM und CPUs/Cores meint die JVM auf einem Serversystem zu laufen und nicht auf einem Desktop) welche Standardcollectoren verwendet werden.

Der Speicher für die Objekte wird in einem Heap verwaltet. Dieser ist in den meisten Collectoren unterteilt in mehrere sogenannten Spaces.

  • Eden Space
  • Survivor Space (davon gibt es 2)
  • Old Generation

Stark vereinfacht werden alle neuen Objekte im Eden Space erzeugt. Sollte ein neues Objekt nicht in den Eden-Space passen, dann wird es direkt in der Old Generation abgelegt.

Im Survivor Space befinden sich diejenigen Objekte, die sich vorher im Eden Space befanden und mindestens eine Garbage Collection überlebt haben.

In Old Generation befinden sich die langlebigsten Objekte. Und zwar i.d.R. diejenigen, die mehrere Garbage Collection Durchläufe im Survivor Space überlebten.

In Permanent Generation (Non Heap) speichert die JVM (vereinfacht) diejenigen Objekte, die keiner besondere Garbage Collection bedürfen (z.B. Klassen, Code, sonstiger Java Overhead..)

Je nach Space und Plattform (Server oder Desktop) wird ein anderer Algorithmus für die Garbage Collection verwendet. Dabei werden in der Regel die Eden und Survivor Spaces frequentierter und schneller von Garbage befreit. Während im Old Generation Space der GC seltener, aber dafür länger, sein Werk vollbringt.

Je nach Anwendung (Desktop oder Serverapplikation, schnelles GC aber mit längerer Programmunterbrechung, concurrent GC mit kürzeren Programmunterbrechungen aber dafür mehr CPU und Speicherverbrauch für den GC Vorgang, schnelles Allokieren von neuem Speicher [keine Speichfragmentierungen im Heap]) lohnt es sich den Garbage Collector auf den jeweiligen passenden Algorithmus (sofern dies Java noch nicht automatisch getan hat) umzustellen.

U.a. stehen die folgenden Garbage Collector Algorithmen zur Auswahl (sie können mittels Parameter der JVM übergeben und konfiguriert werden):

  • Serial Collector
  • Parallel Collector
  • Parallel Compacting Collector
  • Concurrent Mark-Sweep (CMS) Collector

Gerade für Serversysteme wird nicht der CMS Collector von der JVM als Standardcollector gewählt. Der CMS wäre aber die bessere Wahl, wenn man auf kurze Programmunterbrechungen während des GC legt, aber dafür etwas mehr CPU und Speicherverbrauch in kauf nimmt.

Weitere Vor- und Nachteile sowie Einstellungsmöglichkeiten am GC sind in Memory Management in the Java HotSpot Virtual Machine anschaulich beschrieben (dort kann man auch nachlesen, weshalb es 2 Survivor Spaces gibt).

Für die Untersuchung der aktuellen Heapbelegung eignet sich jconsole, was bei Sun Java standardmäßig mitgeliefert wird.

PS: Ab Java 7 wird ein weiterer GC (G1) eingeführt. Experimentierfreudige können G1 auch schon in Java 6 aktivieren.

TV-Browser

Die Applikation TV-Browser gehört schon seit längerem zu meinem Alltag. Allerdings hatte ich dies hier noch nie kuntgetan, was ich hiermit nachhole.

tvbrowser.png

TV-Browser ist eine freie plattformunabhängige elektronische Programmzeitschrift (EPG). Das in Java geschriebene Open-Source-Programm wird seit 2002 entwickelt und hat nach eigenen Angaben über 80.000 aktive Nutzer. Es sind die Programme von 172 (überwiegend, aber nicht ausschließlich deutscher) Fernseh- und Rundfunksendern sowie 115 Kinos direkt eingebunden (Stand: 31. Juli 2006). Über Schnittstellen und Plugins können jedoch andere Dienste eingebunden werden, so dass insgesamt viele hundert Programme angezeigt werden können. Die Programmdaten werden von den jeweiligen Sendern/Kinos geliefert, eine redaktionelle Nachbearbeitung findet oftmals nicht statt. Ebenso sind durch Plugins viele weitere Funktionen realisiert. Beispielsweise können Lieblingssendungen durch Stichworte ("John Wayne") identifiziert werden; diese werden dann farblich hervorgehoben und durch Erinnerungsfenster angezeigt. ... Mehr auf Wikipedia.

tvbrowser2.png

Zwar hab ich den Verdacht, dass die meisten Leser TV-Browser schon kennen, aber dieses stück Software ist es wert darüber erneut aufmerksam zu machen.

Es ist eines der wenigen GUI-Programme vollständig programmiert in Java die ich regelmäßig nutze.

[German] JavaHints.de online

Auf JavaHints.de ist ab sofort der Java-Blog von meinem Bruder online. Der Blog an sich ist nichts Neues, jedoch wurde erst kuerzlich auf eine eigene Domain umgeschaltet. Zudem hatte ich noch keinen Blogroll dazu angegeben gehabt. Hier gibt es in unregelmaessigen Abstaenden Quizzes bzg. der programmiersprache Java zu loesen. Loesungen werden stets nach einigen Tagen veroeffentlicht.

Viel Spass auf JavaHints.de!

NetCalendar 1.0 released

| 3 Comments | 1 TrackBack

I've finally released the "NetCalendar 1.0". It has been almost 3 years since 1.0 RC5. However, only a few things have changed. NetCalendar now supports secure sockets using SSL. And the documentation is now completely in english (a part of it used to be in german). I've also managed to include a few cosmetic fixes as well (e.g. new splash screen).

NetCalendar-1.0.png
netcalendar-hist-comp.png

Version 1.1 may will include a nicer configuration dialog and some code refactoring. I've also to look if there is a ready Exchange connector available for Java. This way, I could use the NetCalendar application at work in order to see all my meetings (made with Outlook through an rdeskop session) on my FreeBSD desktop.

JSMSTrade v0.2 released

| 1 TrackBack

I just released the second (v0.2 to be more specific) version of JSMSTrade. JSMSTrade is a very small and handy client (programmed in Java) for SMSTRADE.de for sending SMS messages.

jsmstrade.buetow.org.png

The changes are as follows: The application is now using the english language and is not in german anymore. Also a small bugfix has been included: The input area will not freeze after typing more than 160 chars.

Enjoy ;)

Update: v0.3 has been released now too. This version only includes a major bugfix. Sadly, v0.2 was not able to deliver any SMS messages. This has been fixed by now :)

VS-Sim Deadlock Detection

I've played around with JConsole because I may need this at work in order to monitor running Java processes. At home I finaly found a deadlock in my diploma thesis (distributed systems simulator). I should have used JConsole earlier. It helps so much to auto detect deadlocks in threads!

Just start your Java App like this:

java -Dcom.sun.management.jmxremote -jar VS-Sim.jar

Afterwards run the JConsole with "jconsole" in the CLI and select the JVM of the Java application you want to monitor.

jconsole.png

In the "threads" tap you can watch all the threads including detect deadlocks. I found the following deadlock in VS-Sim, which seems to be a specific bug on multi core systems:

Name: Thread-2
State: BLOCKED on java.awt.Component$AWTTreeLock@1c98360 owned by:
AWT-EventQueue-0
Total blocked: 1 Total waited: 14,653

Stack trace:
java.awt.KeyboardFocusManager.clearMostRecentFocusOwner(KeyboardFocusManager.java:1777)
java.awt.Component.disable(Component.java:1286)
javax.swing.JComponent.disable(JComponent.java:3579)
java.awt.Component.enable(Component.java:1275)
java.awt.Component.setEnabled(Component.java:1238)
javax.swing.JComponent.setEnabled(JComponent.java:2647)
javax.swing.AbstractButton.setEnabled(AbstractButton.java:2064)
javax.swing.JMenuItem.setEnabled(JMenuItem.java:294)
simulator.VSSimulatorFrame.updateSimulatorMenu(Unknown Source)
- locked simulator.VSSimulatorFrame@a9ae05
simulator.VSSimulatorFrame.resetCurrentSimulator(Unknown Source)
simulator.VSSimulatorVisualization.finish(Unknown Source)
simulator.VSSimulatorVisualization.run(Unknown Source)
java.lang.Thread.run(Thread.java:619)


Name: AWT-EventQueue-0
State: BLOCKED on simulator.VSSimulatorFrame@a9ae05 owned by: Thread-2
Total blocked: 8 Total waited: 4,628

Stack trace:
java.awt.Frame.getExtendedState(Frame.java:744)
javax.swing.RepaintManager.addDirtyRegion0(RepaintManager.java:407)
javax.swing.RepaintManager.addDirtyRegion(RepaintManager.java:448)
javax.swing.JComponent.repaint(JComponent.java:4732)
java.awt.Component.repaint(Component.java:2970)
java.awt.Component.repaintParentIfNeeded(Component.java:2040)
java.awt.Component.reshape(Component.java:2028)
- locked java.awt.Component$AWTTreeLock@1c98360
javax.swing.JComponent.reshape(JComponent.java:4154)
javax.swing.JViewport.reshape(JViewport.java:854)
java.awt.Component.setBounds(Component.java:1972)
java.awt.Component.setBounds(Component.java:2109)
javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:869)
java.awt.Container.layout(Container.java:1432)
java.awt.Container.doLayout(Container.java:1421)
java.awt.Container.validateTree(Container.java:1519)
java.awt.Container.validate(Container.java:1491)
- locked java.awt.Component$AWTTreeLock@1c98360
javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:635)
javax.swing.SystemEventQueueUtilities
$ComponentWorkRequest.run(SystemEventQueueUtilities.java:127)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

VS-Simulator 1.0 released

| 2 Comments

I've released my diploma thesis (an simulator for distributed systems) under the GPL! At the moment only the website at vs-sim.buetow.org is in english and the simulator itself in german. The simulator is written in Java (requires Java 6). I'll add an english version of the simulator too within the next month! The simulator is good for universities in order to teach distributed systems.

vs-sync2.png

I recieved a grade of 1.0 (which is the best) for this diploma thesis :) I'll enjoy any feedback! Have a lot of fun :)

Chaosradio Express Podcast #090 Java

| 1 Comment

Auf chaosradio.ccc.de gibt es nun wieder ein neues Express Podcast (#090). Dieses Mal geht's über Java. Viel Spaß dabei :)

Elster Formular via Wine 1.0

| 2 Comments

First, it was a nice suprise that I was able to install and run the Elster Formular application (proprietary software for Windows of the german government for registering your taxes online) under Wine.

elster-wine.png

However, after trying to submit my taxes online, I recv. the following error dialog (and Elster on Windows XP works without problems):

elster-wine-error.png

Too bad :/ Well, but recently the german government also offers a Java Applet for submitting the tax infos. I think I'll have to give it a try, so I can avoid using my Windows XP installation :)

I don't know why Elster is not working on Wine. I remember about half an year ago, I was able to submit my tax infos once using Elster on Wine.

Java is now 100% Open Source

| 3 Comments
Cool! OpenJDK 1.6 now passes the Java Test Compatibility Kit and can now be recognized as a full working version of the Java SE implementation. Recently I do a lot of stuff in Java and my next future job may be heavily based on Java too :) Well I would like to do C/C++ or even Perl stuff too at least as much.

Pages

Powered by Movable Type 4.35-en

About this Archive

This page is an archive of recent entries in the Java category.

High Performance is the previous category.

Licenses is the next category.

Find recent content on the main index or look in the archives to find all content.