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启动报错?那是因为咱没懂它只知知其然而已。
- JAVA程序运行原理——知其然,而知其所以然
- 原理-知其所以然
- 知其然知其所以然之——word2vector
- GIT原理,知其然,知其所以然
- GIT原理,知其然,知其所以然
- 知其然,知其所以然!
- 知其然 知其所以然
- 知其然,知其所以然!
- 知其然更要知其所以然
- 知其然,然后知其所以然
- 知其所以然
- 知其所以然
- IDA知其所以然
- 知其所以然
- java结果输出,知其所以然
- 要知其然还要知其所以然printChar
- 学习,不仅要知其然,更要知其所以然。
- 再回首-栈-知其然知其所以然
- PlayFramework 第一篇之配置环境
- 1611:The Suspects
- CRM-处理懒加载异常
- c笔记01---扩展名简介,linux 常用命令,vi 设置
- Win环境下的Axure汉化
- JAVA程序运行原理——知其然,而知其所以然
- 推荐40个优秀的免费CSS工具
- c笔记02---数据类型
- PHP 手册 语言参考 支持的协议和封装协议
- css 圆角矩形
- uva 10375 唯一分解定理
- Android 面试题目
- Struts2 的应用及其常用配置参数
- IIS 多网站,多域名共用80端口