"Object o = new Object()" vs. "new Object()&q

Status
Nicht offen für weitere Antworten.
T

tuxedo

Gast
Habe ne kleine Performance-Frage:

Mir gehts um die kleinste Millisekunde (bzgl. meines SIMON Projekts).

Ich habe an vielen Stellen in Schleifen sowas hier (nur exemplarisch):

Code:
Object o = new Object(abc);
objectX.methodX(arg1, arg2, o);

"o" verwende ich eigentlich nur in "methodX", später nicht mehr.
Aus "lesbarkeitsgründen" hab ich sowas hier nicht gemacht:

Code:
objectX.methodX(arg1, arg2, new Object(abc));

Mir ist klar, dass ich so oder so "new" machen muss und damit Speicher für das Objekt allokiert wird. Aber was mir noch nicht ganz klar ist, ob es "sparender" ist das Objekt wie im zweiten Code-Schnipsel zu verwenden.

MIr gehts hier wirklich um jede noch so kleine Zeitersparnis. Muss vielleicht dazusagen:

Mein Projekt SIMON kann im lokalen Netz eine Methode auf der Remote-Seite binnen 0.5ms ausführen. Ziel ist es aber das ganze auf 0.15ms zu reduzieren (RMI ist so schnell...). Von daher geht's wirklich um jedes Quäntchen Geschwindigkeit. Werde sicher noch 1000 andere Ecken haben an denen ich was verbessern kann. Aber irgendwo muss ich eben anfangen.

- Alex
 

tfa

Top Contributor
Ich hab mal folgendes ausprobiert:
Code:
    public void m(Integer i) {
        System.out.println(i);
    }

    public void x1() {
        Integer i = new Integer(1);
        m(i);
    }

    public void x2() {
        m(new Integer(1));
    }

Der Bytecode, den javac daraus macht, sieht so aus:
// Method descriptor #26 ()V
// Stack: 3, Locals: 2
public void x1();
0 new java.lang.Integer [20]
3 dup
4 iconst_1
5 invokespecial java.lang.Integer(int) [21]
8 astore_1
9 aload_0 [this]
10 aload_1
11 invokevirtual server.DumpServerInfo.m(java.lang.Integer) : void [22]
14 return
Line numbers:
[pc: 0, line: 45]
[pc: 9, line: 46]
[pc: 14, line: 47]
Local variable table:
[pc: 0, pc: 15] local: this index: 0 type: server.DumpServerInfo
[pc: 9, pc: 15] local: i index: 1 type: java.lang.Integer

// Method descriptor #26 ()V
// Stack: 4, Locals: 1
public void x2();
0 aload_0 [this]
1 new java.lang.Integer [20]
4 dup
5 iconst_1
6 invokespecial java.lang.Integer(int) [21]
9 invokevirtual server.DumpServerInfo.m(java.lang.Integer) : void [22]
12 return
Line numbers:
[pc: 0, line: 50]
[pc: 12, line: 51]
Local variable table:
[pc: 0, pc: 13] local: this index: 0 type: server.DumpServerInfo


Das wird also vom Compiler (Java 1.5) nicht optimiert, in der zweiten Version könnte es
also minimalst schneller sein. Was der JIT daraus macht, weiß ich nicht. Das müsste man testen.
 
T

tuxedo

Gast
Habs mal eingebaut. Hab mit meinem Profiler aber mal weiter gespielt und festgestellt, dass die Hauptzeit für das senden der Daten drauf geht:

Count Time Pct Location
===== ==== === ========
1 31405,9 100,0 de.root1.simon.Registry:run
1 28794,0 99,9 de.root1.simon.Endpoint:run
17000 3267,1 83,1 de.root1.simon.ProcessMethodInvocationRunnable:sendData
17000 263,1 6,7 de.root1.simon.ProcessMethodInvocationRunnable:processMethodInvocation
17000 156,7 4,0 de.root1.simon.ProcessMethodInvocationRunnable:run
17001 57,3 1,5 de.root1.simon.LookupTable:getBinding
17000 57,0 1,5 server.ServerInterfaceImpl:benchmark
17000 52,9 1,3 de.root1.simon.Endpoint:getObjectOutputStream
17000 52,5 1,3 de.root1.simon.Endpoint:getLookupTable
1 21,2 0,1 de.root1.simon.Endpoint:processLookup
1 15,3 85,4 server.Server:main
17000 14,8 0,1 de.root1.simon.ProcessMethodInvocationRunnable:<init>
1 8,8 0,0 de.root1.simon.Endpoint:<init>
1 1,6 9,1 de.root1.simon.Simon:createRegistry
1 0,8 4,3 de.root1.simon.LookupTable:putBinding
1 0,1 0,0 de.root1.simon.Endpoint:wakeAllMonitors
1 0,1 0,4 server.ServerInterfaceImpl:<init>
1 0,1 0,3 de.root1.simon.Registry:<init>
1 0,0 0,2 de.root1.simon.LookupTable:<init>
1 0,0 0,0 de.root1.simon.SimonRemoteException:<init>
1 0,0 0,2 de.root1.simon.Simon:bind

Getestet hab ich ein Benchmark das unterschiedliche Datenmengen transferiert. Deshalb die 17.000 Aufrufe. SendData sieht wie folgt aus:

Code:
private void sendData(Object result, ObjectOutputStream oos)
			throws IOException {
		oos.write(Statics.INVOCATION_RETURN_PACKET);
		oos.writeInt(requestId);
		oos.writeObject(result);
		oos.flush();
	}

Denke der ObjectOutputStream ist nicht der schnellste, bzw. das senden von ganzen Objekten ist nicht so prickelnd. Werde mir da mal was anderes einfallen lassen müssen.

- Alex
 

Angel4585

Bekanntes Mitglied
Also bei SocketChannel mit nem ByteArrayOutputStream in diesen pack ich über deinen oos das Objekt, gibt mir ein ByteBuffer aus, kann davor direkt das Int hängen für die Länge und dann alles in einem verschicken
 

lotus

Mitglied
Wenn man eine Variable wirklich nur einmal verwendet und nicht ändert,kann man soweit ich weiß "final" verwenden.
Also:

Code:
bla(new Object(abc));

ist das selbe wie

Code:
final Object o = new Object(abc);
bla(o);

Ist halt nur besser lesbar. :wink:

Würde das auch gerne mal genauer wissen...Wie kann man denn den Bytecode anzeigen lassen? ???:L
 
T

tuxedo

Gast
Also ich hab jetzt wo's ging "final" eingesetzt. Gebracht hats aber nix.

Muss irgendwo noch ein Speicherleck haben. Mal schauen wie ich das mit dem Profiler rausbekomme.

- Alex
 

sliwalker

Top Contributor
Hoi,

zu den Performances der Streams kann ich nicht viel sagen, aber das mit dem anonymen Objekt dürfte Dir dahingehend Zeit "sparen", als das keine Variable im Tabel angelegt wird und folglich auch nicht darauf zugegriffen werden muss, was Dir zumindest die Reaktionszeit des RAMs spart.

greetz
SLi
 
G

Guest

Gast
Weiß jemand, ob es für NetBeans ein Plugin für javap gibt oder ob das vielleicht standardmäßig integriert ist?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
MoxxiManagarm Mapping into existing object Allgemeine Java-Themen 15
coolian Swing erstellt fillreckt immmer ein neues object Allgemeine Java-Themen 13
N Wo ist Object.class ? Allgemeine Java-Themen 0
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
N Gibt es etwas allgemeineres as Object? Allgemeine Java-Themen 16
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
G REST- Object darstellung Allgemeine Java-Themen 6
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
O Socket Object wird scheinbar falsch empfangen Allgemeine Java-Themen 6
N Klasse/Object Eigenaufruf Allgemeine Java-Themen 5
G JNI Shared Object Allgemeine Java-Themen 10
B Variable class in java.lang.Object Allgemeine Java-Themen 11
S Klassen Zuorgnung Object-char Allgemeine Java-Themen 2
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
A Input/Output Serialisierung und Object.hashCode() Allgemeine Java-Themen 3
M Jaxb und JPA: A cycle is detected in the object graph Allgemeine Java-Themen 5
H double dispatch und equals(Object) Allgemeine Java-Themen 6
J Datentypen Problem mit Date-Object Allgemeine Java-Themen 2
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
DEvent embedded Object Database in Text Format Allgemeine Java-Themen 5
J Casting Problem Object, Double und String Allgemeine Java-Themen 3
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
P Tree Object structure Allgemeine Java-Themen 19
G Object mit clone kopieren Allgemeine Java-Themen 21
J merkwürdig: Object Allgemeine Java-Themen 6
woezelmann Object nach Deserialisierung nicht mehr gleich Allgemeine Java-Themen 13
Iron Monkey Object in Datei effizienter lesen / schreiben Allgemeine Java-Themen 13
L Object = null? Allgemeine Java-Themen 16
dayaftereh Serializable und Object In/Out Stream Allgemeine Java-Themen 2
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
N serialize deserialize java object über string Allgemeine Java-Themen 8
N getName() of reflection Object Allgemeine Java-Themen 4
B Probelm mit File Object Allgemeine Java-Themen 6
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
S Liste Object Löschen Allgemeine Java-Themen 7
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
M ArrayList<Object[]> und toArray() Allgemeine Java-Themen 5
Daniel_L LinkedList vom Typ Object-Array? Allgemeine Java-Themen 4
B Warum return type Object ? Allgemeine Java-Themen 4
D Generisches Object erstellen Allgemeine Java-Themen 2
M Databinding von Object zu properties-Datei Allgemeine Java-Themen 10
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
A NullPointer bei konvertierung von byteArr --> Object Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
reibi Object clonen spezial Allgemeine Java-Themen 8
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
X cannot convert from Object[] to Integer[] Allgemeine Java-Themen 2
G JSON Object auslesen Allgemeine Java-Themen 1
T cast Object to Double[] Allgemeine Java-Themen 2
G Object. Wrapper Allgemeine Java-Themen 12
V Object durchsuchen Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
T Object -> byte[] Allgemeine Java-Themen 5
M Implementation von Zugriffen auf Object[index] in der JVM Allgemeine Java-Themen 9
T Klasse => Primitiv ? Object instanceof Klasse Allgemeine Java-Themen 2
B mit methode ein object zurückgeben. Allgemeine Java-Themen 5
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
P Typ Object in socket umwandeln Allgemeine Java-Themen 4
G Object cast via Reflection Allgemeine Java-Themen 8
Zed JList Object einfügen und Text anzeigen Allgemeine Java-Themen 3
MQue Object in Integer umwandeln Allgemeine Java-Themen 3
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
T double to object Allgemeine Java-Themen 3
S File Object zu Directory machen ? Allgemeine Java-Themen 9
V Brauche dringend Hilfe. Object-handling Allgemeine Java-Themen 4
N Warning "The Cast from Object to" Allgemeine Java-Themen 9
K Threads und ein übergeordnetes Object Allgemeine Java-Themen 7
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
W Object -> isPrimitiv? Allgemeine Java-Themen 7
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
S Object nach Integer umwandeln Allgemeine Java-Themen 13
R object zu array casten. Allgemeine Java-Themen 2
N Map Object Allgemeine Java-Themen 13
G Eine C/C++ Referenz in einem Java Object speichern Allgemeine Java-Themen 5
N Ermitteln welchen Typ ein "Object"-Objekt enthält Allgemeine Java-Themen 11
K Cast ohne neues Object zu erzeugen Allgemeine Java-Themen 12
D Object in int casten Allgemeine Java-Themen 7
N Object-Array mit Comparator absteigend sortieren? Allgemeine Java-Themen 10
D Object to Long casting Allgemeine Java-Themen 9
G Object mit static Feldern speichern Allgemeine Java-Themen 9
D vergleichbare Object-Objekte generisch vergleichen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben