2010-12-10 11 views

उत्तर

1

हर स्थिर चर ढेर पर संग्रहीत किया जाता है, चाहे वह एक संदर्भ प्रकार या एक मान प्रकार के भीतर घोषित है की परवाह किए बिना। कुल मिलाकर केवल एक स्लॉट है चाहे कोई भी उदाहरण बनाया गया हो। (वहाँ के लिए मौजूद हालांकि कि एक स्लॉट के लिए बनाए गए किसी भी उदाहरणों होने की जरूरत नहीं है।) ध्यान दें कि इस ढेर सामान्य कचरा एकत्र ढेर से अलग है - यह एक "उच्च आवृत्ति ढेर" के रूप में जाना जाता है, और वहाँ है एक प्रति आवेदन डोमेन।

here से चोरी हो गया।

+0

आपका मतलब है कि कचरा कलेक्टर स्थिर चर के साथ काम नहीं कर रहा है? तो यह स्मृति से कैसे निपट सकता है? – Vikram

+0

तो स्थैतिक वर्ग और स्थैतिक चर या विधि के बीच क्या अंतर है? – Vikram

+2

स्थैतिक चर के पूरे बिंदु यह है कि वे एपडोमेन के जीवनकाल के लिए मौजूद हैं, इसलिए परिभाषा के अनुसार वे कभी कचरा नहीं एकत्र करेंगे - कम से कम तब तक जब तक एपडोमेन/प्रक्रिया निकल न जाए। स्थिर वर्गों, स्थिर विधियों और स्थैतिक चर के बीच अलग-अलग के लिए, वे पूरी तरह से अलग हैं और अंतर सी # 101 है।स्टेटिक वैरिएबल "क्लास लेवल" हैं - चर का एक उदाहरण एपडोमेन में बनाया गया है, जो उस वर्ग के अनुसार स्कॉप्ड किया गया है। स्टेटिक विधियां कक्षा में विधियां हैं जिन्हें किसी उदाहरण पर कॉल करने की आवश्यकता नहीं है - वे मूल रूप से हैं वैश्विक कार्य –

7

उच्च आवृत्ति ढेर का उपयोग आमतौर पर उपयोग की जाने वाली आंतरिक डेटा संरचनाओं जैसे प्रकार की विधि तालिका को संग्रहीत करने के लिए किया जाता है। यह नीचे दिखाए गए अनुसार WinDbg/SOS का उपयोग करके सत्यापित किया जा सकता है।

यह SSCLI book (पृष्ठ 235) में भी कहा गया है।

यहाँ के लिए !eeheap

-------------------------------------- 
Domain 1:   006428c0 
LowFrequencyHeap: 00340000(2000:2000) Size: 0x2000 (8192) bytes. 
HighFrequencyHeap: 00342000(8000:2000) Size: 0x2000 (8192) bytes. 
StubHeap:   Size: 0x0 (0) bytes. 
Virtual Call Stub Heap: 
    IndcellHeap:  Size: 0x0 (0) bytes. 
    LookupHeap:  Size: 0x0 (0) bytes. 
    ResolveHeap:  Size: 0x0 (0) bytes. 
    DispatchHeap: Size: 0x0 (0) bytes. 
    CacheEntryHeap: Size: 0x0 (0) bytes. 
Total size:  Size: 0x4000 (16384) bytes. 
-------------------------------------- 
Jit code heap: 
LoaderCodeHeap: 004e0000(10000:1000) Size: 0x1000 (4096) bytes. 
Total size:  Size: 0x1000 (4096) bytes. 
-------------------------------------- 
Module Thunk heaps: 
Module 5ef21000: Size: 0x0 (0) bytes. 
Module 00342e9c: Size: 0x0 (0) bytes. 
Total size:    Size: 0x0 (0) bytes. 
-------------------------------------- 
Module Lookup Table heaps: 
Module 5ef21000: Size: 0x0 (0) bytes. 
Module 00342e9c: Size: 0x0 (0) bytes. 
Total size:    Size: 0x0 (0) bytes. 
-------------------------------------- 
Total LoaderHeap size: Size: 0x13000 (77824) bytes. 
======================================= 
Number of GC Heaps: 1 
generation 0 starts at 0x02521018 
generation 1 starts at 0x0252100c 
generation 2 starts at 0x02521000 
ephemeral segment allocation context: none 
segment  begin allocated size 
02520000 02521000 0252e010 0xd010(53264) 
Large object heap starts at 0x03521000 
segment  begin allocated size 
03520000 03521000 03523250 0x2250(8784) 
Total Size:    Size: 0xf260 (62048) bytes. 
------------------------------ 
GC Heap Size:   Size: 0xf260 (62048) bytes. 

सूचना उच्च आवृत्ति ढेर के स्थान और कचरा एकत्र ढेर उत्पादन का हिस्सा है। Program के स्थिर आवंटित उदाहरण के लिए !dumpobject के लिए आउटपुट यहां दिया गया है।

0:000> !dumpheap -type Program 
Address  MT  Size 
0252b630 00343858  12  
total 0 objects 
Statistics: 
     MT Count TotalSize Class Name 
00343858  1   12 TestBench2010.Program 
Total 1 objects 
0:000> !do 0252b630 
Name:  TestBench2010.Program 
MethodTable: 00343858 
EEClass:  0034154c 
Size:  12(0xc) bytes 
File:  C:\workspaces\TestBench2010\TestBench2010\bin\Debug\TestBench2010.exe 
Fields: 
     MT Field Offset     Type VT  Attr Value Name 
00343858 4000001  4 ...Bench2010.Program 0 static 0252b630 p 
0:000> !dumpheap -type Program 
Address  MT  Size 
0252b630 00343858  12  
total 0 objects 
Statistics: 
     MT Count TotalSize Class Name 
00343858  1   12 TestBench2010.Program 
Total 1 objects 
0:000> !do 0252b630 
Name:  TestBench2010.Program 
MethodTable: 00343858 
EEClass:  0034154c 
Size:  12(0xc) bytes 
File:  C:\workspaces\TestBench2010\TestBench2010\bin\Debug\TestBench2010.exe 
Fields: 
    MT Field Offset     Type VT  Attr Value Name 
00343858 4000001  4 ...Bench2010.Program 0 static 0252b630 p 

सूचना प्रकार Program में स्थिर संदर्भ p के लिए पता। यह कचरा इकट्ठा कचरा में एक पते को इंगित करता है। साथ ही, विधि तालिका का पता नोटिस करें। यह उच्च आवृत्ति ढेर में एक पते को इंगित करता है।

1

विभिन्न "लोडर ढेर" का एक अच्छा अवलोकन है, जिसमें उच्च आवृत्ति ढेर एक उदाहरण है, इस excellent MSDN article on .Net runtime internals में।

उस लेख से:

MethodTables की तरह बार-बार पहुँचा कलाकृतियों, MethodDescs, FieldDescs, और इंटरफ़ेस मैप्स एक HighFrequencyHeap पर, आवंटित हो, जबकि इस तरह के EEClass और classloader और उसके देखने तालिकाओं के रूप में कम बार पहुँचा डेटा संरचनाओं,, LowFrequencyHeap पर आवंटित करें। StubHeap मेजबान स्टब्स है जो कोड एक्सेस सुरक्षा (सीएएस), COM wrapper कॉल, और पी/Invoke की सुविधा प्रदान करता है।

+0

लिंक मर चुका है: - \ – Vlad

+0

उह, क्यों एमएस लेख यूआरएल का इलाज कर सकता है जैसे कि स्थायी संसाधनों के रूप में उनका इलाज किया जाना चाहिए। क्या वे कभी सीखेंगे? इंटरनेट पुरालेख के लिए फिक्स्ड धन्यवाद। कृपया दान पर विचार करें! www.archive.org – codekaizen

+1

या शायद [यह] (http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazineMay2005en-us.chm) (चेतावनी:। सीएम अंदर)। – Vlad

-3

उच्च आवृत्ति ढेर का बिंदु यह है कि ऑब्जेक्ट्स जिन्हें अक्सर एक्सेस किया जाएगा, एक-दूसरे के करीब संग्रहित होते हैं। यह प्रक्रिया के कामकाजी सेट को कम करता है।

+0

सीएलआर के मामले में, यह वास्तव में सही नहीं है, वैसे भी। – codekaizen

+0

कोडेकाइज़न: इसका कौन सा हिस्सा सही नहीं लगता है? – Gabe

संबंधित मुद्दे