Java的特性:
面向对象(继承,封装,多态)
平台无关性(一次书写,到处运行)
类库(IO/NIO,集合,网络,并发,安全等)
GC垃圾回收机制
JRE(Java运行环境,包括了JVM和Java类库,以及一些模块)
JDK(JRE的超集,提供了更多工具,比如编译器等)
Java是解释执行?不太准确
Java的确是通过Javac先编译成字节码(.class文件),再通过JVM虚拟机内嵌的解释器来转换成机器码。
JVM提供了JIT编译器(动态编译器),即运行时将热点代码编译成机器码,这部分代码就属于编译执行,而不是解释执行。
AOT编译方式,直接将字节码编译成机器码,减少预热时间
对于虚拟机而言,只要是符合规范的字节码,它们都能被加载执行,当然,能正常运行的程序光满足这点是不行的,程序本身需要保证在运行时不出现异常。所以,Scala、Kotlin、Groovy等语言也可以跑在虚拟机上。
拓展:
安卓的instance run,机制在于修改代码后,增量构建(增量产生dex的形式),然后通过更新资源的复杂度去选择执行热更新,热更新或者冷更新。
Groovy作为脚本语言,在安卓的.Gradle文件中起到了重要作用。
build.gradle第一句apply plugin 就相当于java中的导包,是导入了gradle的工具类
每个build.gradle是一个Project对象,其中的android{}和dependencies{}相当于project的方法,其中会设置project的参数
每个project中包含多个task的构建任务,每个Task包含很多的Action动作。
apply plugin相当于把project对象传到工具库,再通过其中的Groovy插件对project进行操作。
每个build.gradle是一个Project对象,Gradle管理者该对象的生命周期