《深入Java虚拟机学习笔记》- 第一、二章 Java体系结构和平台无关性

1.     第一章 Java体系结构

Java编程环境:

 

Java虚拟机基本结构:

 

 

Java有两种类型的类装载器:启动类装载器和用户定义的类装载器。启动类装载器是虚拟机实现的一部分,通常用C/C++语言来编写(Java虚拟机就是用C/C++语言编写的)。启动类装载器主要是装载JAVA API核心类库。用户定义的类装载器则是用JAVA语言编写的,因此,我们可以定义自己的类装载器,在程序运行期间,根据我们的需要来装载类。

 

Java语言的优势:

Java没有直接操纵内存的方法,避免了内存误操作引起的崩溃。一种类型的引用无法直接转换为另外一种类型的引用,除非在运行时刻,一种类型的引用实际上是指向了另外一种类型的实例(比如假设B继承A,在运行时刻,A引用指向了一个B的实例,这种情况下,可以把A引用转换为B类型的引用)。

 

垃圾收集:在JAVA中,可以用new关键字创建一个对象,但没有delete关键字显式释放对象的方法。JAVA虚拟机会自动判断一个对象是否还有别人在引用它,如果已经不存在其它对象对它的引用,则会自动释放这个对象所占的内存。

 

数组边界检查:在JAVA中,你如果创建一个长度为10的数组,那么你只能放置10个对象,如果放置更多的对象,将会抛出异常,而不是导致程序崩溃。

 

对对象引用的检查:如果你尝试执行一个空的对象引用的方法,将会抛出空指针异常,而不是导致程序崩溃。

 

Java语言的劣势:

 

性能:比不上本地代码,但也可以通过某种手段在一定程度上增强性能,比如编译为本地代码(预编译)、Java虚拟机本身的性能也在逐步提高。当然,因为JAVA程序的复杂性(比如分布式系统或在各种不同的虚拟机上运行相同的程序等),所以,这种程序性能的增强也是有代价的。

 

内存管理和线程调度上的缺陷:无法确定垃圾收集何时开始和持续多长时间。

 

最小公分母问题:为了支持跨平台,必需在某些特性上进行取舍。

 

反编译问题:Javaclass文件,包含指令字节码和变量名称、方法描述等各种信息,这导致JAVAclass文件很容易被反编译。解决办法就是混淆器。用混淆器来混淆代码,将变量名称、方法描述等信息变成完全无意义的符号,这样对反编译者来说,在反编译之后,要对代码进行分析将会付出更加大的代价。

 

2.     第二章 平台无关

 

Write Once,Run Anywhere

 

上图就描述了所谓平台无关的概念。

 

影响平台无关的主要因素:

第一,     平台的部署:你必须保证在目标机器上已经部署了相关的JAVA平台

第二,     JAVA版本,虽然JAVA号称向上兼容(即用旧版本的JDK开发的程序,可以运行在新版本的JAVA虚拟机上面),但事情不是绝对的!另外,你当然更不能期望用新版本的JDK开发的软件能够运行在旧版本的JDK上面了,因为新版本的JDK一定会比旧版本的JDK增加和改变了很多特性,如果你用到了这些特性,那么你的程序就无法在旧版本的JDK上面运行。

本地方法(JNI),如果你用到了JNI,也无法对你的程序进行移植

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值