1
JeffGe 2021-06-18 13:17:10 +08:00 via Android
这得看具体引擎实现吧,变量在内存中的分布我猜标准里没有规定。
|
2
crystom 2021-06-18 13:19:29 +08:00
不能说不连续,但肯定不是 c 语言那样
|
3
shilianmlxg OP @JeffGe 比如 v8 引擎
|
4
shilianmlxg OP |
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 的数据。 |
6
secondwtq 2021-06-18 20:29:09 +08:00 via iPhone
贴子白看了……
|
7
shilianmlxg OP @libook 谢谢大佬科普~
|