一、宏观角度
.. 1、跟c/c++最大的不同点在于,c/c++编程是面向操作系统的,需要开发者极大地关心不同操作系统之间的差异性;而Java平台通过虚拟机屏蔽了操作系统的底层细节,使得开发者无需过多地关心不同操作系统之间的差异性。
2、通过增加一个间接的中间层来进行”解耦“是计算机领域非常常用的一种”艺术手法“,虚拟机是这样,操作系统是这样,HTTP也是这样。
3、Java平台已经形成了一个生态系统,在这个生态系统中,有着诸多的研究领域和应用领域:
1)虚拟机、编译技术的研究(例如:GC优化、JIT、AOT等):效率的提高
2)Java语言本身的优化
3)大数据处理
4)Java并发编程
5)客户端开发(例如:Android平台)
二、微观角度:
1. Java语言本身、JDK中所提供的核心类库和相关工具
从事Java平台的开发,掌握Java语言、核心类库以及相关工具是必须的,我觉得这是基础中的基础。
对语言本身的了解,需要开发者非常熟悉语言的语法结构;而Java又是一种面对对象的语言,这又需要开发者深入了解面对对象的设计理念;
Java核心类库包含集合类、线程相关类、IO、NIO、J.U.C并发包等;
2. Java虚拟机以及其他包含的GC
Java语言具有跨平台的特性,也正是因为虚拟机的存在。Java源文件被编译成字节码,被虚拟机加载后执行。这里隐含的意思有两层:
1)大部分情况下,编程者只需要关心Java语言本身,而无需特意关心底层细节。包括对内存的分配和回收,也全权交给了GC。
2)对于虚拟机而言,只要是符合规范的字节码,它们都能被加载执行,当然,能正常运行的程序光满足这点是不行的,程序本身需要保证在运行时不出现异常。所以,Scala、Kotlin、Jython等语言也可以跑在虚拟机上。
3)围绕虚拟机的效率问题展开,将涉及到一些优化技术
解释:.class文件经过JVM内嵌的解释器转化成最终的机器码
编译:JIT (Just In Time) 即动态编译器,JIT 能够在运行时将热点代码编译成机器码!
AOT(Ahead-of-Time Compilation):直接将字节码编译成机器代码,这样就避免了 JIT 预热等各方面的开销
三、Java程序执行步骤
1、首先javac编译器将源代码编译成字节码。
2、然后jvm类加载器加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度相对会比较慢。有些方法和代码块是高频率调用的,也就是所谓的热点代码,所以引进jit技术,提前将这类字节码直接编译成本地机器码。这样类似于缓存技术,运行时再遇到这类代码直接可以执行,而不是先解释后执行。