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