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

    Google V8 引擎

    在2017年4月底,v8 发布了5.9 版本,在此版本中新增了一个 Ignition 字节码解释器,并默认开启。 引擎 前面,我们介绍了V8引擎的一些历史,下面我们重点来看看V8项目一些知识。 一个句柄对象的大小是4字节(32位设备)或者8字节(64位设备),而在JavaScriptCore中,使用的8个字节表示句柄。 在堆中存放的对象都是4字节对齐的,所以它们指针的后两位是不需要的,V8用这两位表示数据的类型,00为整数,01为其他。 V8引擎渲染过程 V8引擎在执行JavaScript的过程中,主要有两个阶段:编译和运行。

    2.4K61发布于 2018-02-06
  • 来自专栏向治洪

    V8引擎

    在2017年4月底,v8 发布了5.9 版本,在此版本中新增了一个 Ignition 字节码解释器,并默认开启。 引擎 前面,我们介绍了V8引擎的一些历史,下面我们重点来看看V8项目一些知识。 一个句柄对象的大小是4字节(32位设备)或者8字节(64位设备),而在JavaScriptCore中,使用的8个字节表示句柄。 在堆中存放的对象都是4字节对齐的,所以它们指针的后两位是不需要的,V8用这两位表示数据的类型,00为整数,01为其他。 V8引擎渲染过程 V8引擎在执行JavaScript的过程中,主要有两个阶段:编译和运行。

    1.6K41编辑于 2022-11-30
  • 来自专栏向治洪

    Google V8引擎

    在2017年4月底,v8 发布了5.9 版本,在此版本中新增了一个 Ignition 字节码解释器,并默认开启。 引擎 前面,我们介绍了V8引擎的一些历史,下面我们重点来看看V8项目一些知识。 一个句柄对象的大小是4字节(32位设备)或者8字节(64位设备),而在JavaScriptCore中,使用的8个字节表示句柄。 在堆中存放的对象都是4字节对齐的,所以它们指针的后两位是不需要的,V8用这两位表示数据的类型,00为整数,01为其他。 V8引擎渲染过程 V8引擎在执行JavaScript的过程中,主要有两个阶段:编译和运行。

    2.3K50发布于 2018-01-26
  • 来自专栏原创分享

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

    1 c++对象的类型 1 v8的对象是4字节对齐的,用地址的低两位出来标记对象的类型。 2 堆对象(HeapObject)是Object的子类。 uint32_t kMediumStringTag = 0x20; const uint32_t kLongStringTag = 0x40; // If bit 7 is clear, bit 4 smi是小整形,在v8中表示整形。长度是31位。 double Object::Number() { return IsSmi() ? ::cast(js_value->value()); if (index >= (uint32_t)str->length()) return false; return true; } 4

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

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

    GlobalHandles是实现v8中持久句柄功能的类。GlobalHandles主要是维护一个链表,每个节点维护堆对象的状态。我们先看看节点的定义。 = NULL) { func(v8::Persistent<v8::Object>(ToApi<v8::Object>(handle())), par); } } Object class ObjectGroup : public Malloced { public: explicit ObjectGroup(void* id) : id_(id), objects_(4) GlobalHandles::Node* GlobalHandles::first_free_ = NULL; List<ObjectGroup*> GlobalHandles::object_groups_(4) bool GlobalHandles::IsWeak(Object** location) { return Node::FromLocation(location)->IsWeak(); } 4

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

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

    Page::kPageSize); // 最大的chunk数, max_nof_chunks_ = (capacity_ / (kChunkSize - Page::kPageSize)) + 4; length); Counters::memory_allocated.Decrement(length); size_ -= length; ASSERT(size_ >= 0); } // v8

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

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

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

    1.1K20发布于 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.3K10发布于 2020-02-25
  • 来自专栏vivo互联网技术

    JavaScript 引擎 V8 执行流程概述

    这里不涉及到如何编写优秀的前端,只是对JS内部引擎技术的讲解。 一、V8来源 V8的名字来源于汽车的“V型8缸发动机”(V8发动机)。V8发动机主要是美国发展起来,因为马力十足而广为人知。 V8引擎的命名是Google向用户展示它是一款强力并且高速的JavaScript引擎。 V8未诞生之前,早期主流的JavaScript引擎是JavaScriptCore引擎。 据说Google是不满意JavaScriptCore和Webkit的开发速度和运行速度,Google另起炉灶开发全新的JavaScript引擎和浏览器内核引擎,所以诞生了V8和Chromium两大引擎, 三、V8的早期架构 V8引擎的诞生带着使命而来,就是要在速度和内存回收上进行革命的。JavaScriptCore的架构是采用生成字节码的方式,然后执行字节码。 参考文章 https://v8.dev/docs https://docs.google.com/presentation/d/1HgDDXBYqCJNasBKBDf9szap1j4q4wnSHhOYpaNy5mHU

    1.7K21发布于 2019-12-16
  • 来自专栏京程一灯

    更轻量级的 V8 引擎

    在 2018 年末,为了大幅减少 V8 的内存使用量,我们启动了一个名为 V8 Lite 的项目。 但是在进行这项工作的过程中,我们意识到为Lite 模式所做的许多内存优化都可以转移到常规 V8 中,从而使 V8 的所有用户受益。 Lite 模式 为了优化 V8 的内存使用,我们首先需要了解 V8 如何使用内存以及哪些对象类型在 V8 堆中占了很大的比例。 通过配置现有的 V8 设置,可以对精简模式进行许多更改,例如禁用 V8 的 TurboFan 优化编译器。但是其他的优化还需要对 V8 进行更多的修改。 结果 我们已经在 V8 最后七个版本中发布了上述优化。通常,它们首先以精简模式开始,然后又被带到 V8 的默认配置。 ? AndroidGo设备上一组典型网页的 V8 堆的平均大小 ?

    2K20发布于 2019-09-30
  • 来自专栏WecTeam

    V8 引擎和 JavaScript 优化建议

    原文地址:https://alligator.io/js/v8-engine/[1] 翻译:马雪琴 V8 是谷歌用于编译 JavaScript 的引擎,Firefox 同样也有一个,叫 SpiderMonkey 当我们把压缩、混淆以及做了各种处理的 JavaScript 放到 V8 引擎中解析时,到底发生了些什么? 对象 谈到对象,V8 引擎底层有个类型系统可以区分它们: 单态 对象具有相同的键,这些键没有区别。 里的不同对象,接下来看看 V8 引擎是如何优化对象的。 如果参数的类型不同,Turbofan 在尝试优化 4 次之后就会放弃。

    1.2K20发布于 2019-12-16
  • 来自专栏Nodejs技术栈

    Javascript 引擎 V8 7.7 版本发布

    作者: afterer 链接: https://www.oschina.net/news/109069/v8-7-7-released JavaScript 引擎 V8 发布了 7.7 版本,目前处于测试阶段 为了减少 V8 的内存使用量,现在只在函数执行了一定数量的字节码之后才分配反馈向量。这避免了为没有从已收集反馈中受益的短期函数分配反馈向量。 实验表明,延迟分配反馈向量可以节省约 2-8% 的 V8 堆大小。 ? 对于 Chrome 用户来说,V8 的堆大小在桌面版上减少了 1-2%,在移动平台上减少了 5-6%。 根据使用的线程数,与 V8 的 7.4 版本相比,编译所需时间不到一半。 ? ? Stack trace 改进 几乎所有由 V8 引发的错误在创建时都会捕获跟踪栈信息。 第一次通过 error.stack 检索栈跟踪时,V8 将底层结构化栈跟踪序列化为字符串。这个序列化的栈跟踪被保存起来,以加快将来的 error.stack 访问。

    98330发布于 2019-08-20
  • 来自专栏藏经阁

    【JavaScript运行原理之V8引擎】V8引擎解析JavaScript代码原理

    但是现在的JS编译引擎都使用了运行时编译,在运行时阶段生成机器代码,而不是提前生成,这就是把代码的运行和生成机器代码同时执行,在运行阶段收集变量的类型信息,然后根据这些信息编译生成机器代码,然后直接使用这些机器代码 4. JavaScript引擎 JS作为一门高级语言,它被CPU执行之前,需要通过某种程序将js转换成机器语言并执行,这种程序就是JavaScript引擎。 这是一个简化流程,在不同JS引擎中表现会有一定的差异。 5. 什么是V8引擎 V8 是一个接收JavaScript代码,并编译代码,执行代码的一个C++程序,编译后的代码可以在多种操作系统,多种处理器上运行。 V8的工作:编译执行js代码、处理调用栈、内存分配、垃圾回收。 6. V8如何编译执行js代码 一般引擎在编译执行js代码都会用到3个重要的组件:解析器、解释器、编译器。

    94320编辑于 2023-03-11
  • 来自专栏原创分享

    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>( 4 Persisten template <class T> class Persistent : public Handle<T> { public: Persistent(); template v8::Handle<ObjectTemplate> global_template, v8::Handle<Value> global_object 总结,这就是v8中关于handle的一些知识。

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

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

    GetHeapObjectField(HeapObject* obj, int index); static inline HeapObject* cast(Object* obj); // 内存布局信息,v8 对象的真正地址 Address HeapObject::address() { return reinterpret_cast

    (this) - kHeapObjectTag; } 4

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

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

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

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

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

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

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

    js引擎v8源码解析之map对象上篇(基于v8 0.1.5)

    kIsHiddenPrototype = 2; static const int kHasNamedInterceptor = 3; static const int kHasIndexedInterceptor = 4;

    2K10发布于 2019-11-23
  • 来自专栏京程一灯

    V8 引擎发布了 v8.0

    V8 每六个星期发布一个版本,每当我们发布一个版本时,就会出现有关当 V8 到版本 8 时会发生什么的问题。举行一个派对?我们会提供一个新的编译器吗? 我们是否会跳过版本 8 和 9,而使 V8 停留在永恒的某个版本 X 中? ? 在 V8 堆中包含了一整套项目,例如浮点值,字符串,编译的代码和各种标记值(代表指向 V8 堆的指针或者小整数)。我们通过检查堆,发现这些标记的值占据了堆的很大部分! 但是我们很自豪地宣布,在 V8 及其垃圾收集器中,我们看到了真实网站性能的提高! ? 如果指针压缩激起了你的兴趣,请随时关注我们的博客文章。 /8.0 来尝试使用 V8 v8.0 中的新功能。

    1.1K20发布于 2019-12-26
  • 来自专栏前端精读评论

    100.精读《V8 引擎 Lazy Parsing》

    引言 本周精读的文章是 V8 引擎 Lazy Parsing,看看 V8 引擎为了优化性能,做了怎样的尝试吧! 这篇文章介绍的优化技术叫 preparser,是通过跳过不必要函数编译的方式优化性能。 从 V8 v5.7 / Chrome 57 开始,还会识别 uglifyJS 的 ! 然而在浏览器引擎解析环境比较复杂,很难对函数进行完整字符串匹配,因此只能对函数头进行简单判断。 也有一些代码辅助转换工具帮助 V8 正确识别,比如 optimize-js,会将代码做如下转换。 转换前: ! optimize-js 这种库了~ 4.

    52330编辑于 2022-03-14
领券