首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏漫画前端

    V8 发布 v8

    来源:开源中国 JavaScript 引擎 V8 发布了 8.0 版本,此版本除了修复一些 bug,毫无疑问又带来了性能的提高。 性能改进 先看看性能改进,这包括内存占用减少与速度提升: 指针压缩 V8 堆包含整个项目所有东西,例如浮点值、字符串字符、编译的代码和标定值(tagged values),标定值代表指向 V8 堆的指针或小整型 通常在减少内存的同时,也会牺牲速度性能,但是经过这一改进,V8 及其垃圾收集器中,都能够看到真实网站性能的提升。 ?

    73641发布于 2020-12-16
  • 来自专栏原创分享

    v8源码解析之ByteArray(v8 0.1.5)

    ByteArray是字节数组的实现,顾名思义,该数组的元素大小的一个字节,不过类似js的Uint16Array,Uint32Array数组一样,我们可以把多个元素看做一个,把多个字节合并成一个元素看待。下面我们看一下实现。

    90920发布于 2020-11-02
  • 来自专栏原创分享

    v8源码解析之Dictionary(v8 0.1.5)

    Dictionary底层是数组实现的,每个元素的大小是三个指针(key、value、detail)。接着我们看一下类的具体实现。1 value的存取

    83730发布于 2020-11-02
  • 来自专栏原创分享

    v8源码解析之SymbolTable(v8 0.1.5)

    SymbolTable是哈希表的子类,元素大小是一个Object*。SymbolTable主要使用哈希表来存储字符串,给定一个字符串,算出哈希值,然后插入哈希表中。后续根据哈希值进行读取。哈希表本身不负责对元素进行哈希,而是由数据方提供哈希值。哈希表只是根据这个哈希值计算出该元素在哈希表的位置。

    55820发布于 2020-11-02
  • 来自专栏原创分享

    v8源码解析之HashTable(v8 0.1.5)

    HashTable是v8中哈希表的实现,HashTable继承Array。HashTable提供一些公共的逻辑,供后续子类使用。我们看一下他 大内存布局。 ? 然后看一下类的定义。

    79830发布于 2020-11-02
  • 来自专栏前端三元同学

    V8系统解读(一): V8 在 Chrome 中的位置&编译调试V8

    所以 V8 所在的宿主环境也就是渲染进程,会给 V8 注入许多运行时的能力,使得在 JS 中能够顺利地调用。 这些能力并不属于 V8, 但对于 V8 的执行确实至关重要的。 你没有听错,这些能力都不是 V8 的,所以跟 V8 的创建和销毁没有关系,当你往这些 API 对象上挂载属性后,会一直会驻留于堆内存中。 以 v8 命令为例,对于一个 demo 文件: // index.js var text = '111'; 执行以下命令查看 V8 为这段 js 生成的字节码: v8 --print-bytecode 也可通过这条命令查看所有的命令集: v8 --help 总结 V8 处在 Chrome 渲染进程当中,与排版引擎 Blink共享一个主线程。 接着,我们搭建了 v8 的调试环境,能够输出 v8 的中间产物,让我们对 v8 的工作有更加直观的认识。

    3.5K10发布于 2021-03-11
  • 来自专栏咩嗒

    V8源码入门

    本文所用的V8版本为9.4.146.24,源码层面分析builtin、Ignition、Sparkplug、TurboFan。 builtin builtin是理解V8源码的关键,因为 它本身很重要,是V8最重要的“积木块”;比如ignition解析器每一条指令实现就是一个builtin,js调用原生也是一个builtin,js 尽管如此,和汇编类似的CSA还是太低级了,写起来太废功夫了,于是V8提供了一个类javascript的高级语言:torque ,这语言最终会编译成CSA形式的c++代码和V8其它C++代码一起编译。 Add_Baseline builtin的生成逻辑在v8\src\builtins\http://builtins-number-gen.cc的63行 对比Ignition的builtin的生成逻辑(v8 同时TurboFan也是V8高性能的关键,其重要性不言而喻。

    1.6K21编辑于 2023-04-26
  • 来自专栏原创分享

    v8源码解析之数组系列1(v8 0.1.5)

    前言:很久没有看了,花点时间继续分析一下v8v8中很多数据结构都具备数组的特性,今天我们先介绍Array和FixedArray。他们是V8中很多数据结构的基类。 kSize; static const int kHeaderSize = kLengthOffset + kIntSize; private: // 禁止直接创建对象,复制函数,赋值函数,通过v8

    1K20发布于 2020-11-02
  • 来自专栏原创分享

    js引擎v8源码分析之GlobalHandles(基于v8 0.1.5)

    GlobalHandles是实现v8中持久句柄功能的类。GlobalHandles主要是维护一个链表,每个节点维护堆对象的状态。我们先看看节点的定义。 = NULL) { func(v8::Persistent<v8::Object>(ToApi<v8::Object>(handle())), par); } } Object p = (*p)->next_addr(); } } // 重置free队列的头指针,因为链表的节点都被释放了 set_first_free(NULL); } 总结,主要介绍了v8

    1.8K10发布于 2020-02-25
  • 来自专栏原创分享

    js引擎v8源码分析之MemoryAllocator(基于v8 0.1.5)

    length); Counters::memory_allocated.Decrement(length); size_ -= length; ASSERT(size_ >= 0); } // v8

    1.5K10发布于 2020-02-17
  • 来自专栏原创分享

    js引擎v8源码分析之Object(基于v8 0.1.5)

    1 c++对象的类型 1 v8的对象是4字节对齐的,用地址的低两位出来标记对象的类型。 2 堆对象(HeapObject)是Object的子类。 smi是小整形,在v8中表示整形。长度是31位。 double Object::Number() { return IsSmi() ?

    1.7K10发布于 2020-02-25
  • 来自专栏向治洪

    Google V8 引擎

    V8的前世今生 V8是JavaScript渲染引擎,第一个版本随着Chrome的发布而发布(具体时间为2008年9月2日)。 做出这一改变的原因为:(主要动机)减轻机器码占用的内存空间,即牺牲时间换空间;提高代码的启动速度;对 v8 的代码进行重构,降低 v8 的代码复杂度(详细介绍请查阅:JS 引擎与字节码的不解之缘) V8 引擎 前面,我们介绍了V8引擎的一些历史,下面我们重点来看看V8项目一些知识。 V8引擎渲染过程 V8引擎在执行JavaScript的过程中,主要有两个阶段:编译和运行。 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction ( v8::Handle<v8::String> name

    2.2K61发布于 2018-02-06
  • 来自专栏原创分享

    js引擎v8源码分析之NewSpace(基于v8 0.1.5)

    NewSpace是v8内存管理中,负责管理新生代区的类。分为from和to两个区,每个区由SemiSpace对象管理。

    96720发布于 2020-02-17
  • 来自专栏原创分享

    js引擎v8源码分析之HandleScope(基于v8 0.1.5)

    void** v8::HandleScope::CreateHandle(void* value) { // 获取下一个可用的地址 void** result = current void v8::HandleScope::DeleteExtensions() { ASSERT(current_.extensions ! 在这里插入图片描述 这就是v8中的HandleScope的大致原理。

    1.2K10发布于 2020-02-25
  • 来自专栏原创分享

    js引擎v8源码分析之Handle(基于v8 0.1.5)

    Handle是使用v8的时候很重要的一个概念和类。他本质是堆对象的封装。我们通过Handle管理真正的对象,而不是直接操作对象。Handle在v8中有两个实现。一个是对外使用的一个是内部使用的。 ::String> Utils::ToLocal(v8::internal::Handle<v8::internal::String> obj) { return Local<String>( Persistent<Context> v8::Context::New(v8::ExtensionConfiguration* extensions, v8::Handle<ObjectTemplate> global_template, v8::Handle<Value> global_object 总结,这就是v8中关于handle的一些知识。

    1.3K10发布于 2020-02-25
  • 来自专栏原创分享

    编译和使用V8

    1 编译V8 2 编译V8为静态库 3 使用V8 1 编译V8 1 下载工具: git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git depot_tools和v8两个目录) 5 执行命令:alias gm=/code/v8_code/v8/tools/dev/gm.py,然后cd v8进入v8源码目录。 3 使用V8 我们可以在自己的项目里使用V8,这个已经有不少的例子,Node.js就是典型的例子,不过Node.js比较复杂,不利于快速理解如何使用V8,其实V8静态库和其他的静态库是一样,下面以V8v8::V8::InitializeICUDefaultLocation(argv[0]); v8::V8::InitializeExternalStartupData(argv[0]); std ; return 0;} V8的API使用过程就是初始化V8,编译执行脚本,销毁V8

    2.9K10发布于 2021-09-16
  • 来自专栏原创分享

    js引擎v8源码分析之HeapNumber(基于v8 0.1.5)

    v8里有smi保存整形,但是他只有31位,超过31位的就需要用HeapNumber。

    1K20发布于 2020-02-25
  • 来自专栏原创分享

    js引擎v8源码分析之SemiSpace(基于v8 0.1.5)

    SemiSpace的管理新生代内存的类,即我们常听到的from区和to区。from区和to区都由一个SemiSpace对象管理。SemiSpace只管理地址,不负责分配和释放管理的内存。下面是Semispace类的定义。

    1.2K10发布于 2020-02-17
  • 来自专栏原创分享

    js引擎v8源码分析之HeapObject(基于v8 0.1.5)

    GetHeapObjectField(HeapObject* obj, int index); static inline HeapObject* cast(Object* obj); // 内存布局信息,v8

    1.2K10发布于 2020-02-25
  • 来自专栏Cellinlab's Blog

    Google V8 - 全局概览

    什么是 V8 V8 是 JavaScript 虚拟机的一种,可以将 JavaScript 虚拟机理解成一个翻译程序,将编程语言 JavaScript 翻译成机器能理解的机器语言。 在 V8 出现之前,JavaScript 虚拟机采用的都是解释执行的方式,导致 JavaScript 执行速度过慢。 V8 率先引入了**即时编译(JIT)**的双轮驱动的设计,这是一种权衡策略,混合编译执行和解释执行两种手段,给 JavaScript 的执行速度带来了极大的提升。 另外,V8 还早于其他虚拟机引入了惰性编译、内联缓存、隐藏类等机制,进一步优化了 JavaScript 代码的编译执行效率。V8 的出现,将 JavaScript 虚拟机技术推向了一个全新的高度。 如何学习 V8 V8 的主要职责是来执行 JavaScript 代码,所以需要首先了解 JavaScript 语言的基本特性和设计思想。

    31630编辑于 2023-05-17
领券