Wird Garbage Collection in Cocoa-Apps mit Produktionsqualität verwendet?

7

Ich wundere mich hauptsächlich über den Einfluss, den die Garbage Collection auf die Performance haben würde. Ist die Verwendung von Garbage Collection für Release-Apps verpönt?

Eine weitere Sorge, die mir einfällt, ist, dass die Verwendung von Garbage Collection zu einer schlechteren Programmierung führen könnte.

Verwenden Sie die Garbage Collection in Ihren Apps?

    
calvinlough 02.01.2010, 20:37
quelle

5 Antworten

22

Garbage Collection wird in vielen Produktionsqualitätsanwendungen verwendet. Xcode, Automator, Systemeinstellungen und einige andere Systemanwendungen sind GC'd, und Sie können erwarten, dass sich dieser Trend im Laufe der Zeit fortsetzt.

Viele Entwickler haben GC ebenfalls akzeptiert und verwenden sie ausschließlich in ihren Anwendungen. Intuits neue Versionen von Quicken und QuickBooks für den Mac sind zum Beispiel Müll gesammelt.

GC bietet eine Reihe von Vorteilen. Aus dem Kopf und aus eigener Erfahrung:

  • macht Multithreading einfacher; Eine einfache Zuweisung ist eine atomare Besitzvereinbarung

  • Es verschiebt eine Menge Speicherverwaltung auf andere Kerne; Es ist natürlich gleichzeitig und entlädt eine Bündelberechnung aus dem Hauptthread (oder den Berechnungsthreads)

  • In vielen Fällen kann die Zuweisung und Aufhebung von Zuweisungen vollständig im Kontext eines Threads erfolgen, wodurch die Notwendigkeit einer globalen Synchronisierung oder Sperrung entfällt

  • Der Collector wurde mit jeder Version von Mac OS X schneller und dieser Trend wird fortgesetzt (genau wie beim Rest des Systems). Indem Sie mehr Rechenlast Ihrer App auf die vom System bereitgestellten Frameworks übertragen, wird Ihre App immer mehr von Optimierungen für das zugrunde liegende System profitieren.

  • weil der Kollektor das Objektdiagramm - die Zeiger zwischen den Objekten - genau kennt, erleichtert dies die Analyse und das Debugging erheblich. Statt "Woher kam dieser schleppende Zeiger?" Lautet nun die Frage: "Gib mir eine Liste von Gründen, warum dieses Objekt länger rumsteht, als ich es für nötig halte?".

Das soll nicht heißen, dass es keine Aufgabe gibt, Ihre Anwendung unter GC optimal zu nutzen. Es gibt solche Aufgaben!

    
bbum 02.01.2010, 21:08
quelle
5

Garbage Collection gibt es seit den 1960er Jahren und wird in vielen veröffentlichten Anwendungen verwendet. Alle .NET-Apps verwenden Garbage Collection. Apple benutzt libauto in Xcode.

Garbage Collection führt in Cocoa in der Regel zu Apps mit höherer Qualität, da der Entwickler von der Speicherverwaltung befreit ist. Es gibt Tonnen von Cocoa-Apps, die auslaufen! (obwohl es nicht eine erhebliche Menge an Speicher ist)

Ich neige dazu, gc zu verwenden, da ich meine Apps schneller umdrehen kann und mir keine Gedanken über Zombie-Objekte machen muss!

    
caleb 02.01.2010 21:10
quelle
3

Ich benutze GC, wann immer ich kann, denn der beste Code von allen ist der Code, den Sie gar nicht erst schreiben müssen. Wie Bbum bereits oben ausgeführt hat, bedeutet das Ausführen unter GC, dass Sie viel mehr Informationen für die Leistungsanalyse zur Verfügung haben, falls Sie Engpässe beseitigen müssen.

    
NSResponder 03.01.2010 03:58
quelle
1

Garbage Collection wird für alle neuen Cocoa-Anwendungen empfohlen, und Apple isst sein eigenes Hundefutter, indem er es in Xcode verwendet. Leistung ist eine interessante Situation, da, während Sie wahrscheinlich insgesamt mehr CPU-Zyklen verbrauchen, die Anwendung in einigen Bereichen aufgrund von Multithreading des Kollektors und der Vereinfachung der Zugriffsmethoden tatsächlich schneller wird.

Computer werden gemacht, um für uns zu arbeiten. Cocoa's Referenzzählung ist normalerweise einfach zu verwalten, aber die Müllsammlung ist eine weitere Sache, die es jetzt tun kann - lass die Maschine die Arbeit machen, damit du dich auf die Dinge konzentrieren kannst, die wichtig sind!

    
user155959 04.01.2010 18:15
quelle
1

Wie die anderen würde ich Ihnen wärmstens empfehlen, GC zu verwenden. Der Leistungsaufwand ist in der Regel vernachlässigbar! Ich muss die Vorteile nicht wiederholen, wie von anderen Benutzern angegeben.

Ich würde jedoch sehr dazu ermutigen, Bibliotheken im Gegensatz zu Anwendungen auch in einem Nicht-GC-Modus zu schreiben. In einigen Umgebungen kann GC-Code nicht ausgeführt werden, wobei das iPhone das wichtigste ist. Wenn Sie also eine interne Bibliothek für sich selbst erstellt haben, die Sie später für eine iPhone-App verwenden möchten, würde ich empfehlen, sie so zu gestalten, dass sie auch in einer Umgebung ohne GC funktioniert.

Die Konvertierung eines GC-Codes in Nicht-GC-Code ist viel schwieriger als umgekehrt!

    
notnoop 04.01.2010 18:23
quelle