Objekt 2x deserialisieren, aber nur 1x im Heap haben?

T

tuxedo

Gast
Hallo zusammen,

ich grüble gerade über der Frage: "Was passiert in der JVM wenn ich ein Objekt 2x deserialisiere? Hab ich's dann 2x im Heap liegen?"

Hintergrund der Frage: Wenn man als Client mit RPC Techniken vom Server ein Object a der Klasse A und Object b der Klasse B anfordert, beide Objekte aber eine gemeinsame Referenz auf Object c der Klasse C haben: Hat man dann "c" doppelt im Heap liegen?

Soweit bin ich schon:

Ich deserialisiere ein und dasselbe Objekt mit zwei verschiedenen ObjectInputStreams. Ergebnis: hashCode und equals sagen: Die zwei Instanzen sind verschieden.

Wenn ich jetzt in der Klasse C sowohl hashCode() als auch equals() überschreibe, dann sind die zwei Instanzen auf einmal gleich (ist ja auch klar, da hashCode und equals an den Eigenschaften des Objekts hängen, und die sind nunmal gleich). Aber hab ich dann das Objekt auch tatsächlich nur 1x im Speicher? Ich nehme an dass "ja", oder ???:L

- Alex
 
S

SlaterB

Gast
sowas fragst du mit jahrelanger SIMON-Programmierung?

>Soweit bin ich schon:
> Ich deserialisiere ein und dasselbe Objekt mit zwei verschiedenen ObjectInputStreams. [ohne Überschreiben]

wieso testet du dann nicht auch mit überschriebenen Methoden,
mit == siehst du doch ob es ein Objekt ist oder zwei?!
System.identityHashcode() gibts auch noch

ich kann mir aber nur eine Antwort dazu vorstellen, aber naja, wem nützt meine Vermutung,

also bleibt:
- Hinweis auf Entrüstung dass du das nicht eh weißt
- Hinweis auf Testen (bravo, Erstposter ;) )
- Hinweis auf Enums, die werden schon nicht verdoppelt
 
Zuletzt bearbeitet von einem Moderator:
T

tuxedo

Gast
sowas fragst du mit jahrelanger SIMON-Programmierung?

... und deshalb bin ich automatisch der Spezialist was heap-Speicher und Objekt-Identität abgeht? Aha. Okay. Danke für die Blumen ;-)

>Soweit bin ich schon:
> Ich deserialisiere ein und dasselbe Objekt mit zwei verschiedenen ObjectInputStreams. [ohne Überschreiben]

wieso testet du dann nicht auch mit überschriebenen Methoden,
mit == siehst du doch ob es ein Objekt ist oder zwei?!
Stimmt, da gabs ja noch == ... Manchmal sieht man den Wald vor lauter Bäumen nicht mehr...

System.identityHashcode() gibts auch noch

Danke für den Tipp. Hab von der methode schon gehört, sie aber noch nicht eingesetzt. Aber danke dass du mich dran erinnerst.

ich kann mir aber nur eine Antwort dazu vorstellen, aber naja, wem nützt meine Vermutung,

also bleibt:
- Hinweis auf Entrüstung dass du das nicht eh weißt

Hey, irgendwann ist's immer das erste mal. Es wird dich jetzt noch mehr Entrüsten wenn ich dir sage dass auch ich nicht perfekt bin ;-)

- Hinweis auf Testen (bravo, Erstposter ;) )

Ja, mit == probier ich's gleich nochmal. Aber ich geh mal davon aus dass das meine Vermutung nur bestätigt (hoffe ich...).

- Hinweis auf Enums, die werden schon nicht verdoppelt
[/quote]

Hmm, wie soll mir hier bei dieser Prinzip-Frage Enum weiterhelfen?
 
S

SlaterB

Gast
du sollst kein Experte für Heap sein sondern bei ObjectStreams alles ausprobiert haben, allein schon im Vergleich zum Verhalten dann deiner API,
los, gib es zu ;)

wenn deine Klasse C ein Enum ist, kann sie eine ziemlich komplexe Klasse sein,
von A und B in verschiedenen Streams referenziert werden und wird dann als ein und dasselbe Objekt entpackt, weil es von Enums eben nur je eines gibt,
vielleicht hilft es dir, vielleicht nicht, in jedem Fall ein zum Thema passender interessanter Punkt ;)

'Singleton'
wobei ich gar nicht genau weiß, was passiert, wenn private Attribute zwischen den Übertragungen geändert wurden,
wäre auch auszuprobieren
 
Zuletzt bearbeitet von einem Moderator:
T

tuxedo

Gast
So, aktuelles Ergebnis:

Auch wenn man hashCode und equals überschreibt: Mit == sind die beiden, eigenltich identischen Objekte nicht gleich. Ergo: 2x im Heap

Zur Enum-Sache: Ach so, sorum meinst du das.. Hmm, wäre ne Idee und sollte funktionieren.

Singletons übertragen .. puuh, ist so auf den ersten Blick keine gute Idee. Wüsste auch spontan nicht warum man sowas machen sollte. Aber gut, irgend ein mehr oder weniger plausiblen Grund gibt's immer.

...sondern bei ObjectStreams alles ausprobiert haben, allein schon im Vergleich zum Verhalten dann deiner API,

Jein ... Klar macht's Sinn das alles auszuprobieren, aber nur dann wenn Bedarf und Zeit da ist. Und das ist eben jetzt erst der Fall. Aber auch nur zum Teil: Früher hab ich tatsächlich mit durchgängigen Streams agearbeitet. Da hat einem der ObjectStream unterstützt und Übertragungen gecached. Aber mit NIO gibt's keine Streams als solches mehr und die ObjectStream Objekte zum serialisieren und deserialisieren werden entsprechend neu erzeugt und können nix mehr cachen. Ist, abgesehen von NIO, bei RMI übrigens genauso: Da wird auch nix gecached. Die ObjectStreams werden alle entsprechend neu erzeugt.

Mal schauen ob ich da noch was optimieren kann.

- Alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
G Direkt in ein Objekt deserialisieren Allgemeine Java-Themen 5
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
T Objekt in Array packen Allgemeine Java-Themen 6
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
D Eigenen Objekt Pool Allgemeine Java-Themen 15
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 8
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
U Konstante in Objekt definieren Allgemeine Java-Themen 6
D this mit Objekt überschreiben Allgemeine Java-Themen 17
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
E Objekt erstellen Allgemeine Java-Themen 7
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
M Swing-Frontend abhängig von ausgewähltem Objekt Allgemeine Java-Themen 4
J Lebt das Objekt noch?? Allgemeine Java-Themen 12
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11
D Browser-Objekt erzeugen Allgemeine Java-Themen 8
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
A Iterationen einer XML-Datei in einem Objekt sichern Allgemeine Java-Themen 5
R Objekt zur Laufzeit zerstören? Allgemeine Java-Themen 12
hdi Frage zur Objekt Initialisierung Allgemeine Java-Themen 4
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10
T Serialisiertes Objekt über Socket nachladen Allgemeine Java-Themen 8

Ähnliche Java Themen


Oben