【Fundamentals of Garbage Collection】
1、Reclaims objects that are no longer being used, clears their memory, and keeps the memory available for future allocations. Managed objects automatically get clean content to start with, so their constructors do not have to initialize every data field.
2、Visual memory can be in three states:
1)Free. The block of memory has no references to it and is available for allocation.
2)Reserved. The block of memory is available for your use and cannot be used for any other allocation request. However, you cannot store data to this memory block until it is committed.
3)Committed. The block of memory is assigned to physical storage.
3、Virtual address space can get fragmented. This means that there are free blocks, also known as holes, in the address space. When a virtual memory allocation is requested, the virtual memory manager has to find a single free block that is large enough to satisfy that allocation request. Even if you have 2 GB of free space, the allocation that requires 2 GB will be unsuccessful unless all of that space is in a single address block.
4、Conditions for a Garbage Collection.
Garbage collection occurs when one of the following conditions is true:
- The system has low physical memory.(被动)
- The memory that is used by allocated objects on the managed heap surpasses an acceptable threshold. This means that a threshold of acceptable memory usage has been exceeded on the managed heap. This threshold is continuously adjusted as the process runs.(被动)
- The GC. Collect method is called. (主动)
5、When a garbage collection is triggered, the garbage collector reclaims the memory that is occupied by dead objects. The reclaiming process compacts live objects so that they are moved together, and the dead space is removed, thereby making the heap smaller. This ensures that objects that are allocated together stay together on the managed heap, to preserve their locality.
6、The heap can be considered as the accumulation of two heaps: the large object heap and the small object heap.
The large object heap contains objects that are 85,000 bytes and larger. Very large objects on the large object heap are usually arrays. It is rare for an instance object to be extremely large.
【Generations】
1、There are three generations of objects on the heap: 0、1、2。
2、Newly allocated objects form a new generation of objects and are implicitly generation 0 collections, unless they are large objects, in which case they go on the large object heap in a generation 2 collection.
3、每一次GC幸存下来的对象,会晋升到更高级的Generation。
4、Generation 0、1 也叫作 ephemeral generation。0、1必须在ephemeral segment中。ephemeral segment中可以有2.
5、The amount of freed memory from an ephemeral garbage collection is limited to the size of the ephemeral segment
【What Happens During a Garbage Collection】
Before a garbage collection starts, all managed threads are suspended except for the thread that triggered the garbage collection
When a finalizable object is discovered to be dead, its finalizer is put in a queue so that its cleanup actions are executed, but the object itself is promoted to the next generation. Therefore, you have to wait until the next garbage collection that occurs on that generation (which is not necessarily the next garbage collection) to determine whether the object has been reclaimed.
GC分为2种:Workstation、Server。Server类有专门的GC线程。
Workstation并发GC模型。此模型下,0、1同步完成,2在GC线程中完成。