Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 15843|Antwoord: 0

[Bron] Analyse van statische methoden en singletonpatronen

[Link kopiëren]
Geplaatst op 10-10-2019 18:15:05 | | |
We hebben vaak zulke verwarring in programmeren: sommige functies worden opgelost met singletons, en sommige functies met statische methoden, dus wat zijn de principes en gebruiksscenario's van statische methoden en singletons? Laten we dit vandaag duidelijk maken.

1. Laten we eerst kijken naar het verschil tussen statische methoden en niet-statische methoden?

        Veel programmeurs hebben het besef dat statische methoden eerst laden, niet-statische methoden later laden, statische methoden altijd in het geheugen zullen blijven bestaan, en niet-statische methoden niet. Daarom wordt aanbevolen een niet-statische methode te gebruiken. Allereerst is het verkeerd om te benadrukken dat dit begrip onjuist is.

        Laten we allereerst analyseren vanuit het geheugen: wanneer de applicatie wordt geïnitialiseerd, is de CLR (CLR is de Common Language Runtime) ook een runtime-omgeving zoals de Java virtual machine, die verantwoordelijk is voor resource management (geheugenallocatie en garbage collection, enz.) en zorgt voor de noodzakelijke scheiding tussen de applicatie en het onderliggende besturingssysteem. De CLR heeft twee verschillende vertaalnamen: de Common Language Runtime en de Common Language Runtime. Wijst een adresruimte toe aan elk proces in de beschikbare ruimte van het proces, namelijk de beheerde heap. De beheerde heap is verdeeld in meerdere regio's, waarvan de belangrijkste de garbage collection heap (GC Heap) en de loader heap (Loader Heap) zijn, die worden gebruikt om objectinstanties op te slaan en door de GC worden beheerd. De belangrijkste informatie die Loader Heap via de MethodTable-tabel opslaat, is metadata-gerelateerde informatie, zoals basistypes, statische velden, implementatie-interfaces en alle methoden. Loader Heap accepteert geen GC-controle, en zijn levenscyclus loopt van creatie tot vernietiging. Met andere woorden, zodra een klasse is geladen, worden zowel statische als niet-statische methoden van deze klasse opgeslagen in de MethodTab-tabel van Load Heap, zonder GC-controle, en ze zijn allemaal resident in het geheugen voor de eerste lading.

        Wat is het verschil tussen een statische methode en een niet-statische methode? Het verschil is dat bij het aanmaken van een object de statische methode alleen een kopie heeft, terwijl de niet-statische methode een kopie van de informatie over deze instantie op GC Heap kopieert voor elk nieuw nieuw object, en tegelijkertijd het nieuwe object op de stack legt. Het adres waar de stackpointer naar wijst, is het geheugenadres dat zojuist naar GC Heap is gekopieerd. Daarom zijn statische methoden sneller in termen van de snelheid van methodeaanroepen omdat niet-statische methoden geïnstantieerd moeten worden en geheugen moeten worden toegewezen.

Vanuit het perspectief van programmeergeschiedenis waren bijna alle methoden van vroeg gestructureerd programmeren statische methoden, en de introductie van instantiemethoden was een kwestie van objectgeoriënteerd programmeren, dus de instantieatiemethode was niet bedoeld om het probleem van efficiëntie en geheugen op te lossen. Het is bedoeld om ontwikkeling meer gestructureerd en objectgericht te maken.

        Uit bovenstaande analyse kan een conclusie worden getrokken: 1. De statische methode en de niet-statische methode vormen het onderscheid tussen de oplossingsmodus. 2. Als overerving, polymorfisme, of als een methode niets te maken heeft met het object van zijn klasse, moet je een statische methode kiezen, zoals een toolklasse.        

2. Wat is het verschil tussen singletonmodus en statische methode?

        We moeten soms een stukje informatie in engineering bijhouden, zoals configuratieattributen die tijdens runtime worden geladen, die gedurende de hele levensduur van de applicatie moeten bestaan en openbaar zijn, zodat er slechts één kopie nodig is. Op dit moment overwegen we een singleton of statische methode te gebruiken om deze data te onderhouden, maar op dit moment worden deze gegevens op een objectgeoriënteerde manier verkregen, gebruiken we een singleton.

        Ten eerste zijn statische methoden klasse-gebaseerd, en singletons zijn object-gebaseerd. Als het resolutiepatroon objectgebaseerd is, gebruik dan een singleton, anders een statische benadering. Je moet bijvoorbeeld klassen erven, interfaces implementeren, initialisatie vertragen, ouderklassen herschrijven, enzovoort om singletons te gebruiken, ten tweede zijn statische methoden procesgericht en singletons objectgeoriënteerd. Ten derde worden statische attribuutvariabelen niet door GC verwijderd, dus de singleton-objecten worden niet door GC gecleard, en objecten die in statische methoden worden gegenereerd worden vrijgegeven wanneer de statische methode wordt uitgevoerd.




Vorig:Distributed Messaging Middleware Practice (door Ni Wei) Volledige Chinese PDF
Volgend:Dell Latitude 5501 laptop uitschakelen en automatisch aanzetten probleem opgelost
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com