Newsgroup Archiv - Beiträge

auf www.Bastie.de

Datenbankzugriff korrekt organisieren

Frager: Dieter v. Holten vom Sonntag, 11. Februar 2001
hallo leute,
vor langer zeit hab ich mal in einem Performance-tip (weiss der himmel wo) gelesen, dass serialisieren schneller geht, wenn ein serialversionUID explizit vorhanden ist. wenn keiner vorhanden sei, wuerde zur Laufzeit einer berechnet - stand dort.
Frage: fact or fiction ?
danke erstmal
dvh

1. Antwort: Hans Both vom Sonntag, 11. Februar 2001
fact.
Und: Java verrechnet sich, z.B. ändert sich die SID eines Vectors nicht, wenn man nur wenige Elemente ändert (das Array nicht überkopiert wird), was bei Object-Streams dazu führt, das der Vector nicht mehrfach übertragen wird, wenn man ihn mehrfach sendet. Der Inhalt ist auf Empfängerseite auf jeden Fall fast immer gleich (außer wenn ein CapacityIncrement (s. Vector) erreicht wird).
Eigene SIDs sind immer gut.
Hans.
1.1. Antwort: [...]

1.1.1 Antwort: [...]

1.1.1.1 Antwort: [...]

1.1.2 Antwort: Christian Wederhake vom Montag, 12. Februar 2001
Da bist Du Dir sicher?
Wirklich?
Die SID ist eine Versionsinformation der *Klasse*, _nicht_ deren Inhaltes. Also IMO berechnet sich der Wert der SID aus der Klassen- und den Membersignaturen, womit die SID eines Vektors IMO *immer* gleich bleibt, voellig egal, welchen _Inhalt_ der Vektor traegt. Bei Serialisieren wird der komplette Sub-Graph traversiert, und dass IMO jedesmal bei Aufruf einer writeObject-Methode. Was nun natuerlich passieren kann, ist folgendes:
Vector v = new Vector();
v.add("1");
Ein Aufruf der Methode writeObject eines OOS 'out' uebertraegt nun einmal den Vektor 'v' sowie den String "1".
Nun passiert folgendes:
v.add("2");
ein weiterer Aufruf von writeObject desselben OOS 'out' uebertraegt nun einen Referenzidentifikator von 'v', da der Vektor ja nun schon geschickt wurde, sowie den String "2". Auf der Empfaengerseite aendert sich der Vektor allerdings nicht. Um dieses Problem zu umgehen kann man entweder die Methode "reset" benutzen, welche den Zustand "bereits uebertragen" von _allen_ Objekten loescht, oder sich (nur manchmal wirklich sinnvoll), eine eigene Subklasse von OOS basteln, welche explizites reseten einzelner Objekte bietet.
Nur hat diese Problematik IMO nichts mit der SID zu tun.
>Eigene SIDs sind immer gut.
Zu pauschal.
Eine eigene SID wird in einer Klasse nur dann benotigt, wenn man entweder das letzte Quant Speed braucht, oder man eine Klasse hat, welche sich im Laufe der Zeit aendert, und somit auch die berechnete SID aendern wuerde. Ansonsten hat man nur einige Byte Plattenplatz (und am Ende vielleicht auch DL-Bandbreite :-) verschwendet, und hat keine Fehelerkontrolle mahr, ob zwie Klassen ueberhaupt noch kompaktibel sind.
Ciao
Chris

zur Übersicht

all rights reserved © Bastie - Sebastian Ritter @: w³: http://www.Bastie.de
Diese Seite ist Bestandteil der Internetpräsenz unter http://www.Bastie.de


Java Cobol Software Resourcen Service Links Über mich Zum Gästebuch Forum