Context(上下文)运行时环境
1.概述
上下文(Context):即运行时环境Runtime(内建(自定义)的对象(函数))
每个v8::Context含有一个global(全局)ObjectTemplate对象
Context::Scope:表示进入Context
创建(1)保存顶层i::Context到i::HandleScopeImplementer
(2)设置顶层为当前Context
销毁:退出Context:恢复顶层i::Context
2.运行时环境的建立(v8.cc)
(1)Logger::Setup()
(2)CpuProfiler::Setup()
(3)HeapProfiler::Setup()
(4)OS::Setup()
(5)Heap::Setup()
MemoryAllocator内存分配器
static NewSpace new_space_;
static OldSpace* old_pointer_space_;
static OldSpace* old_data_space_;
static OldSpace* code_space_;
static MapSpace* map_space_;
static CellSpace* cell_space_;
static LargeObjectSpace* lo_space_;
static HeapState gc_state;
static Object* roots_[kRootListLength];//内建对象(指针)数组---全部内建对象
(6)Bootstrapper::Initialize()
(7)Builtins::Setup() :内建函数 (跳转到内建Code对象的机器指令)
(8)Top::Initialize()
(9)StubCache::Initialize()
(10)CPU::Setup()
(11)OProfileAgent::Initialize()
3.CodeStub对象(用于访问内建的Code对象)
(1)固定(Fixed)CodeStub
CEntryStub
| CEntry Code:同时存放在roots_[kCEntryCodeRootIndex]和
| roots_[kCodeStubsRootIndex]的NumberDictionary对象
JSEntryStub
| JSEntry Code:同时存放在roots_[kJsEntryCodeRootIndex]和
| roots_[kCodeStubsRootIndex]的NumberDictionary对象
JSConstructEntryStub
JSConstructEntry Code:同时存放在roots_[kJsConstructEntryCodeRootIndex]和 roots_[kCodeStubsRootIndex]的NumberDictionary对象
(2)其他Stub
4.Builtins类
static Object* builtins_[];//内建函数的Code对象数组
3类内建函数:(1)C++实现
(2)汇编实现
(3)汇编实现,用于debug