JVM综合50问-面试题

1.入门部分

1.1为什么要学习JVM?

第一:为了面试。(企业招聘战略在升级,业务和技术位的越来越深)

第二:为了更好的理解JAVA,

第三:为了更好的解决线上为题

1)实现线上软件升级。(热替换)

2)更好的方式内存泄露,提高内存的有效使用率。

3)更好的提高系统的吞吐量

1.2你了解那些JVM产品?

Oracle公司的HotSpot。

IBM公司的J9。

阿里公司的TaobaoVM。

1.3JVM的构成有哪几个部分?

第一:类加载子系统(负责将类读取到内存,效验类的合法性,对类进行初始化)

第二:运行时数据区(负责存储类信息,对象信息,执行逻辑)

第三:执行引擎(负责从指定地址对应的内存中数据让后解释执行以及GC操作)

第四:本地库接口(负责实现JAVA语言与其他编程语言之间的协同)

2.类加载部分

2.1你知道那些类加载器吗?

第一:BootStrapClassLoader

第二:ExtClassLoader

第三:AppClassLoader

第四:自定义 ClassLoader

2.2为什么需要多个类加载器?

每个类加载器都有自己的加载职责,负责从不同的位置加载我们所需要的类,同时可以在基于需求进行懒加载(按需加载)列如:

1)加载基础类库(核心类库)

2)扩展类库

3)三方类(MyBatis,Spring,...)。

4)自己的类。

2.3什么是双亲委派类加载模型?

所谓双亲委派模型可以简单理解为向上询问、向下委托。当我们的类在被加载时,首先会询 问类加载器对象的 parent 对象(两者之间不是继承关系),是否已经加载过此类,假如当前 parent 没有加载过此类,则会继续向上询问它的 parent,依次递归。如果当前父加载器可 以完成类加载则直接加载,假如不可以则委托给下一层类加载器去加载(可以理解为逐层分 配任务)。

2.4双亲委派方式加载类有什么优势,劣势?

通过双亲委派类加载机制,保证同一个类只能被加载一次,同时也是对类资源的一种保护。 例 如 我 们 自 己 也 写 了 一 个 java.lang.Object 类 , 为 了 保 证 Java 官 方 的 java.lang.Object 类加载后不再加载我们的 Object 就可以使用双亲委派机制。但是这里 也有一个缺陷,例如我们同一个 JVM 下有多个项目,但是不同项目中有包名类名都相同的 类(类中的内容是不同的),此时只能有一个项目中的类会被加载,其它项目则无法加载。还 有这种双亲委派模型可能会因为向上询问和向下委托,多少会影响一些性能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值