Presentation is loading. Please wait.

Presentation is loading. Please wait.

Www.red-gate.com/memoryprofiler 5 Misconceptions about.NET Memory Management Wednesday June 1 st 2011 Clive Tong and Andrew Hunter.

Similar presentations


Presentation on theme: "Www.red-gate.com/memoryprofiler 5 Misconceptions about.NET Memory Management Wednesday June 1 st 2011 Clive Tong and Andrew Hunter."— Presentation transcript:

1 www.red-gate.com/memoryprofiler 5 Misconceptions about.NET Memory Management Wednesday June 1 st 2011 Clive Tong and Andrew Hunter

2 www.red-gate.com/memoryprofiler Developer,.NET Reflector Developer, ANTS Memory Profiler Your presenters

3 www.red-gate.com/memoryprofiler The webinar Clive: 5 misconceptions about.NET memory management (30 mins) Andrew: Q&A session for any questions to do with.NET memory $50 Amazon voucher for the best answer to Clives question. Please type questions into your GoToWebinar chat box

4 www.red-gate.com/memoryprofiler Some Misconceptions About Memory Management in.NET Clive Tong Red Gate Software

5 www.red-gate.com/memoryprofiler Five misconceptions 1 A garbage collector collects garbage 2 Doing lots of gen0 collections is bad 3 Performance counters are great for understanding what is happening 4.NET doesnt leak memory 5 All objects are treated the same

6 www.red-gate.com/memoryprofiler 1) The Garbage Collectors Collect Garbage The focus is really on the non-garbage Most (young) objects die young Designed to collect dead items without processing them individually Note this is for generation 0

7 www.red-gate.com/memoryprofiler A simple mutator var collect = new List (); while(true) { collect.Add(new A()); new A(); new A(); }

8 www.red-gate.com/memoryprofiler Allocation in generation 0 Generation 0 After one iteration of the while loop As we go into the fourth iteration

9 www.red-gate.com/memoryprofiler No space, so copy Promote gen0 gen1

10 www.red-gate.com/memoryprofiler Fix-up gen0 gen1

11 www.red-gate.com/memoryprofiler And recycle gen0 gen1

12 www.red-gate.com/memoryprofiler Observations Trick is that objects are allowed to move Need to get to a safe point when pointers can be fixed Additionally this allows quick allocation

13 www.red-gate.com/memoryprofiler Fast allocation 0:000> u 002c2020 mov eax,dword ptr [ecx+4] mov edx,dword ptr fs:[0E40h] add eax,dword ptr [edx+48h] cmp eax,dword ptr [edx+4Ch] ja 002c203b mov dword ptr [edx+48h],eax sub eax,dword ptr [ecx+4] mov dword ptr [eax],ecx ret 002c203b: jmp clr!JIT_NewFast (5cbded01)

14 www.red-gate.com/memoryprofiler Solution Avoid locking too frequently by having thread specific allocation buffers Thread 1 allocation buffer Thread 2 allocation buffer

15 www.red-gate.com/memoryprofiler And there is one other trick Use generations to focus attention – 0,1,2 Need to track object references 0:000> u 5cbc2fb0 clr!JIT_WriteBarrierEAX: mov dword ptr [edx],eax cmp eax,271100Ch jb clr!JIT_WriteBarrierEAX+0x17 (5cbc2fc7) shr edx,0Ah nop cmp byte ptr [edx+0BD63E0h],0FFh jne clr!JIT_WriteBarrierEAX+0x1a (5cbc2fca) ret clr!JIT_WriteBarrierEAX+0x18: nop mov byte ptr [edx+0BD63E0h],0FFh ret

16 www.red-gate.com/memoryprofiler 2) Lots of gen0 collections is bad We have covered this already Time proportional to live data Though with (fixed) overheads Worse case double allocation

17 www.red-gate.com/memoryprofiler 3) Performance counters are accurate Quick demonstration

18 www.red-gate.com/memoryprofiler Periodic measurements Its important to remember that these are updated when a collection happens No collection means the counter is stuck The average value can be misleading

19 www.red-gate.com/memoryprofiler class Program { static void Main(string[] args) { var accumulator = new List (); while (true) { DateTime start = DateTime.Now; while ((DateTime.Now - start).TotalSeconds < 15) { accumulator.Add(new Program()); Thread.Sleep(1); } Console.WriteLine(accumulator.Count); } } }

20 www.red-gate.com/memoryprofiler

21

22

23

24

25

26 4).NET doesnt leak Its a question of definition Old definition -Forgot to de-allocate after use -Lost the final pointer to some memory -Forgot your responsibilities

27 www.red-gate.com/memoryprofiler New definition Premature release was often fatal Those days are gone (*) The runtime is ultra-cautious Its difficult to have an effective cost model (*) except when you aggressively dispose

28 www.red-gate.com/memoryprofiler What makes things live longer? Runtime User Library Compiler

29 www.red-gate.com/memoryprofiler Runtime Type of build Having a debugger attached Heuristics choosing when to collect higher generations Finalizers

30 www.red-gate.com/memoryprofiler User Event handlers Assigning temporary values to fields Value only needed on some code paths

31 www.red-gate.com/memoryprofiler Library Caches without a lifetime policy Data binding

32 www.red-gate.com/memoryprofiler Compiler Closures

33 www.red-gate.com/memoryprofiler Closures class Program { private static Func s_LongLived; static void Main(string[] args) { var x = 20; var y = new int[20200]; Func getSum = () => x + y.Length; Func getFirst = () => x; s_LongLived = getFirst; }

34 www.red-gate.com/memoryprofiler

35 5) All objects are created equal Copying takes a while Need a better way to handle large objects Resort to standard mark-and-sweep No compact at the moment

36 www.red-gate.com/memoryprofiler No copying during collection Before After

37 www.red-gate.com/memoryprofiler Some observations No movement, so no fix-ups Potential parallelism But potential fragmentation Only do when gen2 is collected Temporary large objects dont fit model All blocks are touched

38 www.red-gate.com/memoryprofiler The problem of fragmentation Before collection After collection Next allocation Allocate block of this size:

39 www.red-gate.com/memoryprofiler Conclusion Theres a lot going on inside your process heap The only way to really understand what is going on is to use tools to visualize things

40 www.red-gate.com/memoryprofiler Q&A Session Please type your questions into the GoToWebinar box We will read out your questions for Andrew to answer

41 www.red-gate.com/memoryprofiler Thank you! A recording of this webinar will be emailed to you tomorrow Do get in touch!


Download ppt "Www.red-gate.com/memoryprofiler 5 Misconceptions about.NET Memory Management Wednesday June 1 st 2011 Clive Tong and Andrew Hunter."

Similar presentations


Ads by Google