Resourcenüberwachung

was weder zu YaCy noch zum Thema Suchmaschinen gehört

Re: Resourcenüberwachung

Beitragvon Lotus » Sa Jun 21, 2008 11:22 am

Scheint wohl daran gelegen zu haben, dass ich kein L hinter die Werte geschrieben habe. Kann das sein?
Nun ist es wie es soll:
Code: Alles auswählen
I 2008/06/21 12:20:50 DISK USAGE logpoint 3 input needed 13 tries
I 2008/06/21 12:20:50 DISK USAGE logpoint 4 output done of 'input'
I 2008/06/21 12:20:50 DISK USAGE logpoint 6 getOutput() of 'input' requested
W 2008/06/21 12:20:50 RESOURCE OBSERVER Volume C: free space is too low
I 2008/06/21 12:20:52 DISK USAGE logpoint 3 error needed 1000 tries
I 2008/06/21 12:20:52 DISK USAGE logpoint 4 output done of 'error'
Lotus
 
Beiträge: 1699
Registriert: Mi Jun 27, 2007 3:33 pm
Wohnort: Hamburg

Re: Resourcenüberwachung

Beitragvon datengrab » Sa Jun 21, 2008 11:35 am

Über diesen Sch... bin ich auch schon gestolpert und fast dran verzweifelt. Zum einen ist es das fehlende L zum anderen mag Java berechnete Konstanten nicht. Die Logik dahinter kann mir ja evtl. jemand erklären, der ein bisschen mehr von Java kennt als ich...

Nachtrag: Aber schön, das es trotzdem funktioniert :)
datengrab
 
Beiträge: 366
Registriert: Sa Aug 25, 2007 7:22 pm

Re: Resourcenüberwachung

Beitragvon Lotus » Sa Jun 21, 2008 1:36 pm

datengrab hat geschrieben:zum anderen mag Java berechnete Konstanten nicht.

Da ich das nicht glauben konnte habe ich einmal in der class-Datei nachgesehen. Dort steht der Wert erwartungsgemäß ausgerechnet drin. Einfach einmal in Eclipse den Open File... Dialog benutzen. :) Wäre auch ziemlich unschön, wenn der Compiler in Version 1.5 den Code dementsprechend noch nicht optimiert. Ich habe die leichter lesbare Version übrigens in r4948 eingecheckt.
Lotus
 
Beiträge: 1699
Registriert: Mi Jun 27, 2007 3:33 pm
Wohnort: Hamburg

Re: Resourcenüberwachung

Beitragvon datengrab » Sa Jun 21, 2008 3:58 pm

Achtung voll Offtopic

Mal ein bisschen was zur "Intelligenz" von Java oder zu mindest dem Compiler von IBM:
Code: Alles auswählen
class foo {
    private static long UEBERLAUF = 65536 * 65536;
    public static void main(String[] args) {
        System.out.println(UEBERLAUF);
    }
}

Kompiliert ohne Warnung oder Fehler. Ergebniss:
det@datengrab:~/Desktop$ java foo
0

65536 * 65536 = 2^32. Da dieser Wert anscheinend vorher in Integers berechnet wird, bevor es UEBERLAUF zugewiesen wird kommt es hier zu einen Überlauf, da ein Integer bis 2^31-1 definiert ist und das 32. Bit fürs Vorzeichen reserviert ist. Wenn der Compiler also halbwegs pfiffig wäre, würde er für die Zwischenberechnung schon ein Long nehmen, da das ja auch der Endwert ist, oder er müsste hier eine Fehlermeldung schmeißen.

Code: Alles auswählen
class foo {
    private static long UEBERLAUF = 4294967296;
    public static void main(String[] args) {
        System.out.println(UEBERLAUF);
    }
}
Schmeißt folgende Fehlermeldung:

det@datengrab:~/Desktop$ javac foo.java
foo.java:2: integer number too large: 4294967296
private static long UEBERLAUF = 4294967296;
^
1 error

Und das ist dann für mich fast noch unverständlicher. Hier wird einem Long eine Konstante zugewiesen (übrigens der gleiche Wert wie oben). Wieso muss ich dem Compiler sagen, dass dieser Wert ein Long ist? Das sind so Kleinigkeiten die verhindern werden, das Java zu meiner Lieblingssprache wird :twisted:
datengrab
 
Beiträge: 366
Registriert: Sa Aug 25, 2007 7:22 pm

Re: Resourcenüberwachung

Beitragvon DanielR » So Jun 22, 2008 12:38 pm

datengrab hat geschrieben:Wieso muss ich dem Compiler sagen, dass dieser Wert ein Long ist?

Weil Java streng typisiert ist! Du musst bei jedem Wert den Typ angeben und Zahlen sind halt Integers. Allerdings nervt es mich auch immer, wenn ich mit Longs arbeite :( Übrigens reicht ein 123 * 2L aus um das Ergebnis als Long zu bekommen. Ähnliches Problem gibt es ja mit doubles:
Code: Alles auswählen
5 / 3 => 1 (int)
aber
Code: Alles auswählen
5 / 3.0 => 1.6666666666666667   (double)
DanielR
 
Beiträge: 395
Registriert: Di Feb 12, 2008 2:22 pm

Re: Resourcenüberwachung

Beitragvon datengrab » So Jun 22, 2008 1:15 pm

DanielR hat geschrieben:Du musst bei jedem Wert den Typ angeben und Zahlen sind halt Integers.

Das müßte heißen "Du musst bei jedem Wert den Typ angeben außer bei Zahlen, die sind halt Integers" ;) . An sonsten müßten Integers als 12345I geschrieben werden. Das mit den doubles ist hingegen Verständlich, da es sich um ein anderes Zahlensystem handelt.

Ich habe mir mal den Spass gemacht und mir einen Scanner für die Sourcen geschrieben, der nach möglichen Schwachstellen hierzu sucht. Das einzige was ich gefunden habe, was krittisch werden könnte war in source/de/anomic/kelondro/kelondroEcoTable.java
Code: Alles auswählen
long neededRAM4index = 2 * 1024 * 1024 + records * (rowdef.primaryKeyLength + 4) * 3 / 2;

rowdef bezieht sich auf eine kelondroEcoTable. Wenn derren primaryKey ein Hash mit einer Länge von 12 Byte ist (was ich nur vermute, da ich den code soweit noch nicht durchblickt habe) kommt es bei ~89 M records zum Überlauf.

Ps: könnte mal jemand diese ganze Typgeschichte abtrennen und nach Off-Topic verschieben. Danke!
datengrab
 
Beiträge: 366
Registriert: Sa Aug 25, 2007 7:22 pm

Re: Resourcenüberwachung

Beitragvon lulabad » So Jun 22, 2008 1:59 pm

datengrab hat geschrieben:Ps: könnte mal jemand diese ganze Typgeschichte abtrennen und nach Off-Topic verschieben. Danke!

done
lulabad
 
Beiträge: 709
Registriert: Mi Jun 27, 2007 11:40 am
Wohnort: Im Herzen Bayerns


Zurück zu Off-Topic

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast