Gibt es etwas allgemeineres as Object?

N

neoexpert

Gast
Hallo. Mein erstes Thema in dem Forum.
Jede Klasse in Java erbt ja von Object. Das heisst, dass die typischen Object-Methoden wie z.B. equals, hashCode und viele andere auch vererbt werden. Und das finde ich manchmal unpraktisch, weil man diese öfter gar nicht benötigt. Hat Object eig. neben den Methoden auch Variablen? Wenn so, dann wird sicherlich für diese auch unnötig Speicher belegt.
Was denkt ihr darüber?
 
X

Xyz1

Gast
Es gibt keine allgemeinere Klasse als Object. Und Object hat ein paar (Klassen-)Variablen:
Java:
    private static native void registerNatives();
    static {
        registerNatives();
    }
equals()+hashCode() soll ja nur "bei Bedarf" überschrieben werden.
 

Flown

Administrator
Mitarbeiter
Du kannst dir ja ansehen, was Object alles drinnen hat: HIER.
Was verstehst du unter unnötiger Speicher? Sobald du ein Objekt anlegst, wird ein Speicher allokiert und die Felder auch.
 

Thallius

Top Contributor
Du kannst dir ja ansehen, was Object alles drinnen hat: HIER.
Was verstehst du unter unnötiger Speicher? Sobald du ein Objekt anlegst, wird ein Speicher allokiert und die Felder auch.

Ja und vieles von dem was da angelegt wird braucht man u.U. überhaupt nicht für sehr einfach Objekte. Ich finde es auch einen der großen Nachteile von Java, dass man immer von Object erben muss. Warum sollte ich nicht Klassen erstellen die das eben nicht tun, wenn ich genau weiß, dass ich die Funktionalität von Object gar nicht brauche?

Gruß

Claus
 

Flown

Administrator
Mitarbeiter
Value types gibt es nun mal in Java nicht. Also ich habe mir noch nie Gedanken gemacht, wieviel ein Object platz belegt, denn das ist nunmal Sache der JVM und die kann das frei wählen.
Haben auch schon Partikelsimulationen mit Millionen/Milliarden Objekten implementiert in meiner alten Arbeit (in Java) und war auch kein Problem.

Grundsätzlich kann man Object mehr als ein Interface mit Standardimplementierung sehen, weniger als Mutterklasse.
 

Thallius

Top Contributor
Value types gibt es nun mal in Java nicht. Also ich habe mir noch nie Gedanken gemacht, wieviel ein Object platz belegt, denn das ist nunmal Sache der JVM und die kann das frei wählen.
Haben auch schon Partikelsimulationen mit Millionen/Milliarden Objekten implementiert in meiner alten Arbeit (in Java) und war auch kein Problem.

Grundsätzlich kann man Object mehr als ein Interface mit Standardimplementierung sehen, weniger als Mutterklasse.

Naja, Milliarden Objecte ohne Datenbank wird aber nicht lustig. In den Speicher passen die nämlich definitiv nicht und wenn die JVM dann anfängt auf der HDD zu swappen, kannste schonmal schnell an einer Koffeein Vergiftung sterben während du auf ein Ergebnis wartest :)

Gruß

Claus
 

Flown

Administrator
Mitarbeiter
Mit dem kleinen Serverchen den wir hatten, war das schon möglich. Ja der Kaffeekonsum war wirklich hoch zu dieser Zeit.;)
 
N

neoexpert

Gast
In dem Quellcode von von Flown sind ja nur Methoden aufgelistet. Methoden belegen ja im Speicher nur einmal Platz, weil sie sich ja nicht verändern. Sie sind im prinzip "final". Also belegt so ein Object an sich nur 32 oder 64 bit in Speicher (die Referenz zeigt ja in den Speicher der maximal 2^(32) oder 2^64 Bytes sein kann)
 

Thallius

Top Contributor
In dem Quellcode von von Flown sind ja nur Methoden aufgelistet. Methoden belegen ja im Speicher nur einmal Platz, weil sie sich ja nicht verändern. Sie sind im prinzip "final". Also belegt so ein Object an sich nur 32 oder 64 bit in Speicher (die Referenz zeigt ja in den Speicher der maximal 2^(32) oder 2^64 Bytes sein kann)

Wie kommst du denn auf das schmale Brett? Was meinst du was da los wäre wenn alle Threads die gleichzeitig auf deinem Rechner laufen auf die gleichen Methoden zugreifen würden? Da müsste jede Methode mit Semaphoren gelockt sein. Da wäre aber absolut Essig mit Multitasking...
 
N

neoexpert

Gast
Wie kommst du denn auf das schmale Brett? Was meinst du was da los wäre wenn alle Threads die gleichzeitig auf deinem Rechner laufen auf die gleichen Methoden zugreifen würden? Da müsste jede Methode mit Semaphoren gelockt sein. Da wäre aber absolut Essig mit Multitasking...
Das heisst also jedes mal bei new Object(); jede Methode in den Speicher kopiert wird? Das wäre nicht notwendig.
 

Meniskusschaden

Top Contributor
Wie kommst du denn auf das schmale Brett? Was meinst du was da los wäre wenn alle Threads die gleichzeitig auf deinem Rechner laufen auf die gleichen Methoden zugreifen würden? Da müsste jede Methode mit Semaphoren gelockt sein. Da wäre aber absolut Essig mit Multitasking...
Ich kann mir nicht vorstellen, dass das so abläuft. Methoden müssen doch nur gelesen werden. Warum sollte man die sperren? Es kommt mir plausibler vor, dass eine Methode verfügbar ist, sobald ihre Klasse geladen wurde und dann von allen Objekten gemeinsam genutzt wird.
 

tommysenf

Top Contributor
Wie kommst du denn auf das schmale Brett? Was meinst du was da los wäre wenn alle Threads die gleichzeitig auf deinem Rechner laufen auf die gleichen Methoden zugreifen würden? Da müsste jede Methode mit Semaphoren gelockt sein. Da wäre aber absolut Essig mit Multitasking...
Da scheint jemand Multithreading in Java nicht verstanden zu haben...
 

Meniskusschaden

Top Contributor
Es wäre ja auch sehr ineffizient, denn wenn jeder Thread bzw. jedes Objekt mit seiner eigenen Methodenkopie arbeiten würde, würden die sich irgendwann gegenseitig aus dem Cache verdrängen und müssten teuer aus dem Arbeitsspeicher neu geladen werden, obwohl sie identischen Code enthalten. Normalerweise will man doch das Gegenteil erreichen.
 

Dompteur

Top Contributor
Natürlich wird der Code nicht für jedes Objekt kopiert.
Jedes neue Objekt belegt nur den Speicher für ein paar Metadaten und die (nicht-statischen !) Instanzvariablen. Wenn diese Instanzvariablen Objekte einer Klasse sind, dann steht da im Objekt ein Verweis. Bei primitiven Datentypen steht dort der Wert selbst.
Die Metadaten enthalten unter anderem den Verweis auf ein Klassenobjekt. Über das Klassenobjekt wird sowohl der Code angesprochen als auch der Zugriff auf die statischen Variablen geregelt.
 
Zuletzt bearbeitet:
N

neoexpert

Gast
Spannendes Thema. Es wäre voll cool, wenn man Methoden auch dynamisch machen könnte also zur Laufzeit generieren. Es gibt ja so Tricks: ein Java-Kompiler als Klasse. Dann kann man Bytecode generieren und ausführen. Spannend finde ich dann, dass man so ein Programm updaten könnte ohne es zu stoppen.
 
Zuletzt bearbeitet von einem Moderator:

tommysenf

Top Contributor
Es wäre voll cool, wenn man Methoden auch dynamisch machen könnte also zur Laufzeit generieren.
Kann man alles machen. Gängige Wege hierfür sind zum Beispiel BCEL und Javassist, mit welchem ich schon oft gute Erfahrungen gemacht habe, zur Bytecodegenerierung. Bzw. die von dir schon angesprochene Java Compiler API.

Spannend finde ich dann, dass man so ein Programm updaten könnte ohne es zu stoppen.
Das wird zum Beispiel bei JRebel gemacht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Gibt es so etwas wie einen Windows Listener? Allgemeine Java-Themen 6
G Gibt es etwas ähnliches wie den ReadKey bei Pascal? Allgemeine Java-Themen 3
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
E Class.getResourceAsStream() gibt null zurück Allgemeine Java-Themen 2
Tiago1234 CellReference cr = new CellReference("") gibt den falschen Wert zurück Allgemeine Java-Themen 49
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
Jose05 Gibt es einen Nachteil bei dem JDK 8? Allgemeine Java-Themen 7
H Apache fop -- welche Möglichkeit gibt es um den Fortschritt anzuzeigen (Progressbar) Allgemeine Java-Themen 5
M Warum gibt es Unterschiedliche Kommentar Zeichen Allgemeine Java-Themen 15
Tobero Eclipse Window builder gibt es da sowas wie @ignore? Allgemeine Java-Themen 1
pkm javax.script.ScriptEngineManager gibt mir keine Engine Allgemeine Java-Themen 4
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
R Schlüsselworte "Throw new exception" gibt nicht den String als Fehlermeldung aus Allgemeine Java-Themen 2
F Überprüfen ob es Überschneidungen von Uhrzeiten (vom Typ Calendar) gibt Allgemeine Java-Themen 10
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
LimDul Spezifkation, wann es deprecation Warnings gibt Allgemeine Java-Themen 1
C Variablen == gibt immer false aus. Allgemeine Java-Themen 2
E gibt es BigDouble in Java ? Allgemeine Java-Themen 14
S Gibt es eigentlich Java Source Code Interpreter..? Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
R JDK installieren Gibt es ab 2019 überhaupt noch Java? Allgemeine Java-Themen 6
P JSpinner gibt leeren Wert zurück Allgemeine Java-Themen 5
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
T Input/Output Konsole gibt trotz printf keine Umlaute aus Allgemeine Java-Themen 17
H NetBeans geotools 15 oder 16 - welche Abhängingkeiten gibt es? Welche Jars brauche ich? Allgemeine Java-Themen 4
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
S Welche Java Techologien gibt es fürs Frontend Allgemeine Java-Themen 4
V Gibt es eine Möglichkeit die Internet auslastung mit Java auszulesen Allgemeine Java-Themen 11
L Gibt es in Java einen Property Editor? Allgemeine Java-Themen 2
S gibt testText nicht aus Allgemeine Java-Themen 3
R Es gibt keine dummen Fragen (hab ich mal gehört) Allgemeine Java-Themen 11
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
H Gibt es einen großen Unterschied zwischen Java 6 und Java 7? Allgemeine Java-Themen 3
L Konsole gibt Smileys aus Allgemeine Java-Themen 3
K Gepacktes Jar-File gibt beim Doppelklick eine Exception aus Allgemeine Java-Themen 4
O Collections ListIterator gibt Inhalt von ArrayList nicht aus Allgemeine Java-Themen 3
G Threads Gibt es eine Möglichkeit des Nichtblokierens? Allgemeine Java-Themen 5
C Vergleich von Enums gibt inkorrekte Werte Allgemeine Java-Themen 6
Jats Programm mit CMD Befehl hängt sich auf oder gibt error = 5 aus Allgemeine Java-Themen 4
V Gibt es einen Variablen Cast? Allgemeine Java-Themen 8
R JNI if abfrage gibt immer false zurück. Allgemeine Java-Themen 7
J Eclipse Elipse gibt mir keine Vorschläge mehr :( Allgemeine Java-Themen 6
G Gibt es so eine SortedMap? Allgemeine Java-Themen 21
Z Boolean Abfrage gibt kein Boolean zurück, aber warum? Allgemeine Java-Themen 6
J Warum gibt es keinen Webbrowser auf Java-Basis? Allgemeine Java-Themen 8
E Gibt es Befehle für Kursor auf Konsole ? Allgemeine Java-Themen 3
J Logger gibt nicht alle Level aus Allgemeine Java-Themen 3
B Gibt es einen Unterschied zwischen Java 1.2 und Java 2? Allgemeine Java-Themen 7
J Calendar gibt falsche Wochenanzahl zurück Allgemeine Java-Themen 3
M Gibt es ein Jar - das alle Componente Automatisch anpasst? Allgemeine Java-Themen 14
R Gibt es eine JVM, die besser mit dem Speicher umgeht? Allgemeine Java-Themen 7
G Jarfile gibt keine Textnachrichten aus Allgemeine Java-Themen 2
S [1/2done] Woher bekommt man libarys die es erst ab 1.6 gibt. Allgemeine Java-Themen 10
D Gibt es indizierte Arrays in Java? Allgemeine Java-Themen 3
S Decimalformat gibt falsche Werte aus Allgemeine Java-Themen 3
G Da Jikes nicht mit java 5 geht, gibt es eine andere. Allgemeine Java-Themen 4
M Gibt es eigentlich einen Standalone-Java-ICQ-clone Allgemeine Java-Themen 19
M Gibt es ein Foren-System, dass in Java programmiert ist? Allgemeine Java-Themen 51
N char.At gibt Zeichenkette aus. aber leider 2x Allgemeine Java-Themen 10
G was gibt es für mögliche datenbanken? Allgemeine Java-Themen 6
TRunKX Gibt es ne fertige Java Funktion die Dateien vergleicht? Allgemeine Java-Themen 4
S auf einmal gibt es einen fehler. Allgemeine Java-Themen 3
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
W Methodenpointer...oder etwas Vergleichbares? Allgemeine Java-Themen 12
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
M Problem mit (etwas komplizierterem) Java Programm Allgemeine Java-Themen 14
T "Java lernen" in etwas mehr als 8 Tagen Allgemeine Java-Themen 13
J Zweiter Prozess der alle x Sekunden etwas abfragen soll Allgemeine Java-Themen 2
G Bringt es etwas System.gc() nach großen Aufgaben aufzurufen? Allgemeine Java-Themen 2
F Generics: spricht etwas dagegen raw types zu verwenden? Allgemeine Java-Themen 31
U if Abfrage macht etwas falsch Allgemeine Java-Themen 2
E in einem Untermenü (Baltt) etwas speichern? Allgemeine Java-Themen 3
A Thema JAR-Erstellung (mal wieder) => etwas komplizierter Allgemeine Java-Themen 8
S Etwas Pipe-Ähnliches zur Prozesskommunikation Allgemeine Java-Themen 14
H [Array als Text?] bräuchte etwas hilfe bzw erklärung Allgemeine Java-Themen 5
M Etwas in der Art von JRun? Allgemeine Java-Themen 4
S ein taschenrechner, aber etwas anders. Allgemeine Java-Themen 2
H Wie stellt ein JTree fest, wo etwas eingehängt werden soll? Allgemeine Java-Themen 2
L Plugins in Java realisieren: Wie könnte man so etwas machen? Allgemeine Java-Themen 7

Ähnliche Java Themen


Oben