【JVM】概念引入[1]

概念引入

首先,想问下大家,知不知道什么是JVM,在我们用IDE编写好的代码,为什么能够被执行,并且呈现在眼前,接下来我就对个人阶段性所学知识进行总结。
1. JVM概念

  • 什么是JVM?
    java虚拟机Java Virtual Machine简称jvm。
    JVM是一种能够运行java字节码的虚拟机。
    (java字节码指的是从.java源文件经过编译后形成的中间码,其需经过解释器转译后才能形成特定的机器码)

  • 与Oracle VM VirtualBox区别:
    在这里插入图片描述
    虽然,两者都叫虚拟机,但是实际上是不同的:
    1.java虚拟机是支持java语言运行的环境,在不同的操作系统中有区别,在java程序编译后形成的.class文件,能作用于不同的环境中,实现跨平台的特性。
    2.Oracle VM是Oracle公司的虚拟机,是作用在程序里面的模拟操作系统,通过此虚拟机相当于让本来的操作系统基础上建立一个系统。

  • 为什么要有JVM?
    java之所以能够实现跨平台,所实现的基础就是JVM,因为JVM有不同的版本,可以用来支持不同操作系统和机器,而且在编译后的.class文件是通用的,进行转译成机器语言(“0/1”)。

2.JVM引入

  • 执行流程图:在这里插入图片描述

  • JVM作用:把经过编译后的字节码文件翻译成相应的机器码然后再由解释器进行处理。

  • 示例:
    1.打开记事本写一段java程序,保存为java类型
    在这里插入图片描述
    在这里插入图片描述
    2.之后在cmd命令中javac执行java文件
    在这里插入图片描述
    3.最后再执行java命令,.class文件被解释器转译为机器语言,得出结果。

3.讲解JIT与AOT:
在上述源代码经javac经过编译形成.class字节码文件之后,再通过解释器逐行执行时,执行的速度会相对较慢,而且有些方法和代码块经常会被调用,所以后面引入了JIT编译器(属于运行时编译)。字节码经过JIT环境变量的判断之后,是否属于热点代码(HotSpot Code),那么如果是的话,在JIT第一次编译后,会将字节码相对应的机器码保存下来。

  • 热点代码:消耗大部分系统资源的只有那一小部分代码。
  • JIT(运行时动态编译):
    JIT(just-in-time),“即时编译”,指的是边翻译边运行,不产生目标程序。就是说将源程序中的代码作为一个输入,解释一句后就交付给计算机执行一句,直至完成整个程序。
    就类似于:在命令行中,是逐行执行,而不是像DELIMITER语句修改结束符为&&一样
mysql>DELIMITER &&
mysql>CREATE PROCEDURE film_in_stock_definer(IN f_film_id INT,IN f_store_id INT,OUT f_film_count INT)
	->SQL SECURITY DEFINER
	->BEGIN
	->		SELECT inventory_id
	->		FROM inventory
	->		WHERE film_id=f_film_id
	->		AND store_id=f_store_id
	->		AND inventory_in_stock(inventory_id);
	->
	->		SELECT FOUND_ROWS  INTO f_film_count;
	->END $$
	->DELIMITER ;

JVM会根据每次执行的情况收集并相应的做出一些优化,执行的速度随着执行的次数而提高。

  • AOT(静态编译):
    AOT(ahead-of-time),"提前编译“,就是说在执行之前全部被翻译为机器码。意思就是,将源程序作为输入,进行编译转译,产生机器语言的目标程序。JDK9引入了此编译模式,直接将字节码编译成机器码,从而避免了JIT预热等各方面的开销。

  • JIT与AOT比较:
    1.JIT:
    在运行是动态编译,可以只编译那些经常使用的方法(热方法),提高效率;其它的解释。
    根据代码结构可能提高或降低java程序执行速度。。
    运行时进行本地代码编译而不是在程序运行前编译(C、C++是这种),保证了可移植性。

    2.AOT:
    运行前编译好,缺点是全编译了,不用的也编译了,牺牲了平台无关性和代码质量,因为它们不能利用程序的动态行为,也不具有关于加载的类或类层次结构的信息。
    这避免 JIT 编译器的运行时性能消耗或内存消耗,或者避免解释程序的早期性能开销。极大提高java代码性能。

    JDK支持分层编译和AOT协作使用,但是我们可以知道,AOT的编译质量是比不过JIT的,所以需要适当选择。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值