【每天8题】JVM高频面试题

1、对象在哪块内存分配?

        数组和对象在堆内存分配,某些对象没有逃逸出方法,可能被优化为在栈上分配

2、谈谈JVM中的常量池

a.字符串常量池:存放在堆中,包括String对象执行intern()方法后存的地方,双引号直接引用的字符串

b.运行时常量池:constant_pool,JVM定义的概念

3、谈动态年龄判断

a.这里涉及到-XX:TargetSurvivorRatio参数,Survivor区的目标使用率默认为50,即survivor区对象目标使用率为50%

b.survivor区相同年龄所有对象大小的总和(survivor区内存大小*这个目标使用率)时,大于或等于改年龄的对象直接进入老年代。

c.当然,这里还需要考虑参数-XX:MaxTenuringTheshold晋升年龄最大阈值

4、谈谈永久代

a.jdk1.8之前,Hostpot中方法区的实现是永久代(Perm)

b.jdk7开始把原本放在永久代的字符串常量池、静态变量等移出到堆,JDK1.8开始去除永久代,使用元空间(Metaspace),永久代剩余内容移至元空间,元空间直接在本地内存分配。

5、JVM 有哪些运行时内存区域

a. The pc Register ,程序计数器

b. java Virtual Machine Stacks, java 虚拟机栈

c. Heap 堆

d. Method Area ,方法区

e. Run-Time Constant Pool ,运行时常量池

f. Native Method Stacks ,本地方法栈

6、运行时栈帧包含哪些结构?

a.局部变量表

b.操作数栈

c.动态链接

d.返回地址

e.附加信息

7、JVM 的内存模型

JVM试图定义一种统一的内存模型,能将各种底层硬件以及操作系统的内存访问差异进行封装,使Java程序在不同硬件以及操作系统上都能达到相同的并发效果,它分为工作内存和主内存,线程无法对主存储器直接进行操作,如果一个线程和另一个线程进行通信,那么只能通过主存进行交换。

8、jvm如何确定垃圾对象

a.jvm采用的是可达性分析法算法,通过GC roots来判断对象是否存活,通过GC Roots向下追溯,搜索,会产生Reference Chain,当一个对象不能和任何一个GC Root产生关系时,就定义为垃圾

b. 软引用和弱引用,也会影响对象的回收,内存不足时会回收软引用对象;GC时会回收弱引用对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值