前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java面试题 --- JVM之体系结构

java面试题 --- JVM之体系结构

作者头像
贪挽懒月
发布2021-12-20 19:09:46
3170
发布2021-12-20 19:09:46
举报
文章被收录于专栏:JavaEEJavaEE

1. JVM 由哪些区域构成?

  • 由类加载器和运行时数据区构成;运行时数据区又分为线程私有和线程共享两大区域,线程私有的包括程序计数器、虚拟机栈和本地方法栈,线程共享的包括堆和方法区。

2. 类加载器的作用是什么?

  • 加载 class 文件,生成类的结构信息,将其存放在方法区。

3. 类加载器有哪些种类以及它们之间的关系是什么?

  • Bootstrap ClassLoader,加载 lib 下面的类;Extension ClassLoader,加载扩展类,即 jre/ext 下面的类;Application ClassLoader,加载用户编写的类;还可以继承 ClassLoader 类自定义类加载器。Application ClassLoader 是 Extension ClassLoader 的子类,Extension ClassLoader 又是 Bootstrap ClassLoader 的子类。

4. 什么是双亲委派机制?

  • 简单地说就是要加载类时先找自己的父类去进行加载。比如要加载 A.class,首先 Application ClassLoader 会先找自己的父类,即 Extension ClassLoader,Extension ClassLoader 又会先找自己的父类,即 Bootstrap ClassLoader,它没加载到,再告诉 Extension ClassLoader,它又没加载到,才轮到 Application ClassLoader 去加载。这就是双亲委派机制,可以保证优先加载 JDK 自己的类。

5. 类的加载过程是怎样的?

  • 加载:将 class 文件加载进内存;
  • 验证:验证 class 文件的正确性;
  • 准备:给类中的静态变量分配空间;
  • 解析:将 class 常量池中的符号引用替换成直接引用;
  • 初始化:对静态变量和静态代码块进行初始化。

6. 说说你对栈内存的认识?

  • 栈内存是线程私有的一块区域,分为虚拟机栈和本地方法栈。基本类型的变量、对象的引用变量和实例方法都是在栈中分配的。栈的内存地址是连续的,不存在垃圾回收。本地方法栈和虚拟机栈差不多,只不过本地方法栈是为本地方法服务的。

7. 程序计数器的作用是什么?

  • 记录程序执行的位置,程序调用别的方法、循环、递归的时候,下一次要回到哪儿执行,就靠程序计数器记录。

8. 方法区是物理上的划分吗?

  • 方法区是用来存储类加载器生成的类的结构信息的,它是逻辑上的划分,是一种规范,并不是具体的实现。jdk1.7 对方法区的实现叫做永久代,它存在于堆内存中;jdk1.8 对方法区的实现叫元空间,它共用物理内存。

9. 你对堆内存了解多少?

  • 堆是 JVM 中最大的一块区域,存放数组以及对象。它又分为新生代、老年代,内存占比是 1:2 。新生代又分为伊甸园区、from 区和 to 区,这三块区域内存占比为 8:1:1 。对象在新生代的伊甸园区出生,经历了若干次垃圾回收达到了年龄的对象就会存放到老年代。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021/12/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档