第一次写读书笔记,记录自己的学习过程的一些总结。
留着以后复习的时候再看,写的有误的地方望各位大大指出。
概述
java作为一种面向对象的编程语言广泛用于各种工业场合,除了面向对象编程的特点外,还有许多优点:
-
它摆脱了硬件平台的束缚,实现“一次编译,处处运行”的功能。(这里是由于.java文件在编译时会转换成.class文件,然后再由不同平台上实现的jvm虚拟机读取.class文件。不同平台的jvm虚拟机的实现是不同的,但是.class文件转换成的字节码指令都是相同的。)
-
避免了绝大部分的内存泄漏和指针越界的问题。(java程序语言屏蔽了像c语言一样直接通过指针对内存的操作,垃圾的回收也统一交给jvm虚拟机的垃圾回收器去执行。)
-
实现了热点代码检测和运行时编译及优化,这使得Java应用能随着运行时间的增加而获得更高的性能。(HotSpot的热点代码探测技术)
Java技术体系
JDK:Java程序语言、Java虚拟机、Java API类库这三部分统称为JDK(Java Development Kit),JDK是用于支持Java程序开发的最小环境。
JRE:Java SE API的子集和Java虚拟机两部分称之为JRE(Java Runtime Environment),JRE是支持Java程序运行的标准环境。
Sun HotSpot VM
Sun HotSpot VM是Sun JDK和OpenJDK自带的虚拟机。HotSpot指的就是它的热点代码探测技术。
书中原文:
HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法单位进行编译。如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,这样有利于引入更多的代码优化技术,输出质量更高的本地代码。
个人理解:
虚拟机将执行频率较高的方法或语句块通过JIT(Just In Time Compiler,即时编译器,针对于解释型语言)编译成与本地平台相关的机器码,同时对机器码进行优化,提高代码运行的效率。
JIT执行流程(网图):来源 https://blog.csdn.net/qq_36042506/article/details/82976586
第一章、JIT执行流程图.gif程序运行时,javac将.java文件转换成字节码文件(也就是.class文件)后发给JIT编译器,JIT编译器根据执行频率,将方法块或方法中多次循环的字节码编译成本地机器代码并保存起来,已备下次使用。而如果不执行JIT进行预编译的话,jvm会逐条读入字节码,解释翻译将其翻译成相应的机器指令,这样就导致了速度运行的速度变慢。
网友评论