精华内容
下载资源
问答
  • 也有人说Java解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型的。对于C和C++,它们经过一次编译之后,可以由操作系统直接执行,所以它们是编译型语言。而Java不一样,它首先由...

    有人说Java是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就无法执行。 也有人说Java是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型的。对于C和C++,它们经过一次编译之后,可以由操作系统直接执行,所以它们是编译型语言。而Java不一样,它首先由编译器编译成.class(字节码)文件,然后在通过JVM从.class文件中读一行解释执行一行,所以它是解释型的语言。也正是由于java对于多种不同的操作系统有不同的JVM,所以实现了真正意义上的跨平台。

    (1)Java语言的编译-->解释-->运行过程

    (2)JVM到这里,大家应该也都明白了。

    最后给出编译型语言和解释型语言的定义。 定义:编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。 解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!特点:编译型语言,执行速度快、效率高;依靠编译器、跨平台性差。 解释型语言,执行速度慢、效率低;依靠解释器、跨平台性好。 举例:编译型的语言包括:C、C++、Delphi、Pascal、Fortran 解释型的语言包括:Java、Basic、javascript.

    展开全文
  • java是一个半解释半编译型语言,早期java是通过解释器来执行,效率低下;后期进行优化,解释器在原本的c++字节码解释器基础上,扩充了模板解释器,效率有了明显提升;后来又加入了JIT(即时编译),效率就更加得到了...

    java是一个半解释半编译型语言,早期java是通过解释器来执行,效率低下;后期进行优化,解释器在原本的c++字节码解释器基础上,扩充了模板解释器,效率有了明显提升;后来又加入了JIT(即时编译),效率就更加得到了提升。

    解释器与编译器

    解释器与编译器两者各有优势:当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获取更高的执行效率。当程序发现运行环境中内存资源限制较大,可以使用解释执行节约内存,反之可以使用编译执行来提升效率。同时,解释器还可以作为编译器激进优化时的一个“逃生门”,让编译器根据概率选择一些大多数时候都能提升运行速度的优化手段,当激进优化的假设不成立,如加载了新类后类型继承结构出现变化、出现“罕见陷阱”(Uncommon Trap)时可以通过逆优化(Deoptimization)退回到解释状态继续执行(部分没有解释器的虚拟机中也会采用不进行激进优化的C1编译器担当“逃生门”的角色),因此,在整个虚拟机执行架构中,解释器与编译器经常配合工作如下图所示:

    09c719a8ef62

    img

    利用参数来指定虚拟机处于"解释模式"、"编译模式"还是"混合模式"。

    混合模式:

    java -version

    java version "1.8.0_101"

    Java(TM) SE Runtime Environment (build 1.8.0_101-b13)

    Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

    解释模式:

    java -Xint -version

    java version "1.8.0_101"

    Java(TM) SE Runtime Environment (build 1.8.0_101-b13)

    Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, interpreted mode)

    编译模式:

    java -Xcomp -version

    java version "1.8.0_101"

    Java(TM) SE Runtime Environment (build 1.8.0_101-b13)

    Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, compiled mode)

    解释器

    字节码解释器

    .java->javac->c++代码->硬编码(机器码)

    模板解释器

    .java->javac->硬编码(机器码)

    编译器

    JIT即时编译器

    09c719a8ef62

    图 2. 查看编译模式

    JIT编译器分类

    Client Compiler - C1编译器

    Client:-Client 模式启动时,速度较快,启动之后不如 Server,适合用于桌面等有界面的程序

    Server Compiler - C2编译器

    Server:-Server 模式启动时,速度较慢,但是启动之后,性能更高,适合运行服务器后台程序

    JIT编译过程

    当 JIT 编译启用时(默认是启用的),JVM 读入.class 文件解释后,将其发给 JIT 编译器。JIT 编译器将字节码编译成本机机器代码,下图展示了该过程。

    09c719a8ef62

    JIT 工作原理图

    热点代码(Hot)

    理解

    当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。

    热点代码的分类

    被多次调用的方法

    一个方法被调用得多了,方法体内代码执行的次数自然就多,成为“热点代码”是理所当然的。

    被多次执行的循环体

    一个方法只被调用过一次或少量的几次,但是方法体内部存在循环次数较多的循环体,这样循环体的代码也被重复执行多次,因此这些代码也应该认为是“热点代码”。

    上面提到的多次是一个不具体的词语,那到底是多少次才能成为热点代码呢?

    如何检测热点代码

    判断一段代码是否是热点代码,是否需要触发即使编译,这样的行为称为热点探测,热点探测并不一定知道方法具体被调用了多少次,目前主要的热点探测判定方式有两种:

    基于采样的热点探测:采用这种方法的虚拟机会周期性地检查各个线程的栈顶如果发现某个(或某些)方法经常出现在栈顶,那这个方法就是“热点方法”

    优点:实现简单高效,容易获取方法调用关系(将调用堆栈展开即可)

    缺点:不精确,容易因为因为受到线程阻塞或别的外界因素的影响而扰乱热点探测

    基于计数器的热点探测:采用这种方法的虚拟机会为每个方法(甚至是代码块)建立计数器,统计方法的执行次数,如果次数超过一定的阈值就认为它是“热点方法”

    优点:统计结果精确严谨

    缺点:实现麻烦,需要为每个方法建立并维护计数器,不能直接获取到方法的调用关系

    HotSpot使用第二种 - 基于计数器的热点探测方法。

    确定了检测热点代码的方式,如何计算具体的次数呢?

    计数器的种类(两种共同协作)

    方法调用计数器:这个计数器用于统计方法被调用的次数。默认阈值在 Client 模式下是 1500 次,在 Server 模式下是 10000 次

    回边计数器:统计一个方法中循环体代码执行的次数

    了解了热点代码和计数器有什么用呢?达到计数器的阈值会触发后文讲解的即时编译,也就是说即时编译是需要达到某种条件才会触发的,先写结论,后文讲解什么是即时编译器。

    两个计数器的协作(这里讨论的是方法调用计数器的情况):当一个方法被调用时,会先检查该方法是否存在被 JIT(后文讲解) 编译过的版本,如果存在,则优先使用编译后的本地代码来执行。如果不存在已被编译过的版本,则将此方法的调用计数器加 1,然后判断方法调用计数器与回边计数器之和是否超过方法调用计数器的阈值。如果已经超过阈值,那么将会向即时编译器提交一个该方法的代码编译请求。

    当编译工作完成之后,这个方法的调用入口地址就会被系统自动改成新的,下一次调用该方法时就会使用已编译的版本。

    09c719a8ef62

    image.png

    分层编译

    原因:由于即时编译器编译本地代码需要占用程序运行时间,要编译出优化程度更高的代码,所花费的时间可能越长;而且想要编译出优化程度更高的代码,解释器可能还要替编译器收集性能监控信息,这对解释执行的速度也有所影响,为了在程序启动响应速度与效率之间达到最佳平衡,HotSpot虚拟机将会逐渐启用分层编译,该概念在JDK1.6时期出现,在JDK1.7的Server模式虚拟中作为默认编译策略被开启。

    层次:

    0:解释代码

    1:简单C1编译代码

    2:受限的C1编译代码

    3:完全C1编译代码

    4:C2编译代码

    查看和分析即时编译结果

    一般来说,虚拟机的即时编译过程对用户程序是完全透明的,虚拟机通过解释执行代码还是编译执行代码,对于用户来说没有什么影响(执行结果没有差异,速度上会有很大的差异),大多数情况下用户也没有必要知道,但是虚拟机也提供了一些参数用来输出即时编译行为。

    示例代码:

    public class Test {

    public static final int NUM = 15000;

    public static int doubleValue(int i){

    return i * 2;

    }

    public static long calcSum(){

    long sum = 0;

    for (int i = 1; i <= 100; i++){

    sum += doubleValue(i);

    }

    return sum;

    }

    public static void main(String[] args) {

    for (int i = 0; i < NUM; i++){

    calcSum();

    }

    }

    }

    要知道某个方法是否被编译过,可以使用参数-XX:+PrintCompilation要求虚拟机在即时编译时将被编译成本地代码的方法名称打印出来(带%说明是由回边计数器触发的OSR编译)

    我们还可以加上-XX:+PrintInlining来要求虚拟机输出方法内联信息(备注:-XX:+PrintInlining需要加-XX:+UnlockDiagnosticVMOptions)

    323 102 3 com.yirendai.lab.athenschool.jit.Test::doubleValue (4 bytes)

    323 103 1 com.yirendai.lab.athenschool.jit.Test::doubleValue (4 bytes)

    323 102 3 com.yirendai.lab.athenschool.jit.Test::doubleValue (4 bytes) made not entrant

    323 104 3 com.yirendai.lab.athenschool.jit.Test::calcSum (26 bytes)

    @ 12 com.yirendai.lab.athenschool.jit.Test::doubleValue (4 bytes)

    324 105 % 4 com.yirendai.lab.athenschool.jit.Test::calcSum @ 4 (26 bytes)

    @ 12 com.yirendai.lab.athenschool.jit.Test::doubleValue (4 bytes) inline (hot)

    325 106 4 com.yirendai.lab.athenschool.jit.Test::calcSum (26 bytes)

    @ 12 com.yirendai.lab.athenschool.jit.Test::doubleValue (4 bytes) inline (hot)

    327 104 3 com.yirendai.lab.athenschool.jit.Test::calcSum (26 bytes) made not entrant

    第一列含义为时间戳,第二列中的编号是编译标识,第三列为编译级别

    里面字符的参数含义:

    b Blocking compiler (always set for client)

    * Generating a native wrapper

    % On stack replacement (where the compiled code is running)

    ! Method has exception handlers

    s Method declared as synchronized

    n Method declared as native

    made non entrant compilation was wrong/incomplete, no future callers will use this version

    made zombie code is not in use and ready for GC

    @的含义:

    A “place” in a Java method is defined by its bytecode index (BCI), and

    the place that triggered an OSR compilation is called the “osr_bci”.

    An OSR-compiled nmethod can only be entered from its osr_bci; there

    can be multiple OSR-compiled versions of the same method at the same

    time, as long as their osr_bci differ.

    要理解made not entrant,不得不提codeCache

    public int method(boolean flag) {

    if (flag) {

    return 1;

    } else {

    return 0;

    }

    }

    从解释执行的角度来看,他的执行过程如下:

    09c719a8ef62

    img

    但经过即时编译器编译后的代码不一定是这样,即时编译器在编译前会收集大量的执行信息,例如,如果这段代码之前输入的flag值都为true,那么即时编译器可能会将他变异成下面这样:

    public int method(boolean flag) {

    return 1;

    }

    即下图这样

    09c719a8ef62

    img

    但可能后面不总是flag=true,一旦flag传了false,这个错了,此时编译器就会将他“去优化”,变成编译执行方式,在日志中的表现是made not entrant

    为何 HotSpot 虚拟机要使用解释器与编译器并存的架构?

    解释器与编译器两者各有优势

    解释器:当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。

    编译器:在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获取更高的执行效率。

    两者的协作:在程序运行环境中内存资源限制较大时,可以使用解释执行节约内存,反之可以使用编译执行来提升效率。当通过编译器优化时,发现并没有起到优化作用,,可以通过逆优化退回到解释状态继续执行。

    展开全文
  • 1、首先让我们先弄清楚什么是编译型语言,什么是解释型语言?编译型语言:编写好程序以后,首先需要编译器进行编译,统一转化成机器码,然后这个编译完的文件,可以放在操作系统直接执行解释型语言: 程序是边运行边...

    1、首先让我们先弄清楚什么是编译型语言,什么是解释型语言?

    编译型语言:编写好程序以后,首先需要编译器进行编译,统一转化成机器码,然后这个编译完的文件,可以放在操作系统直接执行

    解释型语言: 程序是边运行边进行机器码转化(转化完后cpu执)

    引用“李白写代码”(【这就好像我们吃一袋瓜子,解释性语言是剥一颗吃一颗,直到吃完;而编译性语言是先把一袋瓜子全部剥完,剥出肉,然后一口吃进去。你说这两种模式对于最后吃的人来说,哪种会比较快,结果不言而知吧!】这里的一袋瓜子其实就是一段程序,吃瓜子的人就是操作系统。)

    2、什么是模板解释器、字节码解释器(前提都是直接读取的.class文件)

    字节码解释器:读取字节码,转换为c++代码,再由c++代码转换为硬编码,以此类推。其字节码解释器主要的缺点是执行比较慢(Java字节码->c++代码->硬编码);

    模板解释器:刚开始的运行原理和字节码解释器一样,只不过模板解释器里面有个特殊的机制-即时编译(即时编译底层原理:1、申请一块内存:可读可写可执行

    2、将处理new字节码的硬编码拿过来

    3、将处理new字节码的硬编码写入申请的内存

    4、申请一个函数指针,用这个函数指针执行这块内存

    5、调用的时候,直接通过这个函数指针调用就可以了)

    (Java字节码->硬编码)

    3、模板解释器和字节码解释器的区别及其应用场景

    由于模板解释器已经提前生成了字节码到硬编码的映射,当读取到一条字节码,只需要去一张映射表中,找到当前字节码对应的机器指令,这个时候,直接执行机器码。而字节码解释器,是读取到一条字节码,然后把其翻译成C++代码,然后再由C++代码生成机器指令,这样的执行过程较模板解释器来说,执行效率就没那么高。

    补充:上面所说的模板解释器提前生成的字节码到硬编码的过程,其实是在程序启动的时候,生成的,如果当前项目较大的话,启动程序的时候,一定需要很长的时间,因为在启动的时候需要生成字节码到硬编码的映射,当然这样做的目的是,执行效率会更高。

    4、JVM的三种运行模式

    -Xint 纯字节码解释器(1)

    -Xcomp 纯模板解释器(2)

    -Xmixed 字节码解释器 + 模板解释器(3)

    注:JVM默认是混合模式,我们可以执行下java -version查看下,可以通过java -Xint version来设置JVM的运行模式为纯字节码解释器。上面三个中执行模式中性能排比是什么呢,321或者是231,直接影响2和3的性能因素是,程序的大小。如果是大程序的话,可以直接采用混合模式,启动时间较快,编译优化器可以根据热点代码等进行优化。

    f8c5ce72ff85c0f6cf1654dcb9055d2e.png

    基于上面的模板解释器运行模式,我们在现实生活中会遇到这样的问题,比如,在用解释器解释字节码时,有时候会出现,相同的代码会被执行多次,这样的话,就会导致,花费了很多时间,浪费了很多资源,当然,既然出现问题了,那就有相对应的解决方案,即时编译器诞生了,即时编译是一个动态编译的过程,即时编译器其实就是监测解释器执行的代码块,它会把代码块对应的执行次数记录下来,当执行次数很多的时候,就会优化对应的热点代码,并把对应的机器指令更新在映射表中,这样在下次执行到类似的代码块时,就可以直接运行更新了的的机器指令。接下来让我们再来看下即时编译器吧 ^ _ ^

    5、即时编译器(JIT,即时编译器生成的代码就是给模板解释器用的)

    HotSpot虚拟机内置了两个即时编译器,分别称为Client Compiler和Server Compiler,习惯上将前者称为C1,后者称为C2。

    c1

    1、触发的条件相对C2比较宽松:需要收集的数据较少

    2、编译的优化比较浅:基本运算在编译的时候运算掉了

    String s1 = "1"; String s2 = "2"; final String s3 = s1 + s2;//按理来说这一步应该会产生一个新的String对象,但是编译器判断是final类型,直接会将s1+s2替换为“12”

    3、c1编译器编译生成的代码执行效率较C2低

    c2

    1、触发的条件比较严格,一般来说,程序运行了一段时间以后才会触发

    2、优化比较深(优化汇编指令)

    3、编译生成的代码执行效率较C1更高

    混合编译

    程序运行初期触发C1编译器

    程序运行一段时间后触发C2编译器

    Client 编译器模式下,N 默认的值 1500(N表示热点代码的次数)

    Server 编译器模式下,N 默认的值则是 10000

    6、即时编译触发的条件:热点代码(存放在方法区)

    在程序运行期间,根据对热点字节码的探测(运行次数超过某个阀值的代码),将这部分热点代码进行特别的优化,将其直接编译为本地机器码执行并缓存。其使用的定期清理算法是LRU,最近最久未使用算法

    java -client -XX:+PrintFlagsFinal -version | grep CICompilerCoun //查看当前执行即时编译的线程个数,intx CICompilerCount表示个数

    7、即时编译器是如何运行的呢?

    将即时编译任务(即函数弹出栈的次数)写入一个队列中;

    VM_THREAD 读取任务,并运行

    注:所以即时编译是一个异步的操作

    8、即时编译的优化方式

    逃逸分析:什么叫逃逸呢?逃逸就是这个对象的作用域不是局部的,逃逸的对象优化工作很困难。

    9、基于逃逸分析,JVM开发了三种优化技术

    栈上分配:逃逸分析如果是开启的,栈上分配就是存在的(不发生gc的情况下,查看堆上的对象个数,如果是程序中创建的个数,就存在栈上分配)

    标量替换:标量:不可再分,java中的基本类型就是标量

    import lombok.Data; public class ScalarSubstitution { public static void main(String[] ars) { Point point = new Point(); System.out.println(point.x); //编译器会替换成System.out.println(0); System.out.println(point.y); //同上 } } @Data class Point { public int x; public int y; }

    锁消除:

    public void test(){ synchronized (new Object()){ //编译器判定这个对象是个局部变量,是线程私有的,所以就没必要加锁,会直接把锁去掉 System.out.println("zong"); } }

    10、了解了上面的这些知识点以后,对于如果别人问你什么是半编译半解释型语言,知道该怎么回答了么?

    编译指的是javac编译生成的字节码文件.class,但为什么是半呢,是因为生成的这个.class文件操作系统不能直接执行,需要解释器进行解释后,才可能运行,所以才把java叫做半编译半解释型语言。

    本文地址:https://blog.csdn.net/Zong__Zong/article/details/108020997

    如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

    展开全文
  • JAVA到底是解释型语言还是编译型语言以下文字资料是由(历史新知网www.lishixinzhi.com)小编大家搜集整理后发布的内容,让我们赶快一起来看一下吧!JAVA到底是解释型语言还是编译型语言是属于编译型语言。因为需要...

    JAVA到底是解释型语言还是编译型语言以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    6225942883b81dde163304ace998fdc7.png

    JAVA到底是解释型语言还是编译型语言

    是属于编译型语言。因为需要编译成位元组码以后才能在jvm上执行。

    JavaScript到底是解释型语言还是编译型语言

    编译型语言是把原始码先编译为机器码(也就是所谓的可执行程式,比如windows系统的exe档案),执行的时候电脑只需直接把机器码交给CPU执行即可。编译型语言的特点是执行速度快,效率高。缺点是可移植性差。

    解析型语言则是直接以原始码的形式出现,执行的时候再实时解析为机器码并执行。所有的指令码语言(当然也包括JavaScript)都是解析型语言。这类语言有个最大特点就是它们都不能独立存在,必须寄生在其他程式(比如浏览器)内。

    请问C#是编译型语言还是解释型语言?

    1、编译型语言在程式执行之前,有一个单独的编译过程,将程式翻译成机器语言,以后执行这个程式的时候,就不用再进行翻译了。

    2、解释型语言,是在执行的时候将程式翻译成机器语言,所以执行速度相对于编译型语言要慢。

    C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。

    Python谁是编译型语言,谁是解释型语言

    python是解释型语言,c,java是编译型语言。(一般而言)

    python也可以编译,但以解释为主。c也可以解释,但以编译为主。其中关系比较复杂。

    如何区分编译型语言,解释型语言

    编译型语言的程式在执行之前会经过编译生成一个可执行档案,在磁碟的某个资料夹里面可以看到有一个EXE档案;而解释型语言的程式不需要编译,是边解释边执行

    C/C++,Java,Python谁是编译型语言,谁是解释型语言

    总的来说,如今编译型语言、解释性语言的分界线不再那么明显,应该避免把语言简单归类为“编译型”和“解释型”。

    我们最开始说C/C++是编译型语言,原因是相对于Ruby这样的解释性语言,C/C++需要通过编译器,把原始码编译成中间档案(.o和.obj),然后通过联结器和汇编器生成机器码,即一系列基本操作序列,可以直接让计算机执行。这些机器码也就是我们通常的exe档案。

    我们以Ruby为例谈一下解释型的语言,程式从原始码到被计算机执行,也要经历上述步骤。不同的地方在于,C/C++会把那些从原始码“变”来的机器码(即exe档案)储存起来,而Ruby直接将这些生成的基本操作序列(Ruby虚拟机器)指令丢给Ruby虚拟机器执行然后产生动作了。这就是我们所说的解释型语言。

    所以我们看到的现象是,编译型语言要先编译再执行,而解释性语言直接“执行”原始码。

    回到最开始的问题,如果以是“否储存机器码为exe档案”为区分,那么Java和Python都属于解释型语言。

    但具体来讲,Java和Python是有很大不同的。Java程式码从源程式到执行,要经过的过程是:编译器(javac)把原始码转化为位元组码,然后直译器(Java.exe)把位元组码转换为计算机理解的机器码来执行,其过程中没有把“机器码储存为exe”的行为(这样讲也不完全准确,下面会讲到)。其中编译器和直译器都是Java虚拟机器(JVM)的一部分,由于针对不同的硬体与OS,Java直译器有所不同,因此可以实现“一次编译、到处执行”。所以JVM是Java跨平台特性的关键所在。

    Java虚拟机器(JVM)一种用于计算机装置的规范,可用不同的方式(软体或硬体)加以实现。编译虚拟机器的指令集与编译微处理器的指令集非常类似。Java虚拟机器包括一套位元组码指令集、一组暂存器、一个栈、一个垃圾回收堆和一个储存方法域

    对于Python,其原始码到执行也要经过如下过程:原始码--->位元组码--->机器码。跟Java相同的是,其过程中也没有把“机器码储存为exe”的行为。与Java不同的是,Python使用的虚拟机器是基于其他语言实现的,比如我们一般使用的Python实际为Cpython,也就是其虚拟机器由C实现,这个虚拟机器负责把Python原始码编译为位元组码,再解释执行。另外,还有Jypython、Ironpython等。

    编译型语言与解释型语言分别有哪些

    编译型程式语言需要把原始码编译成可执行档案,解释性程式语言只要把原始码编译成中间程式码,用虚拟机器解析就行了.

    c#和Java哪个是是编译型语言?哪个是解释型语言?

    C#是编译,JAVA是解释

    解释型语言和编译型语言的区别与不同

    1.编译型语言在程式执行之前,有一个单独的编译过程,将程式翻译成机器语言,以后执行这个程式的时候,就不用再进行翻译了。

    2.解释型语言,是在执行的时候将程式翻译成机器语言,所以执行速度相对于编译型语言要慢。

    3.C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。

    4.虽然Java程式在执行之前也有一个编译过程,但是并不是将程式编译成机器语言,而是将它编译成位元组码(可以理解为一个中间语言)。

    在执行的时候,由JVM将位元组码再翻译成机器语言。

    5.指令码语言一般都有相应的指令码引擎来解释执行。 他们一般需要直译器才能执行。JAVASCRIPT,ASP,PHP,PERL,Nuva都是指令码语言。C/C++编译、连结后,可形成独立执行的exe档案。

    解释型语言跟编译型语言的区别在哪里?

    编译型就是编译的时候直接编译成机器可以执行的程式,但不能跨平台吧

    解释型语言就是编译成中间程式码程式,在执行时靠翻译程式一起执行,可以跨平台,中间程式码一样,翻译程式只要各平台一个,就可以。

    .的framework,java的jre就是这类翻译程式

    分页:123

    展开全文
  • 首先什么是编译型语言和解释型语言?计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。...
  • 1.编译型语言和解释型语言 编译型语言 定义:在程序运行之前,通过编译器将源程序编译成机器码(可运行的二进制代码),以后执行这个程序时,就不用再进行编译了。 优点:编译器一般会有预编译的过程对代码进行优化。...
  • 编译型语言 定义:在程序运行之前,通过编译器将源程序编译成机器码(可运行的二进制代码),以后执行这个程序时,就不用再进行编译了。 优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不...
  • 二、你可以说它是解释型的:因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的,那也就算是解释的了。三、但是,现在的JVM为了效率,都有一些JIT优化。它又会把.class的二进制代码编译...
  • Java既不属于传统的编译型语言,也不属于解释型语言Java是先编译成“.class”字节码文件,然后再利用JVM虚拟机进行解释执行的,所以Java即可以说成编译型,也可以说成解释型。Java特点1、简单性Java看起来设计得很...
  • 这样看来,Java程序经过了编译和解释执行这两个过程,所以说他是半编译半解释型语言。 我们再来理解一下这个过程中JVM即Java虚拟机的作用。在这个过程中,各个平台的JVM将相同的字节码文件解释成对应平台可以执行的...
  • 编译型和解释型语言的介绍编译型语言:编译型语言是源代码要经过编译器编译处理,生成目标机器码,这个机器码是一个二进制代码,是给看的机器看的,让它知道自己要干哪些活,而且这个机器码会保留,下次运行这段代码...
  • 也有人说Java解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型的。对于C和C++,它们经过一次编译之后,可以由操作系统直接执行,所以它们是编译型语言。而Java不一样,它首先由...
  • Java既不属于传统的编译型语言,也不属于解释型语言Java是先编译成“.class”字节码文件,然后再利用JVM虚拟机进行解释执行的,所以Java即可以说成编译型,也可以说成解释型。Java特点1、简单性Java看起来设计得很...
  • 展开全部概念:编译型...解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!区别:编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。如C、C++、Delphi、 Pascal,Fortran。解释型语言,执...
  • 虽然Java解释型语言,但随着随着(???????????)编译器技术的发展,Java程序的运行速度越来越接近于C 等编译型语言。答: JIT;即时编译器;即时Intercultural Adaptation is a short-term adaptation process into a ...
  • 主要区别: 编译型语言在全部完成编译后才可以在平台上运行,解析型语言是在运行期间才发生编译,前者运行速度快,后者的跨平台性好。 编译型语言 使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译...
  • 也有人说Java解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型的。对于C和C++,它们经过一次编译之后,可以由操作系统直接执行,所以它们是编译型语言。而Java不一样,它首先由...
  • 什么是编译型语言,什么是解释型语言java可以归类到那种?计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序。翻译的方式有两种,一...
  • 编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言, 而...
  • 在解释这个问题之前首先要知道什么是编译型语言和解释型语言 计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成...
  • 关于Java到底是解释型语言还是编译型语言还是二者的集合?首先理解一下何为解释型语言和编译型语言计算机高级语言类型主要有编译型和解释型两种:编译型语言:在程序运行之前,有一个单独的编译过程,将程序翻译成...
  • Java是一门半编译半解释型的跨平台语言,那么这个半编译与半解释是怎么回事呢?下面的文章将你详细进行剖析。 通常来说,我们的Java程序在本地机运行的过程中会产生out/target的文件夹,这些文件夹下存储着我们...
  • 然后就可以知道为什么Java解释性语言+编译型语言。通过学习,我们知道了,Java园代码经过javac转成class类文件,然后通过类加载器加载到运行时数据区,class文件是一种很特殊的文件,只能通过JVM来翻译,可以说...
  • 而是为什么Java是一门面向对象的编程语言?笔者根据自己的经验,尝试为大家解释这个问题。首先什么是对象?这里的“对象”与我们中文概念上的“对象”是有差异的,我们中文普遍意义上的对象是指“标的物”,被翻译成...
  • java是通过javac命令将.java文件编译成.class文件,再通过java虚拟机翻译.class文件解释成机器能够识别的机器码。c和c++则是编译型语言,编译后可以生产机器能够直接运行的机器码。javascript则是解释型语言 ...
  • 你可以说它是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的,那也就算是解释的了。但是,现在的JVM为了效率,都有一些JIT优化。它又会把.class的二进制代码编译本地的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 159,739
精华内容 63,895
关键字:

为什么java是解释型语言

java 订阅