【Java进阶营】java面试题 --- JVM之体系结构

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. 说说你对栈内存的认识?

    栈内存是线程私有的一块区域,分为虚拟机栈和本地方法栈。基本类型的变量、对象的引用变量和实例方法都是在栈中分配的。栈的内存地址是连续的,不存在垃圾回收。本地方法栈和虚拟机栈差不多,只不过本地方法栈是为本地方法服务的。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

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

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

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

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

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

    堆是 JVM 中最大的一块区域,存放数组以及对象。它又分为新生代、老年代,内存占比是 1:2 。新生代又分为伊甸园区、from 区和 to 区,这三块区域内存占比为 8:1:1 。对象在新生代的伊甸园区出生,经历了若干次垃圾回收达到了年龄的对象就会存放到老年代。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值