这是我第一次写博客,这是为了记录自己在学习jvm时做的笔记,方便以后查看、记忆,如果看到这篇文章的其他人,多多海涵,写得不是很好。

一.java体系结构:

1.java程序设计语言 2.class的编译文件格式(字节码) 3.应用编程接口(API) 4.java虚拟机(jvm)。

大概工作模式是:使用java编程语言编写一个java程序的源代码,进行编译成class文件,java虚拟机运行class文件。程序运行时,通过调用class文件的已经实现的api来访问系统的资源。

jvm和api组成一个平台,所有的java程序都在这上面编译,然后运行。由下图可知,java程序可以在存在java平台的任何地方运行,因此java程序具有很强的移植性,这些是C#等其他语言所达不到的。





javaee体系结构 java体系结构包含_java


二.java虚拟机

  jvm是一个抽象的计算机,jvm执行的class文件的字节码,但是执行的技术可以选择性,只要符合jvm的规范即可,可以硬件实现,也可以软件实现。

jvm的主要任务是装载class文件并执行字节码程序,jvm包含class  loader(类加载器),从程序和api中加载class文件,只有需要的载有在程序执行需要使用时对应的类被装载。字节码程序由执行引擎类执行。

javaee体系结构 java体系结构包含_javaee体系结构_02

jvm不同,执行引擎也不同,分两种:1.一次性解释字节码。2.执行速度快,牺牲内存,叫即时编译。(第一次被执行的字节码编译出来的机器码会放到内存,当以后需要的时候就可以使用了)3.自适应优化器。(进行监控比较多的程序活动,频繁使用的代码编译成本地的机器码,其他依旧保存为字节码,继续由虚拟机编译。)

jvm也有称谓叫java解释器,解释字节码程序。但是这缺少执行部分,这是不严谨的称谓。java存在的方法有两种:java方法(java语言编写编译成字节码保存在class文件)和本地方法(其他语言编写的,编译成和处理器相关的机器码,保存在动态链接库中),java方法与平台无关,本地方法却是平台相关的,因为本地方法就是最底层的与机器相关了,与操作系统相关,因此是不具备可移植性,不同的操作系统,本地方法自然是不一样的。就好比本地方法提供了一个桥,可以到达底层操作系统的绿洲,可以使用绿洲的水等(资源),通过这条桥可以实现和绿洲居民之间的来往,假如桥没了,自然交互就没了,因此本地方法不可缺少呀。本地方法的接口----java本地接口(java  native  interface,JNI),使得平台相关的本地方法可以供java平台实现上运行,除jni外还有其他的的本地方法接口。接着上面的比喻,到达绿洲,必须通过桥,过桥就必须有对应的过桥费,但是不一定过桥的那个人只收人民币作为过桥费,也可以收取美元等。

javaee体系结构 java体系结构包含_字节码_03

进行状态程序的class文件或者api的class,jvm是通过类装载器来承装。jvm拥有灵活的装载器体系结构,因此可以使用自定义的方式来实现类装载。

javaee体系结构 java体系结构包含_java_04

javaee体系结构 java体系结构包含_本地方法_05

java语言主要的技术有:

1.面向对象

2.多线程

3.结构化错误处理

4.垃圾回收(garbage collection,GC)

5.动态连接

6.动态扩展

这些就留到以后继续深究了。