PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JVM: Hersteller herausfinden?



Lin728
27-07-2003, 15:35
Grüssi!

Gibt es unter Java eine Möglichkeit, per API herauszufinden, welche Version der JVM man gerade drunter läuft und welcher Hersteller sie gemacht hat?

Ich muss nämlich Applets zu der MS-JVM kompatibel machen, die ist aber so buggy (und imho noch viel langsamer als die 1.1.5 des Netscape 4.6) das ich spezielle (langsamere) Fixes integrieren muss, wenn das applet auf MS-JVM läuft...

Ich hab nix gefunden, weder system noch runtime noch sonst was. Aber sogar der JBuilder gibt im Info-Feld detailierte Infos über die verwendete JVM an...
Mfg

SeeksTheMoon
27-07-2003, 16:17
das geht über die Systemproperties:


/*
Diese Klasse spuckt alle System-Properties mit ihren Werten aus
*/
import java.util.*;
import java.io.*;
public class SysProp{
public static void main(String args[]){
Properties prop = System.getProperties();

prop.list(System.out);
//System.out.println(System.getProperty("file.encoding"));
}
}


Such Dir aus was Du davon brauchst. (z.B. java.version und java.vendor)

anda_skoa
27-07-2003, 17:10
java.vm.vendor und eventuell noch java.vm.version und java.runtime.version

Und die Klasse zum auflisten sieht so aus


import java.util.*;

public class SystemProperties
{
public static void main(String[] args) throws Exception
{
Properties props = System.getProperties();
Enumeration keys = props.propertyNames();
while(keys.hasMoreElements())
{
String key = (String) keys.nextElement();
String value = props.getProperty(key);
System.out.println(key + " = " + value);
}
}
}


Ciao,
_

peschmae
27-07-2003, 17:59
ohne jetzt die älteren Sun JREs ausprobiert zu haben (d.h. vor 1.3) musste ich (zu meinem leidwesen und meiner verärgerung :o ) feststellen, dass zumindest in einem Fall die M$ - JRE deutlich schneller ist als diejenige von Sun (jeweils die neuste)

es handelt sich hierbei um das geometrieprogramm javazul. Ein Teil des Tempounterschieds macht sicherlich die bei der M$-JRE fehlende Kantenglättung aus, was mich aber nicht weiter stört...

MfG Peschmä

Lin728
27-07-2003, 18:29
Erstmal Danke, Super das das so einfach klappt!!

Ich für meinen Teil habe nur mit der MS-JVM wirkliche Probleme gehabt. Ich habe eine Lightweight-Tabelle mit 700 lightweight Components (ganz einfache paint-methoden).
Die MS-JVM ist die einzige JVM bei der der Bildaufbau extrem träge ist und das Scollen die ganze Tabelle zum flackern bringt.
Außerdem kennt Sie keine Standardschriften, die Sun-JDK ab 1.1.6 kennt....

Mfg

SeeksTheMoon
27-07-2003, 18:59
@anda_skoa: hehe, ich war schneller :D

@ceisserer: na, bei 1.4.2 gibts aber trotzdem einen spürbaren Performance-Boost. Konsolenprogramme starten extrem schnell und wenn Du ein Programm wie Netbeans öffnest, dann flitzt es im Gegensatz zu 1.4.0 (und erst recht 1.3) ziemlich ab. (könnte natürlich noch schneller sein, ist schon klar und auch der von Dir genannte langsam - medium - schnell Effekt tritt auf).
Die MS-JVM ist aber nur für Java 1.1 zertifiziert und besitzt (im Falle von J++) "Features" die überhaupt nicht Java-kopatibel sind. Solche Programme laufen gar nicht unter Linux.
Lieber etwas langsamer als sich mit Kompatibilitätsmüll rumzuschlagen.
Wer auf Java-Performance steht und auch eine aktuelle Version braucht, der sollte sich die JVM von IBM installieren; die flitzt nämlich ALLEN anderen JVMs davon (deshalb ist der JBuilder auch so schnell: er hat die JVM von IBM dabei).
Die Werte im Caffeine Benchmark sind einfach herausragend: 5x schneller als Sun JVM; im Logic-Bereich sogar 10x so schnell. (für die JDKs 1.3)
Das Windows JDK 1.1 dient dabei als Meßlatte und liegt um den Faktor 100 bei IBM und den Faktor 10 hinter der Sun Implementierung zurück.
Allerdings sind die Image ud Dialog Routinen 5x so schnell wie die der beiden anderen (MS kennt sein Windows halt)

anda_skoa
27-07-2003, 20:02
Original geschrieben von ceisserer
Erstmal Danke, ich wäre da sicher nicht daufgekommen. Super das das so einfach klappt!!
Es tut mir leid, dass ich das Forum immer mit sonem sinnlosen Müll auffülle, aber Übung macht den Meister und ich bin ja noch jung ;-)


Ich finde keines falls, dass du Müll postest, sondern dass du meistens sehr interessante Fragen hast (von diesem switch Problem abgesehen :D )

Das Forum lebt durch aktive Entwickler, die auch Fragen stellen und wenn es hin und wieder keine Hardcore Fragen sind, haben auch andere Leute eine Chance mal was zu antworten.



Wegen der Performance:
Ich habe auch schon oft gehört, dass die MS-JVM teilweise empfindlich schneller sein sollen, als die alten JVMs von sun (1.1, 1.2, eventuell 1.3).


Die JVMs von Sun kannst du mehr oder weniger vergessen. Die machen sie absichtlich nicht so schnell wie sie könnten.
Das einzige was die interessiert ist die JVM auf Solaris. :(



Auch wenn Sun immer wieder vom Tuning berichtet, kann ich eigentlich seit 1.3 keine Performace-Verbesserungen mehr auf der Linux-Platform bemerken.


Linux mögen die sowie so nicht. Nicht ohne Grund ist das Blackdown Projekt zu beliebt.

Wenn man Java Performance auf Nicht-Solaris braucht, kann ich mich nur dem Tipp von SeeksTheMoon anschliessen, IBM.



Außerdem optimert der Sun-JIT meiner Meinung nach für GUIs ungeeignet (SWING).


Servermentalität, wie sie auch Redhat zeigt.
"Wir haben zwar ein Desktop fähiges Produkt, aber wir möchten von den Kunden als Serverprovider verstanden werden, also sehen wir zu, dass die Desktopversion gerade akzeptabel läuft"



Außerdem kennt Sie keine Standardschriften, die Sun-JDK ab 1.1.6 kennt....
(Weiß wer, welche Schriften die MS-JVM kennt, weil Serif und Monospaced spielt da nix..., dann hau ich nen Laufzeitswitch rein...)


Probier mal "Times" und "Fixed"

Ciao,
_

anda_skoa
27-07-2003, 20:04
Original geschrieben von SeeksTheMoon
@anda_skoa: hehe, ich war schneller :D


Ich weiß, aber ich fand deine Lösung nicht so komplett wie das was ich gepostet hätte/habe. :)

(Allerdings hab ich das Codesnippet jetzt sicher schon 5 Mal gepostet :rolleyes: )

Ciao,
_

SeeksTheMoon
27-07-2003, 22:01
Original geschrieben von anda_skoa
Ich weiß, aber ich fand deine Lösung nicht so komplett wie das was ich gepostet hätte/habe. :)
_

Ich seh da keinen Unterschied. Wo soll der sein?

Lin728
27-07-2003, 22:06
@SeeksTheMoon:

Der JBuilder sagt aber zu mir:


java.vm.info
mixed mode

java.vm.name
Java HotSpot(TM) Client VM

java.vm.vendor
Sun Microsystems Inc.

java.vm.version
1.4.1_02-b06


Außerdem scheint der 9er zu leaken, und zwar gewaltig. Ohne etwas anderes zu machen als editieren steigt die Heapbelegung von 12,2 auf über 70Mb. Auch ein "Force GC" kommt nicht unter 50Mb...

Mfg

anda_skoa
28-07-2003, 10:16
Original geschrieben von ceisserer
Außerdem scheint der 9er zu leaken, und zwar gewaltig. Ohne etwas anderes zu machen als editieren steigt die Heapbelegung von 12,2 auf über 70Mb. Auch ein "Force GC" kommt nicht unter 50Mb...


Könnte auch eine Optimierung sein.
Ein großes Speichersegment zu allozieren und dann selbst zu verwalten ist performanter als Speicher in kleineren Mengen vom System anzufordern.

70MB von wieviel Gesamtspeicher ist das?

Ciao,
_

anda_skoa
28-07-2003, 10:18
Original geschrieben von SeeksTheMoon
Ich seh da keinen Unterschied. Wo soll der sein?

Ohohoh, du hast recht!
Ich nehm alles zurück und behaupte das Gegenteil :D

Ciao,
_

SeeksTheMoon
28-07-2003, 12:06
der JBuilder verwendet die IBM JVM nur für sich selber soweit ich weiß. Die Anzeige bezieht sich dann auf Dein systemweit installiertes Java

Lin728
28-07-2003, 13:52
@SeeksTheMoon:

1.)Nein, auch das JDK auf dem der JBuilder gehostet ist, ist Sun:



ce@linux:~/Programme/JBuilder9/jdk1.4/bin> ./java -version
java version "1.4.1_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06)
Java HotSpot(TM) Client VM (build 1.4.1_02-b06, mixed mode)
.

2.) Ich spreche hier ja nicht von der Heap-Größe sondern von dem wirklich belegten Speicher. Und womit sollen sich bitte 50Mb Daten nur bei zwei Stunden editieren anhäufen. Auch wenn er alle saves im Speicher hält, kommt er nicht auf 50Mb....

3.) Warum sollte der JBuilder schnell sein? Bei mir ist der genauso lahm wie die ganzen anderen SWING programme.
Auch Eclipse ist lahm, zumindest in der GTK-Version. Motif fetzt, sieht aber dooof aus...

Mfg

SeeksTheMoon
28-07-2003, 15:42
hm, dann benutzt er es in der 9er nicht mehr. Früher hat er es auf jeden Fall verwendet.

anda_skoa
28-07-2003, 18:12
Original geschrieben von ceisserer

2.) Ich spreche hier ja nicht von der Heap-Größe sondern von dem wirklich belegten Speicher. Und womit sollen sich bitte 50Mb Daten nur bei zwei Stunden editieren anhäufen. Auch wenn er alle saves im Speicher hält, kommt er nicht auf 50Mb....


Was bedeutete "tatsäch belegter Speicher".
Eine intere Java Funktion, die angibt wieviel von Java Objekten belegt ist?
Oder wieviel der JVM Prozess Systemspeicher belegt?

Ciao,
_

Lin728
29-07-2003, 10:09
Seas!

Natürlich der Platz der von Java-Objecten belegt wird.....

Ich glaube ich probiere demnächst einmal Netbeans, weil mit Eclipse komm ich nicht gut zurecht. Ich will keine Pluginstation wo alles irgendwie zusammengestöpselt wird.
Ich will einfach eine gute Entwicklungsumgebung für Java, das ist alles ;-)

Mfg

peschmae
29-07-2003, 10:53
hmm,

also ich mag Eclipse ganz gut :)

Allerdings verlange ich nicht mehr als einen erweiterten Texteditor ;) (gui-editor wär natürlich auch toll, aber da gibts für SWT noch nichts wirklich gutes)

das Refactoring-Zeugs find ich auch ganz nett

allerdings mochte ich die IDE zugegebenermassen anfangs auch nicht - aber ich hab mich dran gewöhnt :cool:

MfG Peschmä