JVM

19四、说一下JVM的主要组成部分? 及其做用?spa

1) 类加载器 (ClassLoader)操作系统

2) 运行时数据区 (Runtime Data Area)线程

3) 执行引擎 (Execution Engine)翻译

4) 本地库接口 (Native Interface)对象

组件的做用: 首先经过类加载器(ClassLoader)会把Java代码转换成字节码,  运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是JVM的一套指令集规范,并不能直接交给底层操做系统去执行,所以须要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层指令,再交给CPU去执行,而这个过程当中须要调用其余语言的本地库接口(Native Interface)来实现这个程序的功能。接口

 

19五、说如下JVM运行时数据区?队列

不一样虚拟机的运行数据区可能略微有所不一样,可是都会听从Java虚拟机规范,Java虚拟机规范规定的区域为如下5个部分:内存

1) 程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器, 字节码解析器的工做是经过改变这个计数器的值,来选取下一条须要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能,都须要依赖这个计数器完成。虚拟机

2)Java虚拟机栈(Java Virtual Machine Stacks): 用于存储局部变量,操做数栈,动态连接,方法出口等信息。io

3)本地方法栈(Native Method Stack): 与虚拟机栈的做用同样的,只不过虚拟机栈服务Java方法的,而本地方法栈是为虚拟机调用Native方法服务的;

4) Java堆(Java Heap): Java虚拟机中内存最大的一块,是被全部线程共享的,几乎全部的对象实例都在这里分配内存

5) 方法区(Method Area): 用于存储已经被虚拟机加载的类信息,常量,静态变量,即时编译后的代码等数据。

 

 19六、说一下堆栈的区别?

功能方面: 堆是用来存放对象的,栈是用来执行程序的。

共享性: 堆是线程共享的,栈是线程私有的。

空间大小 : 堆大小远远大于栈。

 

 

19七、队列和栈的是什么? 有什么区别?

队列和栈都是被用来预存储数据的。

队列容许先进先出进行检索原生,但也有例外的状况,Deque接口容许从两端检索元素。

栈和队列很类似,可是他容许对元素后进先出进行检索。

 

 

198. 什么是双亲委派

在介绍双亲委派模型以前,先说下类加载器。对于任意一个类,都须要由加载它的类加载器和这个类自己一同确立在JVM中的惟一性,每个类加载器,都有一个独立的类名称空间。类加载器就是根据指定全限定名称将class文件加载JVM内存中,而后再转化为class对象

 

类加载器的分类:

1)启动加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载Java_Home/lib/目录中的,或者被-XBootclasspath参数所指定的路径中而且被虚拟机识别的类库。

2)其它类加载器

    21)扩展类加载器(Extension ClassLoader)

 

 

19九、说一下类加载的执行过程?

1)加载: 根据查找路径找到相应的class文件而后导入

2)检查: 检查加载的class文件的正确性

3) 准备: 给类中的静态变量分配内存空间

4) 解析: 虚拟机将常量池中的符合引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存中的地址

5) 初始化: 对静态变量和静态代码块执行初始化工做。

相关文章
相关标签/搜索