java虚拟机1

来源:互联网 发布:软件开发过程不包括 编辑:程序博客网 时间:2024/06/17 19:35


  • 特性
平台无关性:
“java是为网络而设计的”
“一般网络有很多不同的设备,不同的硬件体系,操作系统,java通过创建与平台无关的程序来解决这个问题”
安全性:
"从网络上下载的程序可以以不同的定制安全级别运行"
java在设计时就避免了很多bug的出现。
网络移动性:
“传递二进制代码”
  • 虚拟机
“从版本1.2开始,Java虚拟机和javaAPI 称为java2平台”

“java虚拟机的主要任务是装载class文件并且执行其中的字节码”
虚拟机的基本结构图:

不同的虚拟机里,执行引擎的实现会有不同,大致有三种:
1、一次性解释字节码
2、第一次被执行的字节码将会被编译成本地机器代码缓存,下次使用时,直接调用
3、优化的方法:监视运行中的活动,记录下最频繁的代码段,把这些编译成本地机器代码缓存。其他的还是保存字节码。
java中有两种方法:
1、java方法,是用java语言编写的,是平台无关的
2、本地方法,是用c,c++,汇编等语言写的,是与平台相关的,保存在动态连接库中。java本地接口:JNI

  • 类装载器
一个类装载后,虚拟机会监视这个类,当这个类调用另一个类时,虚拟机会使用装载第一个类的装载器装载第二个类。
被不同的装载器装载的类存放在不同的命名空间中,默认情况下被装载的类也只能看到被同一个类装载器装载的类。这样能控制不同源文件中装载代码之间的相互影响,阻止恶意代码获取访问和破坏善意代码的权限。
  • java的class文件
二进制文件,但是与c++的二进制文件不同,是平台无关的,并且可以动态加载,因此只要的需要的时候从网络上下载该class文件即可。

  • java程序

javaAPI文件调用了本地方法,提供了与平台无关的标准接口。因此java程序也就平台无关了。

java相对于c++来说,编程的效率更高,程序的健壮性更高体现在:
1、java不允许通过强制转换指针类型或者通过指针运算来直接访问内存。
2、java会自动进行垃圾回收,编程变得简单。
3、java进行了数组边界的检查,而c++可以操作超过数组大小的元素。
4、java不允许引用为空,在c++中引用为空会导致程序崩溃,而在java中会抛出异常,抛出异常后,所在线程死亡,但是其他线程还能进行,程序也不会退出。

java的缺点:
1、速度慢
2、内存管理和线程调度的缺陷。不知道垃圾回收器什么时候工作,线程松散,导致实时响应差
3、最小公分母问题。不同操作系统之间有共性,但也有差别,javaAPI设计时考虑哪些共性是个问题。
4、java的二进制文件(class文件)可以非常容易地逆向编译为java源码文件,这使得代码的版权保护变的困难。

最近看的《深入理解java虚拟机》,做的笔记+理解,跟大家分享,如果有错误,也希望大家提出来~~~

0 0
原创粉丝点击