Erlang VM
by fxmy wang
1. 从内存分布上看ERTS
1.1. ERTS code
1.1.1. GC
1.1.2. Scheduler
1.1.3. BEAM
1.1.4. Sockets
1.1.5. etc...
1.1.6. The TAG Scheme
1.1.6.1. list sharing
1.2. C stack
1.3. Queues
1.3.1. Processes
1.3.1.1. PCB
1.3.1.1.1. htop
1.3.1.1.2. stop
1.3.1.1.3. heap
1.3.1.1.4. hend
1.3.1.1.5. cp
1.3.1.1.6. fcalls
1.3.1.1.7. reds
1.3.1.1.8. id
1.3.1.1.9. flags
1.3.1.1.10. next
1.3.1.2. MessageQueue
1.3.1.3. Stack&Heap
1.3.1.3.1. 优点
1.3.1.3.2. 缺点
1.3.1.4. Native Stack
1.4. Binaries
1.4.1. 大于64bytes的会存储于特定的区域
1.4.2. 每个进程保存一个它所见的binary list
1.4.3. sub binary
1.5. BEAM CODE
2. 总结
2.1. process start with small heaps
2.2. lists take space
2.3. sharing is nice but can explode
2.4. copying GC uses twice sapce
2.5. binaries are reference counted
2.6. **every process has seen a binary has to forget it, before it goes away**
2.7. use binary:copy/ on sub binaries
3. 从源码的结构看ERTS
3.1. [OTP]/erts/
3.1.1. emulator/
3.1.1.1. beam/
3.1.1.2. HiPE/
3.1.2. etc/
4. 从组成上来看ERTS
4.1. BEAM解释器
4.2. Processes
4.2.1. Stack
4.2.2. Heap
4.2.3. MailBox
4.2.4. PCB(process control block)
4.2.5. PID
4.3. 调度器
4.4. GC
4.4.1. copying GC
4.4.2. 性能表现
4.4.3. generational GC