Java虚拟机面试问题

Java虚拟机中的多线程是通过线程轮流切换并并分配处理器的时间来实现的,对于任意一个时刻,一个处理器(对于多核处理器而言是一个核)只会执行一条线程中的指令,因此为了线程切换后都能够恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器
Java虚拟机栈描述的是java方法的执行的内存模型,每个方法在执行的时候都会创建一个栈帧,用于存储局部变量表,操作数栈,方法出口等,一个方法从调用到执行完成就对应着栈帧在虚拟机中入栈到出栈的过程。为线程私有,生命周期与线程相同。
本地方法栈和虚拟机栈的作用非常相似,但是其存在目的是为了本地方法而存在的,简单的说Java的Naive方法就是方法的实现是由非Java语言在外面实现的,是由Java调用非Java方法的一个接口。
Java堆是被所有线程所共享的一块区域,其目的就是为了存储对象实例,所有的对象实例都存放在堆中,从垃圾回收的角度,由于现在的收集器基本都采用的是分代回收的算法,所以Java堆还可以被细分为新生代和老生代。Java堆中可以存在在物理上不连续的内存空间,只要逻辑上连续即可。
Java堆中的内存分配假设Java堆中的内存是绝对完整的,被划分为已使用和未使用两个区域,中间通过位置指针记录位置,这样的话给新生成的对象划分内存空间,那么只需要将指针向未划分的区域移动,这称作是指针碰撞。那如果未使用的区域不是连续的,则需要一个列表来记录并维护能够使用的区域。
Java中的垃圾清除算法

  • 标记-清除算法
    首先标记出所有要回收的对象,之后在统一清除,该算法的缺点在于效率不高,同时清除之后会产生大量的内存不连续区域,会提前触发第二次的清除。

  • 复制算法
    可将内存按容量划分为相等的两块,每次只是用一块,当一块用完了将依旧存活着的对象复制到另一块中,将使用的这一块清理掉。缺点是每次只能使用一半的内存。

  • 标记整理算法
    和标记清除算法相似但是区别是后续步骤并非将可回收对象进行清除,而是让存活对象向一端移动。

  • 分代收集算法
    根据对象的存活周期将内存分为新生代和老年代,在新生代中对象大量死去少量存活,采用复制算法,老年代中存活率高,采用标记整理算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值