所谓JVM,即Java Virtual Machine(Java虚拟机)的缩写。众所周知,Java语言的一个非常重要的特点就是与平台的无关性,而Java虚拟机是实现这一特点的关键。Java虚拟机有自己完善的硬体架构,屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
作为Java的基础知识,很多企业在面试时会提问求职者Java虚拟机的一些知识:
1、Java虚拟机为新生对象分配内存有哪两种方式?
答:指针碰撞和空闲列表。Java虚拟机采用哪种方式为新生对象分配内存,取决于所使用的垃圾收集器,当垃圾收集器具有整理过程时,虚拟机将采用指针碰撞的方式;当垃圾收集器的回收过程没有整理过程时,则采用空闲列表方式。
2、Java虚拟机运行时数据区包括哪些?
答:根据Java虚拟机规范的规定,虚拟机内存在Java程序运行时被分为程序计数器、Java虚拟机栈、本地方法栈、堆和方法区五个区域。
3、Java虚拟机类加载的周期包括哪几个阶段?
答:类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。
4、Java虚拟机分配过程中如何解决线程安全?
答:两种方式:1)对分配内存空间的动作进行同步处理——实际上虚拟机采用CAS配上失败重试的方式保证更新操作的原子性;2)把内存分配的动作按照线程划分在不同的空间之中进行,即每个线程在Java堆中预先分配一小块内存,称为本地线程分配缓冲(TLAB)。哪个线程要分配内存,就在哪个线程的TLAB上分配,只有TLAB用完并分配新的TLAB时,才需要同步锁定。虚拟机是否使用TLAB,可以通过-XX:+/-UseTLAB参数来设定。
5、Java虚拟机对象在内存中如何布局?
答:在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data) 和对齐填充(Padding)。
6、Java虚拟机中主流的访问方式有哪几种?
答:有使用句柄和直接指针两种。使用句柄访问的**好处就是reference中存储的是稳定的句柄地址,使用直接指针访问的**好处就是速度更快,节省了一次指针定位的时间开销。
欢迎具体了解:郑州Java培训机构http://zz.mobiletrain.org/java/ |