深入浅出Java虚拟机:JVM原理与实战
上QQ阅读APP看书,第一时间看更新

1.2 Java散发的独特魅力

了解完了Java语言的发展史之后,读者可能会觉得Java语言走向成功的道路真是崎岖曲折。本章重点介绍Java语言的基本特点。

1. Java编程语言最引人注目的特性便是跨平台性,它是指服务系统不会伴随软硬件架构体系的变化而发生不可用的状态,也就是说在不同的环境下都可以正常运行。

JVM的设计思想和原则很天然地就实现了跨平台性,而Java源代码通过Java编译器处理后得到了Class字节码,Class字节码又是实现跨平台性的基石,同时也是能够被各种环境下的JVM所识别的媒介标准。JVM的执行引擎能够达到操作系统级别的屏障能力,从而最终实现跨平台性。

2. 面向对象。面向对象是软件科学里一个伟大的成果,该特性大大地提升了软件领域里解决问题的能力,是软件发展过程中的一个重大里程碑。面向对象的设计思想是指以对象元组作为基本单元,其结构主要通过属性集合及方法集合组成,其方法代表对象自身所拥有的行为及服务能力等,而属性则代表着对象内部所具有的数据状态和数据信息等,面向对象的设计思想大大地降低了人类解决问题的困难和复杂度,如Java便是经典的面向对象的编程语言。如果采用面向对象的设计思想,我们就可以很简单地进行方法的复用和扩展。

3. 分布式。Java语言之所以可以实现分布式技术,是因为它使用网络层面的API技术接口,可以实现互联网层面的技术开发。Java SE中有专项与网络方面相关的API接口且有很多网络编程类库,主要以Socket编程为主,其中包含3种IO模型(BIO、NIO和AIO)。

在实现网络技术编程中衍生出了众多技术方案,如Java原生体系的RMI(远程方法调用技术)、SOAP技术和WebService技术,以及目前特别火热的RPC技术体系,它们都是分布式开发体系中的Java技术栈。

4. 安全性。Java在安全性层面中有很多技术沉淀,如在加解密体系和安全管理器等层面上实现了较为强大的功能,这些特点促使Java可以完成很多安全领域中的业务。对此笔者进行了总结,主要有以下6点特性。

(1)Java屏蔽了开发者直接使用指针,如申请和释放内存等,这样可以减少很多由于开发者的失误和漏洞造成的系统内存的错误操作。

(2)Java的安全性在于Java的基本结构单元是对象,所以对象内部的属性的数据类型及对象的数据类型都具有安全性。

(3)在编译层面,当编译器在对Java源码进行编译时,会根据Java指令的语义和词法做出安全层面的分析和检测。

(4)在装载或调用(不属于方法分派)层面,在执行Class字节码时,Classloader类加载器会进行加载,加载后,经过校验阶段方可运行。

(5)在资源访问的层面,Java语言具有安全管理器和访问控制器的功能组件,它们保证了被访问资源的权限和安全。

(6)内存地址的安全性层面,如果在编译后的Class字节码中进行引用,那么只有在执行时通过Java解释器才能确定其真实存储地址,对此开发者也无法得知真实的运行地址,降低了内存数据被篡改及被攻击的风险。

5. 支持多线程,Java语言的多线程技术体系较为全面和成熟,其拥有内置的线程池及异步线程层面上的技术API,此外很多第三方厂商也贡献了很多工业级的框架和工具组件,从而支持更加强大的功能。

此外,其本身还具有JMM体系,可以屏蔽系统差异性问题。对于多线程情况下出现的线程安全问题,它也拥有同步机制及Happen-Before原则进行控制。

6. 动态性,主要是基于多态角度,Java语言可以将真正对象的实现延迟到运行阶段,从而可以实现程序的动态化和多样化运行,主要表现在以下两个方面。

(1)加载时的织入性(LTW,Load Time Weaving):Java应用程序可通过类加载器动态地加载到JVM中,当然也可以从其他渠道加载,如数据库、网络、文件服务器等;还可以将新代码动态地加入一个正在运行的程序中,并且立即刷新生效。

(2)运行时的可见性:在程序运行过程中,可以简单、直观地查询运行时的信息。