Java既是编译型语言,也是解释型语言。

首先先查找关于两种语言的特性及运行机制。

编译型语言与解释型语言的区别

编译型语言

什么是编译呢?通过查找资料,大概就是使用专门的编译器,针对特定的平台将高级语言源代码一次性“翻译”成可以被该平台及其执行的机器码,并包装成该平台能够识别的可执行程序的格式。ps:计算机当然只能看不懂我们敲得代码。

解释型语言

解释则是通过专门的解释器对源程序解释成平台需要的机器码并且立即执行,也就是每次执行之前,都需要解释一遍。

细数两者之差别

  • 编译生成的可执行程序可以脱离开发环境,(但是如果要移到另外一个平台上,则需要将源码复制另外平台,并重新编译),而解释型语言程序不能脱离解释器独立运行,但跨平台容易。
  • 编译型语言的执行速度那是相当的快,因为之前高级程序已经被编译成机器语言文件,比如windows下的exe文件,运行可执行程序的时候就不需要再进行编译了,而是直接运行。而解释型语言编写的程序每执行一次,就要翻译一次,效率偏低。
  • 编译型程序可以访问内存的任何区域,相对不安全,而解释型当然在这方面就很安全,很贴心。
  • 编译型程序运行消耗的内存比解释型少一点,而编译器在运行之前要先开相关的解释器,而且会进行许多代码优化,安全检查,消耗资源,占用内存。
  • 但是编译型代码真的好难好难,c语言就是典型的编译型语言,而解释器毕竟智能,你懂我意思吧。

C,C++,Objective-C,Pascal等高级语言都是编译型语言。

Ruby,Python等语言都是解释型语言。

而Java就很奇怪,真的很怪,又编译,又解释。

Java的奇怪之处

Java的编译

Java的编译并不会生成特定平台的机器码,而是与平台无关的字节码,也就是.class文件。

Java的解释

.class文件通过Java虚拟机,即JVM(Java Virtual Machine)翻译成本地的机器码才能执行,这就是解释的过程。

具体机制

  • 经过编译生成的字节码不面向平台,而是JVM,JVM作为一个交换器把一份字节码分别翻译成不同平台所需要的,这就是Java跨平台性体现的关键之处。

  • 下图为执行Java程序的步骤:

  • JDK中的JRE(Java Runtime Environment)提供了javac.exe对编写的.java文件进行编译,形成字节码文件,以及Java.exe加载Java类文件,并逐步对字节码文件进行编译。

在此鸣谢:

关于Java运行机制的更多相关文章

  1. Java运行机制及相关术语

    JVM java虚拟机(Java Virtual Machine)JVM可以实现java程序的夸平台运行,即运行的操作平台各不相同 JVM基本原理 java运行机制 编译型语言(如C.C++) 源文件 ...

  2. Java入土---Java运行机制及IDEA的安装使用

    Java运行机制及IDEA的安装使用 java程序运行机制 计算机高级语言分为编译型语言跟解释型语言,而java同时具有两者的特点. 可能对于新手来说,什么是编译,什么是解释; 简单来说,编译就是将代 ...

  3. JAVA运行机制

    这一篇我们来简单理解一下JAVA的运行机制 大概可以分为三大部分 1.编写程序 2.编译程序 3.运行程序 1.编写程序 编写程序就是我们前面说的源代码 这些源代码都有特殊的语法 例如main函数 他 ...

  4. HelloWorld与java运行机制

    HelloWorld 新建文件夹存放代码 新建一个java文件 文件后缀为.java Hello.java 注意文件拓展名改为java文件 编写代码 public class Hello{ #类名 p ...

  5. java运行机制、Jdk版本及Java环境变量

    一.语言特性 计算机高级语言按程序的执行方式可分为:编译型和解释型两种.编译型的语言是指使用专门的编译器,针对特定的平台(操作系统)一次性翻译成被该平台硬件执行的机器码,并包装成该平台可执行性程序文件 ...

  6. 基础知识《零》---Java程序运行机制及运行过程

    Java运行机制 Java虚拟机(Java Virtual Machine):Java虚拟机可以理解成一个以字节码为机器指令的CPU:对于不同的运行平台,有不同的虚拟机:Java虚拟机机制屏蔽了底层运 ...

  7. Java基础介绍运行机制笔记

    1. 基础知识点图解 编程语言核心结构:变量.基本语法.分支.循环.数组.…… Java面向对象的核心逻辑:OOP.封装.继承.多态.接口…… 开发Java SE高级应用程序:异常.集合.I/O.多线 ...

  8. java运行环境和运行机制

    先来介绍三个概念: JVM----JAVA virtual machine      java虚拟机:对字节码提供相同的接口,对操作系统提供不同的接口,以适应各个OS JRE----JAVA runt ...

  9. 《疯狂Java讲义》(二)---- Java程序的运行机制和JVM

    1. 运行机制 Java源文件(*.java)-----使用javac编译----编译成*.class文件----使用java解释执行----特定平台的机器码 2. 原理 负责解释执行字节码文件的就是 ...

随机推荐

  1. Unity事件系统

    # 1.前言Unity中事件/委托有着广泛的应用,本文通过封装一个简易的事件的系统,来统一管理消息的传递.此功能在简易应用或者事件较少的体现不出太好的作用,但是对于事件应用较多时,可以减少脚本之间的耦 ...

  2. vue-cli3没有config文件解决方案,在根目录加上vue.config.js文件

    module.exports = { /** 区分打包环境与开发环境 * process.env.NODE_ENV==='production' (打包环境) * process.env.NODE_E ...

  3. vuex状态管理详细使用方法

    1安装:vue ui或cnpm install vuex 2/使用import vuex from 'vuex' vue.use(vuex) var store = new Vuex.store({  ...

  4. Unity5-ABSystem(四):AssetBundle依赖

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lodypig/article/detai ...

  5. 初识mysql索引 - 小白篇

    :接触mysq也有两年左右的时间了,但是对该数据库的理解自认还比较初级,看过很多文章,也看过一些相关的书籍,依然小白....(这里个人总结是两点主要原因:1.对mysql的学习大部分都是源于看一些杂七 ...

  6. 《Effective Java》 读书笔记(八)避免使用Finalizer和Cleaner机制

    Finalizer和Cleaner并不等同于C++中的析构函数,是不确定多久会被调用的,甚至有时候可能不会被调用,因此除了作为一个安全网或者终止非关键的本地资源,不应该在Finalizer或Clean ...

  7. 一个自动管理项目的Makefile(C语言)

    Linux 是所有嵌入式软件工程师绕不过去的坎, makefile 是在Linux系统中绕不过去的坎. 花了几天时间初步学习和了解了makefile 的作用以及功能,并且制作了一个通用型的makefi ...

  8. 学习笔记37_MVC模板页

    ASPX母版页: 1.添加一个母版页,位置../Views/Shared,有 <asp:ContentPlaceHolder ID = "ContentPlaceHolder1&quo ...

  9. CSPS模拟 61

    T1 模拟 T2 ?? T3 哈希

  10. mysql-清除binlog日志命令

    记录一个清除MySQL里binlog日志的命令,可用在定时任务脚本里. 只保留1天前的日志: PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTER ...