JAVA程序运行原理——知其然,而知其所以然

来源:互联网 发布:php域名授权破解 编辑:程序博客网 时间:2024/04/30 20:27

最近看书被几个有意思的问题吸引:

你写java程序吗? 它的运行机制你懂多少?

你用eclipse开发吗?它的运行机制你懂多少?

你用tomcat 部署吗? 它的运行机制你懂多少?

你想过这些软件也是人开发出来的吗?依赖这么深入,哪天它不干了,你还干不干?

 

然后,让我就接着看了看,然后,让我们一起来看看java语言原理。【哈哈】

编译型语言   VS   解释型语言

编译型语言:

      一提到编译型语言,“高效率、高级语言”等各高词汇跃然纸上,But  why?

      编译型语言是通过专门的编译器,将高级语言【一次性翻译成】可被平台(如OS操作系统)执行的机器码,编译一次,脱离开发环境可独立运行,故效率高;但对编译器严重依赖,而不同操作系统所使用的编译器是各不相同的,所以造成了编译型语言可移植性差的特点。如同打包发布好的vs程序,不管放在windows哪个磁盘下,均可脱离vs执行;但把这个编译好的exe放到unix下,便是不可能正常set  up 的。这也就解释了它效率高,但跨平台可移植性差的特点。

解释型语言:

       同样的,解释型语言也有专门的解释器,将原程序解释成特定的平台可执行文件,不同的是,解释型语言不会进行整体的编译,而是把编译和解释混合在一起执行。但解释性语言跨平台性好,只需通过不同的解释器,将其解释成某平台可识别的指令即可。这是编译的过程无法做到的。

类型

原理

优点

缺点

编译型

通过专门的编译器,将高级语言一次性翻译成可被平台执行的机器码

编译一次,脱离开发环境可独立运行,故效率高

对编译器严重依赖,可移植性差

解释性

专门的解释器,将原程序解释成特定的平台指令

跨平台性好,只需通过不同的解释器,将其解释成某平台可识别的指令即可

编译和解释混合在一起执行,导致效率低

JAVA ,你是哪一种?

      在理清java原理之前,你不得不Know:

名称

描述

作用

特点

JVM

JAVA 虚拟机

用于提供java解释环境,形成可执行文件

不同平台JVM各有不同,但均提供相同接口

JRE

java运行环境

 

 

JDK

核心开发包

提供java编译器、运行相关环境、工具和类库

 

 

java原理:

      使用java进行编程,首先源程序会通过编译,将java编译成class字节码,【默认路径为该JRE运行环境路径下】,在通过解释形成可执行文件,所以java既是解释型语言,又是编译型语言。

      但它的精妙之处远不止于此。


     首先通过编译器编译,将源程序编译形成class文件,由于不同平台JVM提供相同接口,故即便是不同平台下将java编译成class文件,但通过相同接口的JVM进行解释,均可将该环境下的字节码解释形成该平台下的可执行的java文件,同时,由于不同操作系统的JVM提供的均相同接口,不同平台的编译器则只需要面对该JVM接口进行编译,这些都决定了java语言具有良好的跨平台性、移植性。

Java环境变量的配置:

     为什么需要进行配置环境变量,笔者不再赘述。通过理解上述原理,我们换个角度来分析java环境变量的配置。

【Path】

        在JDK的安装路径下,我们很容易发现bin文件下的javac、java命令——分别用于执行【编译】和【解释】的操作。配置path环境变量便可实现直接找到这两个命令并运行。

【ClassPath】

        而classpath变量,通过后来的学习得知,在jdk1.5以上版本便可以不用配置。首先要知道java源程序通过编译生成的class文件,默认会存储到JRE文件下,也就是java运行环境路径下,在1.5之前的jdk还没智能到可以自动找到编译好的类,进行下一步解释操作,故需要手动配置classpath,指明class文件路径,在执行java命令形成可执行文件。

【JavaHome】 

        另一个javahome再单独运行java程序时是不需要进行配置的,因为编译、解释均已通过javac 和java命令完成。但在tomcat、jboss部署时需要配置该环境变量。

 

       回顾以前的疑惑,不管是编程上,还是工具使用上,大部分都是因为不同的原理,为什么tomcat启动报错?那是因为咱没懂它只知知其然而已。

 

3 0
原创粉丝点击