分享10道JVM入门面试题!!!

1.为什么不能根据返回类型来区分重载,为什么

因为调用时不能指定返回类型信息,编译器不知道你要调用哪个函数。

2.Class类的作用?生成Class对象的方法有哪些?

Class类是Java 反射机制的起源和入口,用于获取与类相关的各种信息,提供了获取类信息的相关方法。

对象名.getClass()

对象名.getSuperClass()

类名.class

包装类.TYPE

3.JVM 运行时内存

JVM运行时内存主要分5块,Java堆、方法区、本地方法栈、虚拟机栈、程序计数器,其中Java堆与方法区为线程共享,本地方法栈、虚拟机栈、程序计数器为线程私有。

1)其中Java堆主要存放程序运行时产生的对象和数组,这个区域是垃圾回收主要回收的区域。

2)方法区主要存放类信息、常量、静态常量、静态变量、运行时常量等。

3)程序计数器是线程隔离的,是当前线程正在执行的字节码行号指示器,由于它只存储一个指令,所以它是唯一一个不会内存溢出的区域。

4)然后本地方法栈是服务于线程要执行的本地方法。

5)虚拟机栈存放的是栈帧。

4.垃圾回收与算法

释放垃圾占用的空间,防止内存泄露。

1)引用计数法:

给每个对象添加一个计数器,当有地方引用该对象时计数器加1,当引用失效时计数器减1。

2)标记-清除算法:

分为2部分,先把内存区域中的这些对象进行标记,哪些属于可回收标记出来,然后把这些垃圾拎出来清理掉。

3)复制算法:

它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。

4)分代收集算法:

根据对象存活周期的不同将内存划分为几块。

5.GC 分代收集算法 VS 分区收集算法

分代收集算法:

在新生代-复制算法

每次垃圾收集都能发现大批对象已死, 只有少量存活. 因此选用复制算法, 只需要付出少量存活对象的复制成本就可以完成收集.

在老年代-标记整理算法
因为对象存活率高、没有额外空间对它进行分配担保, 就必须采用“标记—清理”或“标记—整理”算法来进行回收, 不必进行内存复制, 且直接腾出空闲内存

分区收集算法
  • 分区算法则将整个堆空间划分为连续的不同小区间, 每个小区间独立使用, 独立回收
  • 好处是可以控制一次回收多少个小区间 , 根据目标停顿时间, 每次合理地回收若干个小区间(而不是整个堆), 从而减少一次 GC 所产生的停顿

6.GC 垃圾收集器

gc不仅负责垃圾回收,还决定内存分配。

java内存管理主要是对内存中的对象进行内存的分配和回收,当我们创建一个对象时,对象的引用放在栈(Stack)中,对象放在堆(heap)中,gc只回收堆里面的对象。当gc检测到一个堆中的一个对象不在被引用时,就会对这个对象进行回收。

7.类加载器

用来加载 Java 类到 Java 虚拟机中。Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件),类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。

8.JVM 类加载机制

虚拟机加载Class文件(二进制字节流)到内存,并对数据进行校验、转换解析和初始化,最终形成可被虚拟机直接使用的Java类型。

9.类构造器

构造器是类中的一个特殊方法,该方法在对象实例化时被调用。构造器的用途适当对象实例化时初始化对象的成员变量。当我们要为一个类添加构造器时南无构造器名称就必须和类的名称一致,并且不能声明返回值。

10.阻塞 IO 模型/非阻塞 IO 模型

默认情况下,所有套接字都是阻塞的。进程挂起,内核等待外部IO响应,IO完成传送数据到kernel buffer,数据再从buffer复制到用户的进程空间。

在内核请求IO设备响应指令发出后,数据就开始准备,在此期间用户进程没有阻塞,也就是没有挂起,它一值在询问或者check数据有没有传送到kernel buffer中,忙等…。但是第二个阶段(数据从kernel buffer复制到用户进程空间)依然是阻塞的。但这种IO模型会大量的占用CPU的时间,效率很低效,很少使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值