目录java
1,Java体系结构c++
2.jvm执行引擎api
概述jvm
其实,学java不算新手了,可是却感受不少基本的知识,咱们一开始也许是记住而不深究,我以为有一些概念,仍是须要了解.性能
咱们所说的java程序,须要jvm,java api,java class的辅助才能运行.咱们从下面的图片能够看到,JDK,JRE,java api和JVM以其余们之间的关系:优化
也就是说,JDK>JRE>Java api>JVM.操作系统
1)Java Language
2)Java class文件格式
3)Java应用程序接口(API)
4)JVM
当编写一个java程序并运行的时候,同时用到这4个技术:使用'Java Language'编写源代码->将它编译成'java class'文件->在'jvm'中运行该'class'文件.在编写程序时,经过调用类(这些类实现了java api)中的方法来访问系统资源(例如I/O).如图1-1:
JVM的任务是装载 'class'文件,并运行其中的字节码.如图1-2,jvm中包含一个类装载器(class loader),它能够从程序和api中装载class文件.java api中只有程序运行时须要的那些类才会被装载.
有4种执行引擎,分别为:
1)一次性解释字节码.
2)即时编译器(Just-in-time compiler),这种执行引擎比第一种的更快,可是也更消耗内存.在这种状况下,第一次被执行的字节码会被编译成本地机器码,编译出的本地机器码会被缓存,当方法之后被调用的时候能够重用.
3)自适应优化器.在这种方法中,jvm开始的时候解释字节码,可是会监视运行中程序的活动,并记录使用最为频繁的代码段.程序运行的时候,jvm只把那些活动最为频繁的代码编译为本地机器码.而其余代码,因为使用不频繁,继续保留为字节码-由jvm继续解释它们.一个自适应优化器可使得 jvm在 80%~90%的时间里执行被优化过的代码,而只须要编译10%~20%对性能有影响的代码.
4)由硬件芯片构成,它由本地方法执行java字节码.这种执行引擎其实是内嵌在芯片里的.
3,ClassLoader的体系结构
用户定义的ClassLoader使得在运行时扩展java应用程序成为可能.当被装载的类引用了另一个类的时候,jvm将使用装载第一个类的ClassLoader去装载被引用的类.如,jvm使用某一特定的ClassLoader装载Volcano这个类,而Volcano类使用一个叫Lava类(如调用Lava类的一个方法),那么jvm将使用装载Volcano这个类的ClassLoader去装载Lava.这样,被该ClassLoader返回的Lava类就动态地与Volcano类创建联系.因为jvm使用这种方式进行类的装载,因此被装载的类默认状况下只能看到被同一个ClassLoader装载的别的类.
经过容许使用不一样的用户自定义的类装载器装载不一样来源的class文件,他们把不一样来源的class文件放置在不一样的命名空间中,它就可以限制或阻止不一样来源的代码之间的相互访问.
java class文件主要在平台无关性和网络移动性方面使java更适应于网络.
1)平台无关性)它为java程序提供独立于底层主机平台的二进制形式的服务.一般状况下,一个平台上的二进制可执行文件不能在其余平台上工做(如用c/c++编写的程序).而java class文件是能够运行在任何支持jvm的硬件平台和操做系统上的二进制文件.
当编译和连接一个c++程序的时候,所得的可执行二进制文件,只能在特定平台的和操做系统上运行,是由于这个二进制文件包含了目标处理器的机器语言.
除了特定的处理器的机器语言以外,传统的二进制可执行文件的另一个依赖性是具体平台的属性是整数的字节顺序.例如,在支持x86系列处理器的二进制可执行文件中,字节顺序是地位以前;而对于PowerPC处理器,则是高位在前.java class文件中字节顺序是高位在前(而与平台无关).
2)网络移动性)class文件设计紧凑,全部能够快速在网络上传送.其次,java是动态连接和动态扩展,class文件能够在须要的时候才下载.