Dienstag, 13. Januar 2009

Neuer Blog

Bitte schaut unter http://zbtn7.blogspot.com, falls ihr neue Infos haben wollt ;)


Dienstag, 28. Oktober 2008

JTable Performance

Mich hat schon eine Zeit lang gewundert, warum Programme, die ich geschrieben habe und eine JTable benutzen, so viel CPU brauchen. Naja, inzwischen hab ich mal ein wenig rumgefrickelt und rausgefunden, dass diese Tabelle unter gewissen Umständen öfters geupdated wird, als das menschliche Auge überhaupt mitbekommt (> 50Hz).

Also hab ich einen kleinen Hack eingeführt, der wie folgt aussieht:


public class MyJTable extends JTable {

...
private long lastCall = System.currentTimeMillis();

public MyJTable () {
super();

new Thread() {
public void run() {
while(true) {
MyJTable.this.repaint();
try {Thread.sleep(20);}catch (Exception e) {}
}
}
}.start();
}

@Override
public void repaint () {
long curr = System.currentTimeMillis();
if (curr - LASTCALL > 20) {
super.repaint();
LASTCALL = curr;
}
}

Stranges JAVA GC-Verhalten

Also manchmal schüttel ich echt den Kopf...

Mir wurde immer beigebracht, ein großer Vorteil von Java sei, dass man sich nicht um Speicherverwaltung kümmern brauch. Nun, dem scheint nicht ganz so zu sein. Ich habe das Problem, dass ich viel Daten in einer Liste speichere, diese werden ab einem bestimmten Zeitpunkt nicht mehr benötigt und ich kann sie löschen. Leider gibt Java den dazu alloziierten Speicher nicht frei und rennt lieber in einer OOMemory Exception :(

Nach ein wenig rumprobieren, hier die Lösung: System.gc() genau 4x aufrufen! Fragt mich bloß net, warum genau 4x, aber anscheinend scheint das des Rätsels Lösung zu sein :)

Hier mal ein Beispielcode:

import java.util.*;
public class NewTest {

public static void main(String[] args) {
System.out.println("before doing anything! " + Runtime.getRuntime().totalMemory());
Bla b = new NewTest().new Bla();

System.out.println("after instantiating class! " + Runtime.getRuntime().totalMemory());
b.allocateALotOfMemory();
System.out.println("after allocating a lot of memory! " + Runtime.getRuntime().totalMemory());

// I want to free the memory, allocated by the list!
b.testList = b.testList.subList(0, 1);
b.testList.clear();
b.testList = new ArrayList(1);
b.testList.retainAll(new ArrayList(1));
b.testList = null;
// what else should I do?!?! :)

System.out.println("nothing happened?!?! " + Runtime.getRuntime().totalMemory());

for (int i = 1; i <= 4; i++) {
System.out.println("before " + i + "th run of GC " + Runtime.getRuntime().totalMemory());
System.gc();
System.out.println("after " + i + "th run of GC " + Runtime.getRuntime().totalMemory());
}
}

private class Bla {
public List testList;
public Bla () {
testList = new ArrayList(1);
}
public void allocateALotOfMemory() {
for (int i = 0; i < 1000; i++) {
String tmp = "";
for (int j = 0; j < i; j++) tmp += "" + j;
testList.add(tmp);
}
}
}
}


Output:

before doing anything! 2031616
after instantiating class! 2031616
after allocating a lot of memory! 4591616
nothing happened?!?! 4591616
before 1th run of GC 4591616
after 1th run of GC 4591616
before 2th run of GC 4591616
after 2th run of GC 4337664
before 3th run of GC 4337664
after 3th run of GC 3416064
before 4th run of GC 3416064
after 4th run of GC 2035712


PS: Wenn jemand eine Idee hat, warum das net klappt oder wie man es besser machen kann, immer her damit :)

Donnerstag, 25. September 2008

Lustige Mac-Terminal-Kommandos

Inspiriert bei: Link

Kam das hier bei raus (in Terminal eingeben):

say -v Cellos "Beatchhh"

*haha*

Dienstag, 27. Mai 2008

Endlich der Beweis!

Mir kam das gleich alles so seltsam vor, aber nun ist hier endlich der Beweis, dass das alles nur Lügen sind :)

Montag, 26. Mai 2008

IUseThis

Hier ist mal meine Liste von Applikationen, die ich benutze.

IUsethis.com ist eine sehr schön gemachte Seite. Einfach imakeprofile runterladen und ausführen, die Liste wird dann automatisch erstellt.

http://osx.iusethis.com/feed/neogermi

Bildschirmtastatur MAC OSX

Ich bin wirklich vollauf zufrieden mit meinem Macbook, nur die Umstellung auf die neuen Tastenkombinationen machen mir noch ein paar Schwierigkeiten...

"Apfel"+Q zu drücken, weil man gerne ein "@" Symbol hätte ist net wirklich gut, da sich mit dieser Tastenkombination das aktuelle Programm schließt ("alt"+L ist die richtige Lösung)

Nervig wird es, wenn man Symbole sucht, die gar net beschriftet sind, aber für Informatiker unabdingbar wie z.B:

[,] -> "alt" + 5 bzw 6
| -> "alt" + 7
{,} -> "alt" + 8 bzw 9
~ -> "alt" + N

Als gutes Hilfsmittel hat sich die Bildschirmtastatur gezeigt, die automatisch auch ihr Layout ändert, wenn eine der Steuerungstasten gedrückt wurde. Sie ist ein wenig versteckt, kann aber wie folgt eingeschaltet werden:

Systemeinstellungen -> Landeseinstellungen -> Tastaturmenü -> "Tastaturübersicht" und "Tastaturmenü in der Menüleiste anzeigen" auswählen.

Nun in der Menüleiste oben rechts auf die Flagge klicken und "Tastaturübersicht einblenden" anklicken. Fertig :-)

Mittwoch, 21. Mai 2008

MacBook

Yeah!! Endlich ist es da :)

Also von vorne... Hab ein MacBook bekommen. *freu*

meine ersten eindrücke übertreffen bei weitem das, was ich mir vorgestellt habe...
"It just works" stimmt tatsächlich ;)

kleine info schon vorab, wer nen google-mail account hat und den mit ical syncen will, einfach

http://spanningsync.com besuchen und die dortige software benutzen.

Montag, 28. April 2008

Masterarbeit - abgegeben

Mission accomplished ;-)

Sonntag, 2. März 2008

Ausblick



Hier mal ein kleiner Vorgeschmack auf die neue Wohnung, nämlich der Ausblick aus meinem Zimmer bei Nacht... Hammer..