| Index: third_party/WebKit/Source/wtf/Allocator.md
|
| diff --git a/third_party/WebKit/Source/wtf/Allocator.md b/third_party/WebKit/Source/wtf/Allocator.md
|
| deleted file mode 100644
|
| index a08e00de6bdebd5a73c07422f5710376996f0def..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/wtf/Allocator.md
|
| +++ /dev/null
|
| @@ -1,186 +0,0 @@
|
| -# Memory management in Blink
|
| -
|
| -This document gives a high-level overview of the memory management in Blink.
|
| -
|
| -[TOC]
|
| -
|
| -## Memory allocators
|
| -
|
| -Blink objects are allocated by one of the following four memory allocators.
|
| -
|
| -### Oilpan
|
| -
|
| -Oilpan is a garbage collection system in Blink.
|
| -The lifetime of objects allocated by Oilpan is automatically managed.
|
| -The following objects are allocated by Oilpan:
|
| -
|
| -* Objects that inherit from GarbageCollected<T> or GarbageCollectedFinalized<T>.
|
| -
|
| -* HeapVector<T>, HeapHashSet<T>, HeapHashMap<T, U> etc
|
| -
|
| -The implementation is in platform/heap/.
|
| -See [BlinkGCDesign.md](../platform/heap/BlinkGCDesign.md) to learn the design.
|
| -
|
| -### PartitionAlloc
|
| -
|
| -PartitionAlloc is Blink's default memory allocator.
|
| -PartitionAlloc is highly optimized for performance and security requirements
|
| -in Blink. All Blink objects that don't need a GC or discardable memory should be
|
| -allocated by PartitionAlloc (instead of malloc).
|
| -The following objects are allocated by PartitionAlloc:
|
| -
|
| -* Objects that have a USING_FAST_MALLOC macro.
|
| -
|
| -* Nodes (which will be moved to Oilpan in the near future)
|
| -
|
| -* LayoutObjects
|
| -
|
| -* Strings, Vectors, HashTables, ArrayBuffers and other primitive containers.
|
| -
|
| -The implementation is in /base/allocator/partition_allocator.
|
| -See [PartitionAlloc.md](/base/allocator/partition_allocator/PartitionAlloc.md)
|
| -to learn the design.
|
| -
|
| -### Discardable memory
|
| -
|
| -Discardable memory is a memory allocator that automatically discards
|
| -(not-locked) objects under memory pressure. Currently SharedBuffers
|
| -(which are mainly used as backing storage of Resource objects) are the only
|
| -user of the discardable memory.
|
| -
|
| -The implementation is in src/base/memory/discardable_memory.*.
|
| -See [this document](https://docs.google.com/document/d/1aNdOF_72_eG2KUM_z9kHdbT_fEupWhaDALaZs5D8IAg/edit)
|
| -to learn the design.
|
| -
|
| -### malloc
|
| -
|
| -When you simply call 'new' or 'malloc', the object is allocated by malloc.
|
| -As mentioned above, malloc is discouraged and should be replaced with
|
| -PartitionAlloc. PartitionAlloc is faster, securer and more instrumentable
|
| -than malloc.
|
| -
|
| -The actual implementation of malloc is platform-dependent.
|
| -As of 2015 Dec, Linux uses tcmalloc. Mac and Windows use their system allocator.
|
| -Android uses device-dependent allocators such as dlmalloc.
|
| -
|
| -## Basic allocation rules
|
| -
|
| -In summary, Blink objects (except several special objects) should be allocated
|
| -using Oilpan or PartitionAlloc. malloc is discouraged.
|
| -
|
| -The following is a basic rule to determine which of Oilpan or PartitionAlloc
|
| -you should use when allocating a new object:
|
| -
|
| -* Use Oilpan if you want a GC to manage the lifetime of the object.
|
| -You need to make the object inherit from GarbageCollected<T> or
|
| -GarbageCollectedFinalized<T>. See
|
| -[BlinkGCAPIReference.md](../platform/heap/BlinkGCAPIReference.md) to learn
|
| -programming with Oilpan.
|
| -
|
| -```c++
|
| -class X : public GarbageCollected<X> {
|
| - ...;
|
| -};
|
| -
|
| -void func() {
|
| - X* x = new X; // This is allocated by Oilpan.
|
| -}
|
| -```
|
| -
|
| -* Use PartitionAlloc if you don't need a GC to manage the lifetime of
|
| -the object (i.e., if RefPtr or OwnPtr is enough to manage the lifetime
|
| -of the object). You need to add a USING_FAST_MALLOC macro to the object.
|
| -
|
| -```c++
|
| -class X {
|
| - USING_FAST_MALLOC(X);
|
| - ...;
|
| -};
|
| -
|
| -void func() {
|
| - RefPtr<X> x = adoptRefPtr(new X); // This is allocated by PartitionAlloc.
|
| -}
|
| -```
|
| -
|
| -It is not a good idea to unnecessarily increase the number of objects
|
| -managed by Oilpan. Although Oilpan implements an efficient GC, the more objects
|
| -you allocate on Oilpan, the more pressure you put on Oilpan, leading to
|
| -a longer pause time.
|
| -
|
| -Here is a guideline for when you ought to allocate an object using Oilpan,
|
| -and when you probably shouldn't:
|
| -
|
| -* Use Oilpan for all script exposed objects (i.e., derives from
|
| -ScriptWrappable).
|
| -
|
| -* Use Oilpan if managing its lifetime is usually simpler with Oilpan.
|
| -But see the next bullet.
|
| -
|
| -* If the allocation rate of the object is very high, that may put unnecessary
|
| -strain on the Oilpan's GC infrastructure as a whole. If so and the object can be
|
| -allocated not using Oilpan without creating cyclic references or complex
|
| -lifetime handling, then use PartitionAlloc. For example, we allocate Strings
|
| -and LayoutObjects on PartitionAlloc.
|
| -
|
| -For objects that don't need an operator new, you need to use either of the
|
| -following macros:
|
| -
|
| -* If the object is only stack allocated, use STACK_ALLOCATED().
|
| -
|
| -```c++
|
| -class X {
|
| - STACK_ALLOCATED();
|
| - ...;
|
| -};
|
| -
|
| -void func() {
|
| - X x; // This is allowed.
|
| - X* x2 = new X; // This is forbidden.
|
| -}
|
| -```
|
| -
|
| -* If the object can be allocated only as a part of object, use DISALLOW_NEW().
|
| -
|
| -```c++
|
| -class X {
|
| - DISALLOW_NEW();
|
| - ...;
|
| -};
|
| -
|
| -class Y {
|
| - USING_FAST_MALLOC(Y);
|
| - X m_x; // This is allowed.
|
| -};
|
| -
|
| -void func() {
|
| - X x; // This is allowed.
|
| - X* x = new X; // This is forbidden.
|
| -}
|
| -```
|
| -
|
| -* If the object can be allocated only as a part of object or by a placement new
|
| -(e.g., the object is used as a value object in a container),
|
| -use DISALLOW_NEW_EXCEPT_PLACEMENT_NEW().
|
| -
|
| -```c++
|
| -class X {
|
| - DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
|
| - ...;
|
| -};
|
| -
|
| -class Y {
|
| - USING_FAST_MALLOC(Y);
|
| - X m_x; // This is allowed.
|
| - Vector<X> m_vector; // This is allowed.
|
| -};
|
| -
|
| -void func() {
|
| - X x; // This is allowed.
|
| - X* x = new X; // This is forbidden.
|
| -}
|
| -```
|
| -
|
| -Note that these macros are inherited. See a comment in wtf/Allocator.h
|
| -for more details about the relationship between the macros and Oilpan.
|
| -
|
| -If you have any question, ask oilpan-reviews@chromium.org.
|
|
|