Im Zusammenhang mit Node.js stoße ich oft auf RSS-Speicher. Die Wikipedia article on RSS ist ziemlich knapp und ich bin immer noch ziemlich unsicher, wie es sich von Heap-Speicher unterscheidet. Ist es der Haufen + Stapel? Konnte mir das jemand erklären, als wäre ich 5 Jahre alt?Was ist der Unterschied zwischen RSS und Heap?
Antwort
Im Allgemeinen ist das, was Anwendungsprogrammierer Speicher nennen, wirklich nur ein Adressraum. Also der Heap, der Stack, sogar die Programmsegmente sind nur Adressen. Unsere Programme, einschließlich derjenigen im Knoten, lesen und schreiben Daten unter Verwendung dieser Adressen. Wir nennen Dinge wie malloc einen "Speichermanager", aber es sollte wirklich "Adressverwalter" sein. Ein separates "virtuelles Speicher" -System bestimmt, ob diese Adressensätze dem RAM, der Festplatte oder gar nichts zugeordnet sind oder nicht. Der resident set ist die Adresse, die vom RAM unterstützt wird. Die Resident-Set-Größe ist nur, wie groß das Set ist.
Einem Prozess wird vom Betriebssystem Speicher zugewiesen. Auf modernen 32-Bit- und 64-Bit-Systemen sieht dieser Speicherplatz wie ein weit geöffnetes Feld aller möglichen Speicheradressen aus, die adressiert werden können. In Wirklichkeit "liegt" das Betriebssystem im Prozess und kann diese Verpflichtung oft mit nur einem Teil des Speichers unterstützen, der potenziell durch den Prozess adressiert werden kann. Der Rest ist "virtuell".
Da die CPU nur Daten und Code im RAM ausführen kann, arbeitet das Betriebssystem mit der CPU zusammen, um zu verfolgen, welchen Speicher das Programm im RAM verwendet und was in einer speziellen Datei auf dem Datenträger gespeichert wird virtuelles RAM (dh die Auslagerungsdatei/Auslagerungsdatei). Was im RAM ist, wird als "resident" oder "working" bezeichnet.
Dies ist wichtig als Entwickler, da die Zeit, die für den Speicherzugriff benötigt wird, um viele Größenordnungen schneller ist, als wenn das Betriebssystem den Speicher zuerst von der Festplatte in den RAM laden muss. Das Entwerfen von Programmen, die kritische Daten resident halten, weist höhere Leistungsmerkmale auf als Programme, die nicht damit umgehen, wie Speicher zugeordnet und auf sie zugegriffen wird.
Der Heap ist die Partitionierung des weit offenen Speichers, den das Betriebssystem einem Prozess bereitstellt, der in einem data structure bearing the same name organisiert ist. Der Prozess verwendet diese Organisation, wenn er ausgeführt wird, um nur kleine Stücke gleichzeitig zu erfassen (und für die spätere Veröffentlichung nachzuverfolgen). Wenn der Prozess z. B. ein Array von ganzen Zahlen speichern möchte, benötigt er einen Teil des Speichers mit so vielen Bytes, wie Elemente die Größe der ganzen Zahl haben.
Diese Partitionierung steht über dem, was das Betriebssystem mit Swapping macht. Ich greife auf den Heapspeicher zu, um Zuweisungen von Speicherbytes für meine Objekte und Datenstrukturen zur Laufzeit zu speichern, aber diese Heapzuordnung lebt immer noch in dem Speicher, den das OS mir gegeben hat, in 4096 Bytes "Seiten", die verschoben werden können hin und her von der Festplatte. Der Stapel ist eine andere spezielle Datenstruktur, die das Betriebssystem einen Prozess gibt, aber es unterscheidet sich darin, dass es den gesamten Stapel auf einmal erhält, und wenn ein Prozess Elemente nacheinander auf den Stapel legt, inkrementiert (oder dekrementiert) er spezieller Zeiger (normalerweise ein spezielles CPU-Register), um zu verfolgen, wo es in diesem Stapel ist. Auf einer höheren Ebene verfolgt jeder Thread einen Stapel und wo sich der Zeiger in diesem Stapel befindet. Lokale Variablen, Funktionsparameter und Rücksprungzeiger werden hier gespeichert, und der Zeiger wird über diesen Speicher inkrementiert und dekrementiert, während der Prozeß ausführt, um diese Dinge im Auge zu behalten.
- 1. Was ist der Unterschied zwischen diesen Stack- und Heap-Speicheradressen?
- 2. Was ist der Unterschied zwischen Dalvik Heap und nativen Heap in Android? welcher ist fixiert?
- 3. Was ist der Unterschied zwischen Heap-Besprühen, Heap-Überlauf, Heap-Overrun?
- 4. Unterschied zwischen Klassenbereich und Heap
- 5. Was ist der Unterschied zwischen `==` und `ist`?
- 6. Was ist der Unterschied zwischen A. length und A.heap-size?
- 7. Was ist der Unterschied zwischen:.! und: r !?
- 8. Was ist der Unterschied zwischen Difftime und '-'?
- 9. Was ist der Unterschied zwischen $ und $$?
- 10. Was ist der Unterschied zwischen Verilog! und ~?
- 11. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 12. Was ist der Unterschied zwischen/* ... */und/** ... */
- 13. Was ist der Unterschied zwischen `&` und `ref`?
- 14. Was ist der Unterschied zwischen $ (...) und `...`
- 15. Was ist der Unterschied zwischen .Equals und ==
- 16. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 17. Was ist der Unterschied zwischen + = und = +?
- 18. Was ist der Unterschied zwischen? und ? = Nil
- 19. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 20. Was ist der Unterschied zwischen:
- 21. Was ist der praktische Unterschied zwischen xml, json, rss und atom bei der Verbindung mit Twitter?
- 22. Was ist der Unterschied zwischen <pubDate> und <lastBuildDate> in RSS?
- 23. Im Android-Speicher-Monitor, was ist der Unterschied zwischen `total count` und` heap count`?
- 24. Was ist der Unterschied zwischen Seq Scan und Bitmap Heap Scan in Postgres?
- 25. Was ist der Unterschied zwischen der JSP und der JSTL?
- 26. Was ist der Unterschied zwischen NetFx45WebLink und NetFx45RedistLink ist
- 27. Was ist der Unterschied zwischen PS1 und PROMPT_COMMAND ist
- 28. Was ist der Unterschied zwischen x86 und x64 ist
- 29. Was ist der Unterschied zwischen „ist None“ und „== None“
- 30. Was ist der Unterschied zwischen DISPATCH_QUEUE_CONCURRENT und DISPATCH_QUEUE_SERIAL ist