初入JVM

学习路径

在这里插入图片描述

提出问题

1.为什么JAVA可以跨平台?
2.都知道Java是半解释半编译语言,为什么这么说?
3.classfile去哪了?如果都知道通过类加载器加载到内存,是怎么在内存中执行指令的?
4.类加载器为什么可以加载类,怎么加载类?
5.垃圾回收怎么回收垃圾?
6.既然垃圾回收可以回收垃圾,为什么要分为新生代、老年代
7.为什么要在JDK1.7以后把永久代换成元空间?
8.常见的StackOverflowError和OOM是怎么产生的?
9.为什么在学习Java基础的时候,代码是这样执行的,static为什么随着类加载?
......问题很多,不一一赘述,这里我希望下一次我看到这个博客的时候,我能带着这些问题看懂我自己的博客,是一个很好的复习吧

JVM基本概念

什么是JVM?
1.JVM实际上可以看作是一个可运行Java代码的假象计算机,JVM通过C/C++来实际操作计算机执行逻辑运算和存储
2.JVM实质上是运行在操作系统之上的,且无法与硬件直接交互,必须依靠于操作系统
因此我们也可以将JVM看作是一个可间接与硬件交互的软件(间接:就是通过Native调用C/C++来实现)
JVM为什么可以实现Java的跨平台?
因为执行引擎不同,这个我会单独做一章来解释

Java代码的执行流程

宏观上:.java文件---javac--->.class---java.exe-->执行
	编译阶段:代码编译是从.java源文件通过编译器转换形成.calss字节码文件的过程(javac编译器)
	执行阶段:.class字节码文件会通过JVM中的解释器,翻译成特定机器上的机器码,并执行对应的指令。
问题:这两个阶段会操作内存吗?什么时候操作内存?
	编译阶段仅仅只是将源文件代码转换为对应的字节码,该过程不会执行指令,因此不会操作内存。
	执行阶段会将字节码文件解释为机器码(解释执行),并执行指令(编译执行),因此该过程会频繁操作内存
JVM层面分析:Java代码到底经历了什么?
	上面我们说过:编译阶段仅仅只是把源文件转换成对应的字节码,那我们可以知道,Java代码首先一定会经过javac编译器编译一次
	所以我们应该分析的就是执行阶段,到底发生了什么?先看下面这张图!

JVM结构图

JVM分类

Sun Classic VM(JDK1.0)
	* 内部只提供解释器
	* 可提供外挂JIT编译器,但是一旦使用JIT编译器,则JIT就会接管虚拟机的执行系统,解释器将不再工作
Exact VM(JDK1.2)
	* 虚拟机可以知道内存中某一个位置的数据具体是什么类型
	* 具备高性能虚拟机的雏形
		* 热点探测
		* 编译器与解释器混合工作模式
HotSpot VM(JDK1.3)(重点)
	* HotSpot VM是默认虚拟机!
		* Sun/Oracle的JDK和Open JDK的默认虚拟机
		* 热点探测技术(通过计数器找到最具有编译价值的代码,触发即时编译或栈上替换)
		* 编译器和解释器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡。
		* 服务器端、桌面到移动端、嵌入式都有应用
JRockit VM(重点)
	* 专注于服务器端应用
		* JRockit内部不包含解释器的实现,全部代码由即时编译器编译执行。
		* JRockit是世界上最快的JVM
		* 有全面的Java运行时解决方案
			* 延迟敏感应用解决方案提供毫秒或微秒级JVM响应
			* MissionControl服务套件,以极低的开销来监控、管理和分析生产环境中的应用程序工具	
J9(IBM Technology for Java Virtual Machine IT4J)内部代号J9(重点)
	* 服务器端、桌面应用、嵌入式等多用途VM
	* 在IBM产品中时速度最快的JVM
	* IBM开源J9命名为OpenJ9
//了解内容
Java ME
发布在Java ME产品线上的两款虚拟机CDC/CLDC HotSpotImplementation VM
KVM是CLDC-HI早期的产品
KVM简单、轻量、高度可移植,面向更低端的设备上还维持自己的市场
	* 智能控制器、传感器
	* 老人手机、经济欠发达地区的功能手机

所有虚拟机的原则:一次编译,到处运行

如何查看自己的JVM是哪一种?
在这里插入图片描述

JVM基本结构(待更新)

JVM体系结构主要分为两个子系统、两个组件
子系统

组件

这里我会更新在其他章

总结

当前章节的重点:
	1.Java代码的执行流程(宏观和JVM层面)
		这里一定要把JVM层面的执行流程当作一个问题去研究
	2.几个重要的JVM
		Hotspot VM
		J9 VM
		JRockit VM
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carl·杰尼龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值