java平台理解
- 一次编译 到处运行
- 这是java跨平台的一种特性,并不是说java语言具有这种特性,而是在不同平台上都有可以让java运行的环境而已。
- 程序从源代码到运行这个阶段,经历:编码->编译->运行->调试,而java是在编译阶段体现了跨平台的特点。大致可概括为将.java文件编译为与平台无关的字节码.class文件,.class文件即为到处可运行的文件,然后java字节码可被转换为目标机器代码,这一步是由jvm执行的。
- java语言可理解为一个编译型-解释型语言,同时具有编译特性和解释特性。作为编译型语言,java程序要被统一编译成字节码文件,即.class文件(类文件)。类文件并不能在计算机上直接运行,它需要被java虚拟机翻译成本地的机器码后才能执行,而java虚拟机的翻译过程则是解释性,。java字节码文件首先被加载到计算机内存中,然后读出一条指令,翻译一条指令,执行一条指令,该过程即被称为java语言的解释执行,是由java虚拟机完成的。以上说的是Java的解释执行,但是比如我们大多数情况使用的Hotspot JVM,都提供了动态编译器JIT,能够追踪热点代码,然后变成机器指令,这种情况下部分热点代码就属于编译执行,而不是解释执行了
- 延伸:jit可理解为一种缓存技术,避免了冷代码在编译时也参与编译的问题。,这种基于运行分析,进行热点代码编译的设计,大致可理解为“小部分的热点代码耗费了大部分的资源”,jit也是虚拟机的构成部分。
- 延伸:AOT编译器,Java9提供的直接将所有代码编译成机器码执行。
- 心得:
- 看了很久底层原理,总结各位专家的理解加上自己的理解,以此记录,希望自己能够打好基础,乘风而上。