Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 15843|Svar: 0

[Källa] Analys av statiska metoder och singletonmönster

[Kopiera länk]
Publicerad på 2019-10-10 18:15:05 | | |
Vi har ofta sådan förvirring i programmering, vissa funktioner löses med singletons, och vissa funktioner löses med statiska metoder, så vilka är principerna och användningsscenarierna för statiska metoder och singletons? Låt oss klargöra detta idag.

1. Låt oss först titta på skillnaden mellan statiska metoder och icke-statiska metoder?

        Många programmerare har denna förståelse att statiska metoder laddas först, icke-statiska metoder laddas senare, statiska metoder kommer alltid att finnas i minnet och icke-statiska metoder inte. Därför rekommenderas att använda en icke-statisk metod. För det första är det fel att betona att denna förståelse är fel.

        Först och främst, låt oss analysera från minnet: när applikationen initieras är CLR (CLR är Common Language Runtime) också en runtime-miljö likt Java-virtuella maskinen, som ansvarar för resurshantering (minnesallokering och skräpsamling, etc.) och säkerställer nödvändig separation mellan applikationen och det underliggande operativsystemet. CLR har två olika översättningsnamn: Common Language Runtime och Common Language Runtime. Allokerar ett adressutrymme till varje process i processens tillgängliga utrymme, vilket är den hanterade heapen. Den hanterade heapen är indelad i flera regioner, varav de viktigaste är garbage collection-heapen (GC Heap) och loader-heapen (Loader Heap), som används för att lagra objektinstanser och hanteras av GC. Den viktigaste informationen som Loader Heap lagrar via MethodTable-tabellen är metadata-relaterad information, såsom bastyper, statiska fält, implementeringsgränssnitt och alla metoder. Loader Heap accepterar inte GC-kontroll, och dess livscykel går från skapande till förstörelse. Med andra ord, när en klass är laddad, lagras både statiska och icke-statiska metoder i Load Heaps MethodTab-tabell, utan GC-kontroll, och de är alla residenta i minnet för den första lasten.

        Vad är skillnaden mellan en statisk metod och en icke-statisk metod? Skillnaden är att när man skapar ett objekt har den statiska metoden bara en kopia, medan den icke-statiska metoden kopierar en kopia av informationen om denna instans på GC Heap för varje nytt nytt objekt, och samtidigt lägger det nya objektet på stacken. Adressen som stackpekaren pekar på är minnesadressen som just kopierades till GC Heap. Därför är statiska metoder snabbare när det gäller metodanropshastighet eftersom icke-statiska metoder behöver instansieras och allokera minne.

Ur programmeringshistoriens perspektiv var nästan alla metoder för tidig strukturerad programmering statiska metoder, och införandet av instansieringsmetoder var en fråga om objektorienterad programmering, så instansieringsmetoden var inte till för att lösa problemet med köreffektivitet och minne. Det är för att göra utvecklingen mer mönstrade och objektorienterade.

        Från ovanstående analys kan en slutsats dras: 1. Den statiska metoden och den icke-statiska metoden är skillnaden mellan lösningsmetoden. 2. Om arv, polymorfi eller om en metod inte har något att göra med objektet i dess klass, bör du välja en statisk metod, såsom en verktygsklass.        

2. Vad är skillnaden mellan singleton-läge och statisk metod?

        Vi behöver ibland underhålla en del information i engineering, såsom vissa konfigurationsattribut som laddas under körning, vilka måste finnas under hela applikationens livslängd och är publika, så endast en kopia behövs. Vid denna tidpunkt överväger vi att använda en singleton eller statisk metod för att underhålla denna data, men vid denna tidpunkt, när dessa data erhålls på ett objektorienterat sätt, kommer vi att använda en singleton.

        För det första är statiska metoder klassbaserade, och singletons objektbaserade. Om upplösningsmönstret är objektbaserat, använd en singleton, annars använd en statisk metod. Till exempel behöver du ärva klasser, implementera gränssnitt, fördröja initialisering, skriva om föräldraklasser osv. för att använda singletons, för det andra är statiska metoder processorienterade och singletons objektorienterade. För det tredje kommer statiska attributvariabler inte att rensas av GC, så singleton-objekten kommer inte att rensas av GC, och objekt som genereras i statiska metoder kommer att släppas när den statiska metoden körs.




Föregående:Distribuerad meddelandehanteringspraktik (av Ni Wei) Fullständig kinesisk PDF
Nästa:Dell Latitude 5501-laptopens avstängning och automatisk påstartsproblem löst
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com