jvm 基础知识
1、jdk是什么
jdk 包含简单来说包含java工具包,jre (运行环境)
jre 包含jvm(java虚拟机),运行时类库
如图
其中
java 工具包(百度查询):
javac – 编译器,将源程序转成字节码
jar – 打包工具,将相关的类文件打包成一个文件
javadoc – 文档生成器,从源码注释中提取文档
jdb – debugger,查错工具
java – 运行编译后的java程序(.class后缀的)
appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。
Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
Jconsole: Java进行系统调试和监控的工具
运行时类库:
java.lang: 这个是系统的基础类,比如String等都是这里面的,这个包是一个可以不用引入(import)就可以使用的包。
java.io: 这里面是所有输入输出有关的类,比如文件操作等。
java.nio:为了完善io包中的功能,提高io包中性能而写的一个新包 ,例如NIO非堵塞应用
java.net: 这里面是与网络有关的类,比如URL,URLConnection等。
java.util: 这个是系统辅助类,特别是集合类Collection,List,Map等。
java.sql: 这个是数据库操作的类,Connection, Statement,ResultSet等。
javax.servlet:这个是JSP,Servlet等使用到的类
2、java 从编译到执行
java类(helloWorld.java文件)通过javac 工具解析成helloWorld.class文件,
然后jvm通过类加载器、字节码解释器等一些列过程将class文件解析成os可以识别的机器码
如图
3、jvm的跨平台和跨语言
跨平台:java 针对不同的操作系统提供了对应的jdk版本,使得同样的java代码可以运行在不同的操作系统上,产生的结果是一致的
跨语言:由于jvm解析的只是java字节码,所以无论上层语言是java还是scala、kotlin等只要其最终生成对应的java字节码,都可以在jvm上运行
如图