我对Java的理解

Java平台

Java不仅仅只是一门编程语言,还是一个由一系列计算机软件和规范形成的技术体系。

  • Java程序设计语言:基本语言特性,语法糖,面向对象,反射,泛型。。。
  • Java生态:各种框架,Spring,hadoop。。。
  • Java基础类库,API
    • 核心类库:IO/NIO,网络,utils。。。
    • 安全类库
    • jdk.management等类库
    • 第三方类库
  • Java虚拟机
    • 垃圾收集器
    • 运行时
    • 动态编译
    • 辅助功能,JFR等
  • 工具包
    • 辅助工具:如Jlink,jar,jdeps
    • 编译器:javac,sjavac
    • 诊断工具:jmap,jstack,jconsole,jcmd

20bc6a900fc0b829c2f0e723df050732.png

JDK & JRE

JDK是Java开发工具包,JRE是Java运行环境,它包含虚拟机,但不包含编译器。
1530110442146.jpg

Java编译

  1. 首先是使用Java的编译工具,比如javac将源码编译成虚拟机可以认识的字节码。
  2. 字节码会给不同的虚拟机(Windows,Mac上的虚拟机)在运行时,通过类加载器加载字节码,解释或编译成对应的机器码执行。这里就两点要注意的:
    1. 第一是可以给虚拟机设置参数,是使用解释还是编译的方式。编译会导致启动较慢,而解释会导致执行稍慢。可以针对不同场景进行调整。
    2. 这里还有个一个动态编译器(JIT),会在运行时将热点代码(以方法为单位,那些会反复执行或者循环的代码)编译成机器码,这部分代码也是编译执行的。

参考和引用

极客时间:Java核心36讲

书籍:深入理解Java虚拟机

he