js是弱类型,动态语言,静态作用域,(带jit的)解释型语言。

1、先看个问题 

 function func(age) {
      console.log(age);
      var age = 25;
      console.log(age);
      function age() {}
      console.log(age);
    }
    func(18);

 

输出什么?

2、js是什么语言

js是弱类型,动态语言,静态作用域,解释型语言。      但是这个解释型,现在有点假了。 因为,也加入了jit。

 

3、基础概念

 

js是动态语言,JAVA是静态语言。 
区分规则:静态类型语言在编译时便已确定变量的类型,而动态类型语言的变量类型要到程序运行的时候,待变量被赋予某个值之后,才会具有某种类型。

 

js是解释型语言,JAVA也是解释型语言。
区分规则:根据计算机程序运行的机制,我们把,不需要编译成机器码的执行方式,叫做解释执行。

与解释执行对应的,是编译成目标代码,直接在 CPU 上运行。而根据编译时机的不同,又分为 AOT 和 JIT。AOT提前编译。

 

jit的优势

一般来说,一个稍微大点儿的程序,静态编译一次,花费的时间很长,而这个等待时间是很煎熬的。如果采用 JIT 机制,你的程序就可以像,解释执行的程序一样,马上运行,得到反馈结果。
其次,JIT 能保证代码的可移植性。在某些场景下,我们没法提前知道,程序运行的目标机器,所以,也就没有办法提前编译。Java 语言,先编译成字节码,到了具体运行的平台上,再即时编译成,目标代码来运行,这种机制,使 Java 程序具有很好的可移植性。
再比如,很多程序会用到 GPU 的功能,加速图像的渲染,但针对不同的 GPU,需要编译成不同的目标代码,这里也会用到即时编译功能。
最后,JIT 是编译成机器码的,在这个过程中,可以进行深度的优化,因此程序的性能要比解释执行高很多。

原来一些解释执行的语言,后来也采用 JIT 技术

而从实际应用来看,原来一些解释执行的语言,后来也采用 JIT 技术,优化其运行机制,在保留即时运行、可移植的优点的同时,又提升了运行效率,JavaScript 就是其中的典型代表。基于谷歌推出的 V8 开源项目,JavaScript 的性能获得了极大的提升,使基于 Web 的前端应用的体验,越来越好,这其中就有 JIT 的功劳。

 

对应:

动态语言对应静态语言,强类型语言对应弱类型语言,解释性语言对应编译型语言。 静态作用域(词法作用域)对应动态作用域。

js作用域:

全局作用域,函数作用域,块级作用域。

 

v8的jit时机

 

JIT(just-in-time)是什么
一般来说,每个浏览器、运行时都可能实现自己的JIT编译器,但通常其理论是一样的,遵循相同的结构。

 


解释器
由于JS是解释型语言,JS引擎需要将代码逐行翻译为可执行的代码,可执行的代码有多种形式,其中较常见的有基于AST直接执行及ByteCode的执行方式。

监视器(分析器)
在解释器执行代码时,监视器会对代码进行分析,跟踪不同的语句被命中的次数,随着次数的不断增长,该语句会被标记为warm、hot、very hot(SpiderMonkey中的really hot)。换句话说,监视器会检测哪些部分的代码被使用最多,然后将它们发送给JIT进行编译和存储。JIT引擎会针对这些代码逐行进行机器码编译,然后存储在一张表的单元中(表单元指向被编译的机器码)。

warm 将解释执行代码发送给JIT引擎,将其编译为机器码,但此处不会进行替换
hot 解释执行代码将被替换为warm编译出的机器码执行
very hot 将解释执行的代码发送给优化编译器,创建和编译出更高效的机器码执行代码并进行替换

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Java 不是解释语言,而是编译语言。Java 代码首先被编译成字节码,然后在运行时由 Java 虚拟机(JVM)解释执行。这种方式使得 Java 具有跨平台的特性,因为不同平台只需要安装相应的 JVM 即可运行相同的 Java 代码。 ### 回答2: Java是解释语言的原因有以下几点: 1. Java源代码需要通过编译器将其转换成中间字节码文件,而不是机器码。这些字节码文件可以在任何平台上运行,因此Java是一种跨平台语言。字节码文件并不包含特定于某个平台的指令,而是由Java虚拟机(JVM)在运行时解释为机器码。 2. Java采用了解释加编译的混合执行方式。在运行时,JVM会对字节码进行解释并逐行执行,这样可以实现动态的内存管理和垃圾回收机制。另一方面,JVM也会对频繁执行的字节码进行编译优化,将其转换成本地机器码以提高执行速度。 3. 解释语言的特点之一是更加灵活和可移植。Java的解释执行过程可以在运行时动态地加载和更新类、接口等结构,从而实现灵活的扩展和更新,而无需重新编译整个程序。 4. 解释语言的另一个优点是易于调试和错误处理。由于Java源代码和字节码之间存在一定的映射关系,JVM可以提供更详细的错误信息和调试功能,使得开发人员能够更容易地定位和解决问题。 总结起来,Java是解释语言主要是因为它将源代码编译为字节码,然后通过JVM解释执行。这种执行方式使得Java具有跨平台、灵活、可扩展和易于调试等特点。 ### 回答3: Java是一种混合了解释和编译特性的语言。Java代码首先经过编译器将源码编译成字节码文件,然后通过Java虚拟机(JVM)将字节码解释为机器码并执行。所以可以说Java是半解释语言。 Java选择解释语言的原因有多个方面。首先,Java的平台无关性是其主要优势之一,解释语言可以在不同的平台上运行。通过字节码的解释,JVM可以将Java程序在各种操作系统上执行,而不需要重新编译。这为Java程序的跨平台开发和移植性来了极大的便利。 其次,解释语言使得Java程序更容易调试和测试。由于解释语言可以逐行执行代码,开发者可以在运行时检查变量的值、检测问题并通过修改代码进行即时的调试。这样可以大大提高开发效率和程序质量。 另外,解释语言动态特性也是Java选择解释语言的原因之一。Java程序可以在运行时进行属性和方法的动态绑定,允许程序在运行过程中进行添加、替换和移除等操作。这为Java提供了丰富的扩展能力和动态性。 虽然Java是解释语言,但是为了提高程序的性能,Java的字节码可以被即时编译器(JIT)编译成机器码,以进行更快速的执行。这使得Java在执行速度上与其他编译语言相媲美。 综上所述,Java之所以选择解释语言的方式,是为了实现跨平台、提高开发效率、增加动态特性和保持较高的执行性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值