Wird bei der Instanziierung eines Objekts alles im Speicher gespeichert?

8

Nur kurze Frage, wenn Sie eine Klasse mit nur einer 1 Eigenschaft und vielen (nicht statischen) Methoden haben, wird jedes Mal, wenn Sie 'new object ()' oder nur die Eigenschaft sagen, ein völlig neues Objekt gespeichert. und die Methoden in einem 'gemeinsamen' Speicherbereich, so dass derselbe Typ darauf verweisen kann?

Ist also eine große Klasse immer schlechter als eine kleine Klasse hinsichtlich der Instanziierungszeit?

    
user2713516 11.09.2013, 14:53
quelle

4 Antworten

2

Die Speicherzuweisung kann sich in der Tat als zeitaufwendig erweisen. Dennoch glaube ich, dass eine sauberere, offensichtlichere Messung des Ressourcenverbrauchs Raum und keine Instanziierungszeit sein würde.

Wie Sie bereits selbst festgestellt haben, ist es so, dass Methoden, statisch oder nicht, belegen Sie Speicherplatz nur einmal. Der Verweis this ist nur ein versteckter Parameter, der wie jeder andere Parameter vom Aufrufer zum aufgerufenen Code gesendet wird, und am Ende sind alle Methoden nur einfache Funktionen (oder Routinen).

In einer einfachen Art und Weise, es zu tun, so tun alle statischen Felder. Denke nicht über Eigenschaften nach. Sie sind nur High-Level-Wrapper für Methoden, die am Ende auf Felder zugreifen.

Instanzfelder sind das, was den Speicherplatz pro Instanz belegt. Aber es gibt andere Dinge, wie Informationen zum Laufzeittyp, die ebenfalls zugewiesen werden.

Kurz gesagt, Ihre Annahme ist richtig.

BEARBEITEN

Nur als Zusammenfassung:

  • Wenn unter "große Klasse" eine Klasse verstanden wird, die viele Methoden definiert, dann wird die Instanziierungszeit nicht beeinflusst.
  • Andererseits, wenn Sie unter diesem Begriff eine Klasse verstehen, die viele Instanzfelder definiert, dann wird ja die Instanziierungszeit beeinflusst.

Obwohl dies nicht mein glücklicher Ort ist (ich weiß fast nichts darüber, wie gut ol malloc es tatsächlich schafft, Speicher zu defragmentieren), dass die Zuweisung einer Menge Speicher eine längere Zeit in Anspruch nehmen würde, ist auf eine seltsame Weise nicht möglich leg meinen Finger auf, wie das zu sagen

"Das Hinzufügen der Zahlen 1024 und 2048 dauert etwas länger als das Hinzufügen der Zahlen 3 und 4"

(alle 4 Zahlen werden in Variablen desselben numerischen Typs gespeichert).

Ich würde mir also mehr Gedanken über den Speicherverbrauch machen. Ich bin mir sicher, dass die Zeit auch irgendwie beeinflusst ist, aber vielleicht logarithmisch .

    
Eduard Dumitru 11.09.2013, 14:58
quelle
3

Methoden werden geteilt. Wenn alle anderen Dinge gleich sind, hat die Instanziierung einer Klasse mit vielen Methoden ungefähr die gleichen Kosten wie die Instanziierung einer Klasse mit wenigen. Es sind ihre nicht statischen Felder und die Menge an Arbeit, die vom Konstruktor ausgeführt wird (und einige andere Nebenfaktoren), die die Herstellungskosten bestimmen.

    
Marcelo Cantos 11.09.2013 14:57
quelle
2

Instanzfelder sind das einzige, was im Objekt selbst gespeichert ist. Methoden werden im Typ gespeichert, was bedeutet, dass sie nur an einer Stelle existieren.

Tatsächlich sind Instanzmethoden nur syntaktische Zucker (auf der IL-Ebene) für statische Methoden, die eine Instanz als Parameter akzeptieren.

    
Kendall Frey 11.09.2013 15:05
quelle
0

Ich denke, dass Sie die Informationen finden, die Sie (und wahrscheinlich mehr) hier benötigen. Der Code der Instanzmethoden wird geteilt.

    
Mithrandir 11.09.2013 14:58
quelle

Tags und Links