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

Montag, 25. Februar 2008

Masterarbeit

Wie manche von euch bereits wissen, bin ich ja an der Masterarbeit am schreiben.

Kleiner Zwischenstand... Bin bald fertig ;-)

Noch Kapitel 6 (Ergebnisse) und 7 (Zusammenfassung + Ausblick) und das war's.

Musikauswahl

Ich hab mir dann auch mal nach ewiger Zeit mal n Utube Account zugelegt.

Hier ist mal ne kleine Musikauswahl in den Kategorien "chillig" und "cool" die ich mir so zusammengestellt habe. Viel Spaß beim durchhören. Die Listen werden hoffenltich mit der Zeit anwachsten.

chil

cool

Mittwoch, 20. Februar 2008

Freitag, 11. Januar 2008

Lustiges Game

Was zum Knobeln und Klicken :-)

http://www.chilloutzone.de/files/08011103.html

Donnerstag, 10. Januar 2008

Laufen

Soo. Heute gleiche Strecke wie letztes Mal, dafür ohne Gehen zwischendurch und innerhalb von 20 min *freu*


Größere Kartenansicht

Dienstag, 8. Januar 2008

Voting

Wie manche es bereits gemerkt haben.

Auf meinem Blog habe ich oben rechts eine kleine Umfrage gestartet und suche noch gaanz viele die da voten ;-)

In dem SInne.. voten ;-)

Samstag, 5. Januar 2008

eine neue Dusch-Erfahrung

Nach der unten beschriebenen Laufaktion wollte ich natürlich auch duschen gehen, wie sich das gehört. Nun, wie es das Schicksal so wollte.. Der Boiler ist am A...

Nun, klein Germi fühlt mit der Hand das Wasser und denkt sich:
"Och... so schlimm wirds schon net sein..."

Klein Germi (aufgeheizt durchs Laufen) geht also unter die Dusche, fängt mal vorsichtig mit den Beinen an und denkt immer noch, dass es zwar kalt ist, aber net wirklich unangenehm...

Nun, seit heute weiß klein Germi, dass es einen Unterschied zwischen kaltem Wasser, welches im Boiler war und praktisch Zimmertemperatur hat und kaltem Wasser, welches direkt aus der Leitung kommt... :-) Naja, genau dieses letztere Wasser hat zu dem Zeitpunkt eingesetzt als klein Germi gerade komplett eingeseift war...

Nun... klein Germi will natürlich net das ganze Seifenzeug auf der Haut lassen und überwindet sich. Beim anschließenden Abtrocknen direkt die nächste Erfahrung... Haut wird ja normalerweise durch Wärme rot... Sie kann es auch durch Kälte werden, ist dann aber net mehr ganz so angenehm ;-)

Naja, ich werd morgen mal dem Hausi n Reparaturzettel einwerfen und öfters ins Fitnesstudio duschen gehn ;-)

Laufen

Grundsätzlich nach Weihnachten fängt meine Laufsaison ja immer an, warum, na wegen dem leckeren Weihnachtsessen, das man daheim bekommt und das so lecker ist, dass man viel zu viel ist :-)

Nun, ich versuche mal hier relativ regelmäßig meine Laufstrecken festzuhalten um evtl Erfolge zu sehen. Falls nun keine Laufeinträge hierhin kommen, kann das zwei Gründe haben

a) ich hab die Laufsaison wieder beendet aus Gründen die ich in dem Moment für extrem sinnvoll halte, im Nachhinein jedoch Blödsinn sind

b) ich habs verschusselt die hier einzutragen ;-)

In diesem Sinne, hier meine heutige Laufstrecke, für die ich 30 min gebraucht hab mit 5 min Gehpause (Länge insgesamt: 3,6 km, Quelle: map24.de)

update: Ich habe das etwas hässliche Bild durch eine schönes Overlay von Google-Maps ersetzt :-)



Größere Kartenansicht

Donnerstag, 3. Januar 2008

Meine Abhängigkeit zu Apple-Produkten

Ich glaub ich muss noch ein wenig an meiner Abhängigkeit arbeiten ;-)

16%How Addicted to Apple Are You?