V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
shilianmlxg
V2EX  ›  JavaScript

JavaScript 变量创建 所对应的内存值连续吗

  •  
  •   shilianmlxg · 2021-06-18 13:11:32 +08:00 · 1555 次点击
    这是一个创建于 1283 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如我
    情况 a
    let a = 1
    let b = 2
    这样是连续的嘛
    情况 b
    let a = 1
    let b = {name:'mafeifei'}
    情况 c
    let a= 1
    setTimeout(()=>{var b =2 },0)
    7 条回复    2021-06-20 22:03:53 +08:00
    JeffGe
        1
    JeffGe  
       2021-06-18 13:17:10 +08:00 via Android
    这得看具体引擎实现吧,变量在内存中的分布我猜标准里没有规定。
    crystom
        2
    crystom  
       2021-06-18 13:19:29 +08:00
    不能说不连续,但肯定不是 c 语言那样
    shilianmlxg
        3
    shilianmlxg  
    OP
       2021-06-18 15:54:45 +08:00
    @JeffGe 比如 v8 引擎
    shilianmlxg
        4
    shilianmlxg  
    OP
       2021-06-18 15:55:54 +08:00
    之前有个帖子
    疑惑来自于这里
    https://v2ex.com/t/781924
    libook
        5
    libook  
       2021-06-18 18:11:30 +08:00   ❤️ 1
    JS 因为抽象程度比较高,本身是一个比较“反机器”的语言,所以经常被人比作走得很慢的“乌龟”。

    但 V8 经常被人比作“火箭”,这俩结合起来就是“火箭带着乌龟飞”。

    为什么 V8 可以带着 JS 飞起来,甚至性能直逼 Java 这种编译型语言?

    主要是因为 V8 搞了大量奇淫技巧,通过各种动态调整来加速 JS 程序的执行。

    我举个栗子,很多排序算法都有最坏情况,如果我只写死用一种算法的话,遇到最坏情况性能就很差了,但我完全可以写多种算法,要排序的时候先自动判断一下数据是什么特征,然后再动态选择一种最适合的算法来排序,那么整个程序在任何情况下都有不错的性能。(当然 V8 里排序不是这么做的,V8 里用的是 Timsort 进行排序的,这个也算是一种动态决策的复合排序算法)

    JS 里的一个数据结构,在 V8 里可能是会动态改变数据结构和位置的,V8 开发者会分析各种场景,然后分别做出最佳的方案,让 V8 时刻监控程序当前处于什么状态,以随时决定是否要动态调整数据结构、算法,来最大限度提升性能,以及少吃点内存。

    所以分析 JS 在 V8 上运行时候的内存情况,可能意义不大,因为这个不是固定的,同时对于复杂程序来说近乎于混沌状态,只能相信 V8 开发者都做好了优化。

    另一方面来说,硬件、操作系统、V8 引擎、JS 每一层都有自己的“Memory”调度机制,层与层之间都是有抽象的,如果你关心的操作系统上的内存调度情况,你只能看到 V8 的数据,看不到 JS 的数据。
    secondwtq
        6
    secondwtq  
       2021-06-18 20:29:09 +08:00 via iPhone
    贴子白看了……
    shilianmlxg
        7
    shilianmlxg  
    OP
       2021-06-20 22:03:53 +08:00
    @libook 谢谢大佬科普~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1152 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:52 · PVG 01:52 · LAX 09:52 · JFK 12:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.