【Android面试】Java虚拟机相关面试题(二)

一、简述JVM中类的加载机制与加载过程?

1、概述:虚拟机把描述类的数据从Class文件加载到内存,并对数据 进行校验、转换解析和初始化,最终形成可以被虚拟直接使用的java类型,这就是虚拟机的类加载机制。

2、类加载的过程:加 载、验 证、准 备、解 析、初始化、使 用、卸载

3、关于初始化: 5种情况会触发类的初始化

1)遇到new,getstatic,putstatic,invokesstatic这四个字节码指令 时,如果类没有被初始化

2)使用java.lang.reflect包的方法对类进行反射时,如果类没 有被初始化,则先触发其初始化

3)当初始化一个类时,其父类没有被初始化,则需要父类先初始化

4)虚拟机启动时,用户需要制定一个执行的主类,虚拟机会先初始化这个类

5)JDK 1.7动态语言支持时,如果一个java.lang.invoke.MethodHandle实例后的解析结果REF_getStatic,REF_putStatic,REF_invokeStatic的方 法句柄,并且这个方法句柄所对应的类没有被初始化

二、类加载的过程

通过一个类的全限名来获取定义此类的二进制字节流,将字节流所代表的静态存储结构转化为方法区的运行时 数据结构在内存中生成一个代表这个类的java.lang.Class对象, 作为方法区这个类的各种数据的访问入口

三、JVM、Dalvik、ART三者的原理和区别?

JVM:是Java Virtual Machine的缩写,其并不是指某个特定的虚拟机实现,而指任何能够运行Java字节码(class文件)的虚拟机实现,比如oracle的HotspotVM

Dalvik:是Google写的一个用于Android的虚拟机,但其严格来说并不算JVM(没有遵守Java虚拟机规范,比 如其字节码格式是dex而非class)该虚拟机在5.0时被ART替代

ART:是Android Runtime的缩写,严格来说并不是一个虚拟机,在4.4~6.0时采用安装时全部编译为机器码的 方式实 现,7.0时默认不全部编译,采用解释执行+JIT+空闲时AOT以改善安装耗时ART在安卓4.4时加入,5.0取代dalvik作为唯一实现直到现在

四、请谈谈Java的内存回收机制?

内存分为栈(stack)和堆(heap)两部分:

栈记录了方法调用,每个线程拥有一个栈,栈的每一帧中保存有该方法调用的参数、局部变量、返回地址栈中被调用方法运行结束时,相应的帧会删除,参数和局部变量占用的空间也会释放,堆是用来存储对象的,堆区由所有线程共享

垃圾回收机制有:引用计数算法、可达性分析算法、标记清除算法、复制算法、标记整理算法、分代回收算法。

五、JMM是什么?它存在哪些问题?该如何解决?

就是Java内存模型。存在的问题就是多线程对共享数据的读写一致性问题,可以通过synchronized、cas、并发安全的数据结构、aqs 组件来解决

#android面试#
全部评论
面试的时候一定会考这个吗
点赞 回复 分享
发布于 2023-02-11 10:03 广东
感觉好多字啊,记好真难
点赞 回复 分享
发布于 2023-02-11 10:21 上海

相关推荐

贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
评论
15
2
分享
牛客网
牛客企业服务