v8中Heap的初始化

本文详细介绍了V8引擎中Heap的初始化过程,包括MaxReserved的计算、Space与Page的定义、Heap对象的内存分配策略,以及NewSpace、OldPointerSpace等不同空间的设置方法。着重讲解了MemoryAllocator如何分配内存,以及VirtualMemory在内存管理中的作用。
摘要由CSDN通过智能技术生成
一.Heap中的size
Heap实例存在于Isolate中,它的构造函数和ConfigureHeap函数对以下一些重要的size进行了初始化:
  // Returns the maximum amount of memory reserved for the heap.  For
  // the young generation, we reserve 4 times the amount needed for a
  // semi space.  The young generation consists of two semi spaces and
  // we reserve twice the amount needed for those in order to ensure
  // that new space can be aligned to its size.
MaxReserved=4 * reserved_semispace_size_ + max_old_generation_size_
其中
reserved_semispace_size_ = 8388608 = 0x00800000 = 8M//表示reserved semispace的大小,其中reserved是在virtual memory alloc中的一个步骤
max_old_generation_size_ = 734003200 = 0x2bc00000 = 734M
max_semispace_size_ = 8388608 = 0x00800000 = 8M
initial_semispace_capacity = 1048576 = 0x00100000 = 1M
Page:: kPageSize = 1M byte
CommitPageSize=4096 byte

二.Space与Page

Space是所有存储空间的基类,它定义了Space的id和executable,所以它的派生类必须在构造函数中说明这两个属性。
FixedSpace类用来存储固定大小的对象,在构造函数中,除了说明Space的id以外,还需要指明以字节为单位的对象大小。
Map类定义在objects.h中,MapSpace类从FixedSpace继承,它指定的固定大小是Map::kSize,从map类的定义中我们可以看到Map对象的结构如下:

因为Map是一个HeapObject对象,HeapObject对象的第一个字段都是Map,也就是HeapObject的head,后面每个字段的大小都是4字节,也就是说一个Map对象的大小是40字节

MemoryChunk 结构
graphic
MemoryChunk spaces.h 中定义,它的头部共有 72 字节,如上图所示,然后是 32
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值