学习 Java 你必须要知道的东西(一)【Java三大版本、编译型和解释型、JDK JRE JVM】

Java基础

一、Java三大版本

JavaSE

标准版(桌面程序、控制台开发...)

JavaME

嵌入式开发(手机、家电...)

JavaEE

企业级开发(web端、服务器开发...)

二、编译型 和 解释型

编译型

属于编译型语言的有:C、C++、Delphi等,其中选取C语言为代表来说明。首先,C编程的基本策略是,用程序把源代码文件转换为可执行文件。

解释型

属于解释型语言的有:Python、JavaScript 、 Perl 、Shell等,其中选取Python为代表来说明。首先,Python编程的基本策略是,用程序把源代码文件一行一行地转换为可执行代码。

总结

编译型语言执行的时候,CPU可直接读取可执行代码(机器语言),速度很快;
解释型语言执行的时候,需要解释器翻译一行,CPU执行一行,速度相对较慢;
编译型语言,不仅要根据不同CPU安装对应编译器,还需要根据不同操作系统选用应不同启动代码,不便利;
解释型语言,仅需要根据不同操作系统安装对应解释器,十分便利。

Java程序运行流程

三、JDK、JRE、JVM

JDK:Java Development Kit

Java开发环境,整个Java的核心,包含JRE、Java开发工具

JRE:Java Runtime Environment

​Java运行环境,包含虚拟机JVM、Java基础类库

JVM:Java Virtual Machine

虚拟机,java文件编译成字节码(class)文件后,字节码文件在JVM上运行
JVM内存区域划分:主要分为类装载器、执行引擎、运行时数据区
类装载器:每个JVM都由一个类加载子系统负责加载程序中的类和接口,并赋予唯一的名字。JVM的类装载器主要包括两种:启动类装载器和用户自定义类载器;启动类装载器是JVM实现的一部分,用户自定义类装载器则是Java程序的一部分,且必须是ClassLoader的子类。

执行引擎:用于执行字节码或者本地方法,主要执行技术有 解释、即时编译、自适应优化、芯片级直接执行,他们都是将高级语言翻译为机器语言;其中解释属于第一代JVM,即时编译JIT属于第二代JVM,自适应优化吸取第一代JVM和第二代JVM的经验,采用两者结合的方式,开始对所有的代码都采取解释执行的方式,并监视代码执行情况,然后对那些经常调用的方法启动一个后台线程,将其编译为本地代码,并进行仔细优化。若方法不再频繁使用,则取消编译过的代码,仍对其进行解释执行。

运行时数据区:主要包括 栈、堆、方法区、PC寄存器、本地方法栈

栈:虚拟机只会直接对 栈 执行两种操作:以帧(即方法)为单位 压栈、出栈;Java方法有两种返回方式,return和抛出异常,两种方式都会导致该方法对应的帧出栈和释放内存;
堆:存储对象实例以及数组值的区域,可以认为Java中所有通过new创建的对象的内存都在此分配,堆中的对象的内存需要等待GC进行回收,堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的;
方法区:存放加载的类信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的方法来获取信息时,这些数据都来源于方法区,同时方法区也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时会抛出OutOfMemory的错误信息;

Tips:栈内存中的数据线程私有,堆、方法区中的数据所有线程共享。
Java 跨平台

因此综上所述,Java “跨平台” 实际就是根据JVM的特性,字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,只要安装JRE即可运行Java程序(可以理解为 先编译再运行),达到 “一次编程到处运行” 的效果。

posted @ 2021-11-08 15:59  想上天的小旭旭呀  阅读(12)  评论(0)    收藏  举报