JAVA程序运行原理——知其然,而知其所以然
最近看书被几个有意思的问题吸引:
你写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程序运行原理——知其然,而知其所以然相关推荐
- HelloWord以及Java程序运行原理
目录 第一个Java程序,HelloWorld Java程序是如何运行的 第一个Java程序,HelloWorld 创建文件 HelloWorld.java(文件名需与类名一致) public cla ...
- JAVA程序运行原理分析
- java原理教程,java基础之运行原理(一),java基础运行原理
java基础之运行原理(一),java基础运行原理 java的核心配置:JDK JDK主要包括三个部分 1.Jre:java的运行环境 2.Java的工具:java的编译器(java.c.exe). ...
- 【Java开发语言 01】第一章 Java语言概述(基础常识+Java语言概述+Java程序运行机制及运行过程+Java语言环境的搭建+开发体验hello world+错误:编码GBK的不可映射字符)
java入门-第一章Java语言概述 1基础常识 软件开发 人机交互方式 常用的DOS命令(win系统,有一些直接通过命令执行的) 2 Java语言概述 什么是计算机语言 关于面向对象和面向过程 Ja ...
- No.2第一章 启航 | Flink 知其然,知其所以然
|文末 点击[在看]留言 反馈 | Flink知其然部分共有三个章节,其中 第一章 启航 部分会 从Flink的应用场景切入,让大家清楚的判断自己的业务场景是否适合使用Flink,同时介绍Flink的 ...
- 【转】可解释推荐系统:知其然,知其所以然
原文标题:"可解释推荐系统:知其然,知其所以然" 原文地址:可解释推荐系统:知其然,知其所以然 又是需要学习的地方 近几年,人工智能的可解释性问题受到了来自政府.工业界和学术界的广 ...
- No.3 课程综述 | Flink 知其然,知其所以然
|文末 点击[在看]留言 反馈 | 本节会向大家介绍本课的内容是如何安排的,每个部分要达成的目标和每个具体章节的内容细节摘要!让大家在进行课程学习之前对课程有一个整体了解. 课程综述 <Apac ...
- No.1 序 | Flink 知其然,知其所以然
课程综述 <Apache Flink 知其然,知其所以然>课程,在内容上会先对Flink整体架构和所适用的场景做一个基础介绍,让你对Flink有一个整体的认识!然后对核心概念进行详细介绍, ...
- AI赋能传统行业:知其然并知其所以然 - 专访平安科技美国研究院院长韩玫
????点击上方蓝字星标"Robinly",获取更多重磅AI访谈 Robin.ly 是立足硅谷的视频内容平台,服务全球工程师和研究人员,通过与知名人工智能科学家.创业者.投资人和领 ...
- java 程序运行过程 简介
这里的Java程序运行过程,是指我们编译好代码之后,在命令行开始执行java xxx命令,到java程序开始执行起来的这一过程,我们称其为运行时. 第一步,操作系统解析我们输入的java xxx命令, ...
最新文章
- xp/win7,添加开机启动项
- ubuntu系统无法ssh登录--安装openssh
- JAVA知识总结目录
- one thread one loop
- Jupyter中打印所有结果的解决办法
- Android ListView的基本应用
- 关于Synchornized,Lock,AtomicBoolean和volatile的区别介绍
- Android 怎么退出整个应用程序?[转]
- java基于ssm的个人博客系统_一个基于 Spring Boot 的开源免费博客系统
- 机器学习(周志华)——决策树问题
- 创建loop15设备挂载镜像文件(.img)
- Win Form不能响应键盘事件
- Julia:关于push 与 Array 和Dict 数据结构
- 网课查题接口 搜题公众号对接题库教程 (附赠题库接口)
- CVE-2021-1675 Windows Print Spooler权限提升漏洞复现
- python中的ide是什么意思_用于Python的IDE是什么?
- 从12306.cn谈大网站架构与性能优化
- 电脑屏幕亮度,细说电脑屏幕亮度怎么调
- java读取execle
- HDU-5238 Calculator(线段树+中国剩余定理)