Java核心技术36课笔记(一):谈谈你对java平台的理解

一 、java是解释执行的说法对吗?

不完全正确

1、疑问:解释执行和编译执行的区别?

类比:解释执行是同声传译(逐字逐句的解释翻译,执行速度慢),编译执行是播放录音(编译成机器可识别的机器码,所以编译执行的,执行速度快)。

2、名词解释

  • JRE(Java Runtime Enviroment):运行时环境,包含jvm和java类库

  • JDK(Java Development Kit):java开发工具包,可以看作是JRE的一个超集,提供了更多的工具,比如编译器javac,以及各种诊断工具如jconsole.exe(java监控和控制台)

    • jconsole:可以查看指定服务的内存、线程数和java类的情况

  • JIT(just in time):能够在运行时将热点代码编译成本地机器码,并进行各层次的优化,大大提高执行效率。

    • 疑问:哪么什么是热点代码呢?>>>换句话说,就是一段时间内执行比较频繁的代码。

    • 那怎么统计呢?基于程序计数器的热点探测,为每个方法建立计数器,当访问次数达到一点阈值时就认为它是热点方法

    • 缺点:编译机器码占用内存,收集探测热点影响程序运行等

    • JIT编译速度及编译结果的优劣,是衡量JVM性能的重要指标,对程序的性能调优集中在这个阶段​

  • AOT(ahead-of-time-compilation):在运行前,直接将.class文件编译成机器码????是java9的新特性,是静态的

3、原因:因为常见的JVM都提供了JIT,JIT可以将热点代码在运行时编译成机器码,这种情况下部分热点代码就是编译执行,而不是解释执行

  • .java文件(第一次编译)

        通过javac编译成字节码.class文件

  • .class文件,通过JVM解析或编译成机器码(第二次编译)

       解释执行: jvm将编译后的字节码(.class文件)通过解释器转换成最终的机器码(耗时),解释后执行,效率低

       编译执行:通过JIT将经常运行的代码编译为本地机器码,运行热点代码时可直接执行,速度快,效率高

改进:AOT

二、回到主题:java平台的理解可以从以下几方面展开(最下方的思维导图)

1、java基本语言特性:面向对象、反射、泛型,lamba语法

2、java面向对象的三大特性?》》封装,多态,继承

3、java平台的两大特性

  • 垃圾收集器,会分配和回收内存,大部分情况下程序员不需要自己操作内存的分配和回收

  • 一次编译,到处运行(跨平台性):并不是说java语言可以跨平台,而是在不同的平台(windows,linux)中可以安装JDK,让java语言有运行的环境(jvm)

4、java平台具有上述两大特性的原因?》》Java虚拟机

  • 为何java是一次编译,到处运行的?一次编译,javac将.java文件编译成字节码(注:不是机器码),然后在不同的操作系统中,jvm可以将字节码解释成最终的机器码。所以只要在不同环境上都安装JDK(JVM就能运行了)。从另一方面来讲,jvm执行的是.class字节码,所以其它不同的编程语言如Jython,Scala,Kotlin等语言,编译后也能在jvm上运行

    

  • java程序员在编码时不用考虑运行环境(操作系统的差异性),不用考虑内存分配回收和垃圾收集的问题,因为Java虚拟机帮我们屏蔽了不同的操作系统,同时也自带GC机制

5、java类库

集合(hashMap,List,ArrayList)

IO/NIO

异常

网络

并发(concurrent)

第三方类库

6、工具如jconsole,jstatc

下面思维导图,来自极客时间

猜你喜欢

转载自blog.csdn.net/hh1sdfsf56456/article/details/81237200
今日推荐