现在的位置: 首页 > 综合 > 正文

深入JAVA虚拟机

2018年05月22日 ⁄ 综合 ⁄ 共 1615字 ⁄ 字号 评论关闭

03年开始学Java,那时在学校阶段, 记得当时就是学API呀,看这种各样介绍线程,IO,GUI编程的书籍。给我印象最深的是,我花了很长很长的时间去背JAVA的IO的类层次结构,特别是为了弄清什么是字节流,什么是字符流而琢磨。说实话,我至今也没有琢磨透JAVA实现字节流和字符流的细节,不过原理我是懂的。
后来工作了,就学习STRUTS,HIBERNAT,SPRING,IBATIS,VELOCITY等等各种各样的JAVA开源书籍。差点没有被JAVA开源整死。

今天看这了本书,发自肺腑地说:“读得真是爽!醍醐灌顶!豁然开朗!茅塞顿开!”

为什么这么说呢!
我们知道怎么才是JAVA高手? 千万不要以为能把JAVA程序写好就是高手了。 JAVA之所以自20世纪未诞生后,就风靡全球,是有原因的。依笔者来说,主要有:

1,弘扬了基于虚拟机的编程模?,让编程变得简单,透明。

2,JAVA和网络的发展是同步。网络在民间的运用也是20世纪90年代开始的。
所以,如果我们要成为JAVA高手,就必须深深理解上述让JAVA风靡全求的原因的内涵。

好了,下面,旺旺我读这书的感受吧。只读2天就读完了。真TMD的爽!让我搞清什么是JAVA虚拟机。

1, JAVA体系主要分为:JAVA程序语言,JAVA程序的编译与JAVA字节码的解释运行,JAVA虚拟机的实现。而我们往往关注更多的是JAVA程序语言本身,被一些概念(多线程啊,远程调用啊,设计模式啊,慝名类啊)等等搞得晕头转向的。笔者强烈建议你去看看JAVA程序的编译与解释的内部原理。

2,JAVA虚拟机,才是JAVA体系最核心的一块。首先它屏蔽JAVA字节码的运行平台,是个人PC机,是掌上设备,是电视机顶盒也好。从操作系统上来说,是WINDOWS,是LINUX好。JAVA虚拟机统统做了封装,这就是为什么安装JAVA虚拟机有多个版本的原因了。也许你会问了,多个版本的区别在哪里呢? 主要有:JAVA虚拟机的实现不一样了,你想啊,X86平台的肯定与ARM平台不一样啊,因为CPU的指令集都不一样了,还是虚拟机提供的功能(或者说供JAVA程序调用的API)都不一样了。你想啊,?个手机平台需要的API与PC机需要的API能一样吗?
再说说JAVA虚拟机是怎么执行字节码的吧。
首先呢,JAVA虚拟机就是一个可执行程序。被OS载入内存后,就运行了。与其它进程类似,JAVA虚拟机进程有自己的栈段,堆段,代码段,数据段。
然后,JAVA虚拟机进程对自己的内存管理,也是十分有讲究的。它把类字节码单独划分一个区域,叫方法区。 给JAVA虚拟机的每个进程也各自分配一个栈(俗称JAVA栈)。还有有堆区和本地方法栈。
接着,我再大致描述一下JAVA虚拟机划分的各个区吧。
方法区:很简单,?把通过检验的字节码,解析后(比如该类的方法信息,字段信息)都保存在这个地方。有一个地方要注意的是,JAVA虚拟机每解析完一个字节码(即一个CLASS文件),都会在创建一个java.lang.Class的实体放在堆中。这么做的原因是,让JAVA程序可以面向对象的方式访问字节码信息啦。
JAVA栈:顾名思议就是一个栈了。干什么的呢?给JAVA线程用的呗,我们知道一个JAVA线程一个独立的指令执行流,JAVA给每个线程都一个独立的栈。然后用螺旋锁的同步机制(这里建议您还可以去参考一下操作系统里面常提到的另外一种同步机制:即信号量及PV操作)。

堆区:这可以最大的内存区啊,JAVA所有对象都放在这里呢。说到堆不得不说得GC(垃圾回收),我们知道JAVA的内存是不需要程序自己去delete的。都是靠JAVA GC机制。GC的实现方法有很多,于是很多方法把堆进行划分,比较有名的,划分成各种“代”,象年幻代,年老代之类的,关于GC,话题就长了。笔者我,就不赘述了。

本地方法栈:供JNI调用用的。因为JAVA虚拟机提供调用本地方法的方法,本地方法就在这里执行啦。

抱歉!评论已关闭.