当前课程知识点:JAVA程序设计进阶 > 第六章 Java虚拟机 > 6.1 Java虚拟机概念 > Video
这一节我们将介绍
Java虚拟机的概念
包括它的体系结构
和它的生命周期
我们首先来看一下
什么是Java虚拟机
Java虚拟机是一个想象中的机器
在实际的计算机上
通过软件模拟来实现
Java虚拟机有自己想象的硬件
比如说处理器堆栈 寄存器
还有相应的指令系统
如果把我们的Java程序
比喻成为一辆汽车的话
那我们Java虚拟机
就是运行这辆汽车的道路
那Java虚拟机有一个非常厉害的地方
就是说它已经在不同的计算机上面
都已经实现了它的Java虚拟机
那它的作用就相当于是
我们这个搭建桥梁的部队
那它就是逢山开路逢水架桥
那我们为什么一定要实现
这个Java虚拟机
或者为什么一定要用Java虚拟机
来运行我们的Java程序
那这个里面一个最主要的原因
就是要实现Java的跨平台特性
那我们都知道Java程序
它可以运行在不同的操作系统之上
那之所以能够这么做
实际上是因为这个Java的提供者
把我们的Java平台实现在很多的
计算机和操作系统之上
那当我们的Java原代码
编译完成了以后
我们只需要把我们原代码
编译成为这个字节码
也就是我们Java的
这个目标代码
那这样的一个目标代码
可以在网络上进行传播
那当它碰到这个Java虚拟机的时候
这些Java代码就可以在这上面
进行运行
如果把我们的计算机的
这个硬件到软件系统
简单的分成这四个层面的话
可以从下面的硬件层
其次是操作系统层
接着是Java平台层
再上面是应用程序层
那我们大家最常见的硬件层的话
它所采用的应用是X86的这个芯片
那再往上我们通常用的比较多的是
windows操作系统
然后在windows操作上
有一个Java虚拟机
然后我们就可以运行Java应用程序了
如果我们的硬件的芯片组
是SPARC的话
它在操作系统上面
可以运行UNIX Linux
那在这之上的话
我们同样可以架设我们的Java虚拟机
然后运行我们的Java应用程序
那如果是一些嵌入式的
这个硬件系统的话
那它的芯片组
可能是MIPS或者是PPC
那它的操作系统层
可以是一些时时的操作系统
但在这个上面一样可以架设Java虚拟机
然后就可以去运行Java应用程序了
那从这张图上可以看出来
只要在不同的硬件和操作系统上
分别去实现我们的Java虚拟机
那我们的Java应用程序
就可以在不同的计算机上
去进行运行
所以我们Java虚拟机
正是实现Java跨平台性的关键
我们来看一看Java虚拟机
它的生命周期是怎样的
那当我们开始运行一个
一个虚拟机的时候
它都有一个非常清晰的任务
这个程序在开始执行的时候
它就会运行它相应的Java代码
当然我们在运行相应的
Java代码的时候
最主要是要通过我们的命令
来启动我们的Java虚拟机
如果大家曾经在命令行底下
去启动Java虚拟机的话
你其实用的命令就是Java
后面跟着某某类
那这个Java其实就是启动了
Java虚拟机
那Java虚拟机它要去开始运行的时候
它必须从我们提供的类的main方法
来开始运行
那这个main方法
之前大家已经用的很多了
那它必须是一个有固定格式的
main方法
必须是public statlc vold main
然后它的参数是String args
是一个字符串数组
那在这个Java程序运行过程当中
main方法就是程序的起点
那它被执行的线程初始化为
程序的初始线程
那我们程序当中的其他线程
都是由它来启动的
那我们可以把我们Java当中的线程
分为两种
一种叫守护线程也叫daemon
另一种叫普通线程
也可以称之为nondaemon
那守护线程是Java虚拟机
自己使用的线程
比如说我们后面要讲到的
这个负责垃圾回收的这个线程
那它就属于一个守护线程
那我们在写程序过程当中
也可以把自己的程序
设置成为守护线程
那往往的话
我们包含main方法的初始线程
它一般不是初始线程
如果我们的Java虚拟机中
还有普通的线程在执行的话
我们的Java虚拟机就不会停止
当然如果我们的程序
有足够的权限的话
也可以调用exit方法
来去终止这个程序的执行
下面我们来看一下Java虚拟机的
体系结构
在Java虚拟机当中
它的规范定义了一系列的子系统
内存区域 数据类型和使用指南
那所有这些组件
都构成了我们Java虚拟机的
内部结构
那它不仅仅为我们的
虚拟机的实现
提供了非常清晰的内部结构
更是严格规定了Java虚拟机
所实现的外部行为
比如说我们每一个Java虚拟机
都有一个类加载子系统
英文简称为class loader subsystem
那它的功能是负责
加载程序中的类型
比如说一个class
或者一个借口interface
并赋予它唯一的名字
每一个Java虚拟机
都有一个执行引擎execution englne
负责来执行我们加载类中
所包含的指令
那在Java虚拟机中
我们都会使用到哪些数据类型呢
Java虚拟机对此都有非常明确的
这个确定和定义
我们数据类型的操作
都是在Java虚拟机当中
当然是规范中严格定好的
它的数据类型
可以分为原始数据类型
primitive types
和引用数据类型reference type
那引用类型的话
依赖于它实际的对象
它不是对象本身
而原始数据类型
不依赖于任何东西
它们就是本身所表示的这个数据
那么如果在之前
大家学的过程当中也知道
我们的原始数据会包括四类八种
比如说我们有整型类的
会包括byte short int long
如果我们是浮点数列的话
包括float double
如果我们是字符型的话
我们就会char
如果是布尔的话
是包括boolean
所以这个原始数据类型四类八种
而引用数据类型的话
就比较丰富了
那你自己定义的任何一个类的话
它都可以成为一个引用类型
那在Java虚拟机当中
还存在着一个
不能使用的原始数据类型
叫返回值类型 return value
这种类型被用来实现
Java程序中的finally Classes
那当我们用到引用类型的时候
它可以被创建为这么几种类型
一种是类类型
就是class type
另外一类是接口类型
也就是interface type
此外还有数组类型 array type
那之前在我们学习过数组的
基本概念的时候
其实大家应该明白
我们所定义的任何一个数组
那其实在Java中实现的时候
都是用reference来帮助它实现的
那上述这三种类型
都引用被动态创建的对象
那当引用类型
这个它的引用在null时
说明没有引用任何的具体的对象
那这一节的内容
我们就介绍到这里
-1.0 导学
--Video
-1.1 线程的基本概念
--Video
-1.1 线程的基本概念--作业
-1.2 通过Thread类创建线程
--Video
-1.2 通过Thread类创建线程--作业
-1.3 线程的休眠
--Video
-1.3 线程的休眠--作业
-1.4 Thread类详解
--Video
-1.5 通过Runnable接口创建线程
--Video
-1.5 通过Runnable接口创建线程--作业
-1.6 线程内部的数据共享
--Video
-2.0 导学
--Video
-2.1 线程同步的思路
--Video
-2.2 线程同步的实现方式—Synchronization
--Video
-2.3 线程的等待与唤醒
--Video
-2.4 后台进程
--Video
-2.5 线程的生命周期与死锁
--Video
-2.6 线程的调度
--Video
-3.0 导学
--Video
-3.1 线程安全与线程兼容与对立
--Video
-3.2 线程的安全实现-互斥同步
--Video
-3.3 线程的安全实现-非阻塞同步
--Video
-3.4 线程的安全实现-无同步方案
--Video
-3.5 锁优化
--Video
-4.0 导学
--Video
-4.1 URL对象
--Video
-4.2 URLConnection对象
--Video
-4.3 Get请求与Post请求
--Video
-4.4 Socket通信原理
--Video
-4.5 Socket通信实现
--Video
-5.0 导学
--Video
-5.1 Socket 多客户端通信实现
--Video
-5.2 数据报通信
--Video
-5.3 使用数据报进行广播通信
--Video
-5.4 网络聊天程序
--Video
-6.0 导学
--Video
-6.1 Java虚拟机概念
--Video
-6.2 Java虚拟机内存划分
--Video
-6.3 Java虚拟机类加载机制
--Video
-6.4 判断对象是否存活算法及对象引用
--Video
-6.5 分代垃圾回收
--Video
-6.6 典型的垃圾收集算法
--Video
-6.7典型的垃圾收集器
--Video
-7.0 导学
--Video
-7.1 集合框架与ArrayList
--Video
-7.2 LinkedList
--Video
-7.3 HashMap与HashTable
--Video
-7.4 TreeMap与LinkedHashMap
--Video
-7.5 HashSet
--Video
-8.0 导学
--Video
-8.1 Java反射机制
--Video
-8.2 Java静态代理
--Video
-8.3 Java动态代理
--Video
-8.4 Java 反射扩展-jvm加载类原理
--Video
-8.5 Java进阶课程总结
--Video