好文分享第一天——Java平台的理解

Java

Java特性:
面向对象(封装,继承,多态)
平台无关性(JVM运行.class文件)
语言(泛型,Lambda)
类库(集合,并发,网络,IO/NIO)
JRE(Java运行环境,JVM,类库)
JDK(Java开发工具,包括JRE,javac,诊断工具)

Java的两大特性

  • “书写一次,到处运行”,这也就是说Java是可以跨平台使用的,这与它的Java虚拟机机制有着很大的关系,只要在不同的平台上安装了JDK就可以编译运行,能够让Java在不同的平台上都能运行。原文是『Write once, run anywhere』,焦点似乎并不在编译上,而是在对源文件的修改上。
  • 独特的垃圾回收机制(GC):通过垃圾收集器回收分配内存,因此,Java开发时无需过多担心c和c++开发时对内存的分配和回收

Java的JRE和JDK

Java的JRE(Java Runtime Environment)和JDK(Java Development Kit),前者是Java的运行环境,即类库和JVM;后者提供了工具,如编译器、诊断工具、内存占用查看的工具等等。

Java的类加载机制

类加载大致过程:加载、验证、链接、初始化(不详细概括先)

Java是否为解释执行    

Java是解释执行这个说法是不太准确的,Java的机制是通过编译将代码转为”.class”文件也就是所谓的字节码文件,然后,运行时再通过JVM内嵌的解释器将字节码转换成机器码。Java通过JVM和字节码将操作系统和硬件的细节包装了起来,让我们在操作时并不需要去理会操作系统底层的东西。有些观点则认为Java并不是编译机制,而是解释机制。

JVM的运行模式

  • c1模式,即client模式,适用于Java开发的桌面应用
  • c2模式,即server模式,适用于服务器端的应用设计

重点:分层编译

Java编译

  • JIT即时编译器:JIT全称Just in Time Compile(即时编译器),把经常运行的代码作为”热点代码”编译与本地平台相关的机器码,并进行各种层次的优化。
  • AOT编译器(JDK9才出现的): Java 9提供的直接将所有代码编译成机器码执行。
  • 程序从源代码到运行的三个阶段:编码——编译——运行——调试。Java在编译阶段则体现了跨平台的特点。编译过程大概是这样的:首先是将Java源代码转化成.CLASS文件字节码,这是第一次编译。.class文件就是可以到处运行的文件。然后Java字节码会被转化为目标机器代码,这是是由JVM来执行的,即Java的第二次编译。

思考

1、JVM的内存模型,堆、栈、方法区;字节码的跨平台性;对象在JVM中的强引用,弱引用,软引用,虚引用,是否可用finalise方法救救它?;双亲委派进行类加载,什么是双亲呢?双亲就是多亲,一份文档由我加载,然后你也加载,这份文档在JVM中是一样的吗?;多态思想是Java需要最核心的概念,也是面向对象的行为的一个最好诠释;理解方法重载与重写在内存中的执行流程,怎么定位到这个具体方法的。
2、发展流程,JDK5(重写bug),JDK6(商用最稳定版),JDK7(switch的字符串支持),JDK8(函数式编程),一直在发展进化。
3、理解祖先类Object,它的行为是怎样与现实生活连接起来的。
4、理解23种设计模式,因为它是道与术的结合体。

参考于杨大和《深入JVM虚拟机》

猜你喜欢

转载自blog.csdn.net/tryandfight/article/details/80579580
今日推荐