JAVA面试整理-JVM知识

1. 什么情况下会发生栈内存溢出。

(1)StackOverflowError:线程请求的栈深度大于JVM所允许的最大深度,所以根本原因是,某个线程所需的栈内存超过了JVM的限制,而此时物理内存仍有足够的可用空间

(2)OutOfMemoryError:无法(向操作系统)申请到足够的内存空间用来拓展栈。根本原因是,(操作系统管理的)物理内存已没有足够的可用内存分配给JVM的栈使用


2. JVM 的内存结构,Eden 和Survivor 比例。

方法区、堆、 虚拟机栈、程序计数器、本地方法栈,HotSpot JVM 默认Eden 和Survivor 比例为8:1


3. JVM 内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden 和Survivor。
4. JVM 中一次完整的GC 流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的
JVM 参数。
5. 你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms 和G1,包括原理,流程,优缺
点。
6. 垃圾回收算法的实现原理。
7. 当出现了内存溢出,你怎么排错。

1)使用Java自带工具jstat查看GC情况和每个分区的使用情况,查看dump文件,前提是在程序运行之前配置了内存溢出时生成dump文件的参数

2)使用mat工具分析dump文件


8. JVM 内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,
工作内存等。

 重排序会引起多线程程序的执行结果

内存屏障有两个作用:

  1. 阻止屏障两侧的指令重排序;
  2. 强制把写缓冲区/高速缓存中的脏数据等写回主内存,让缓存中相应的数据失效。

在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happens-before关系。

如果两个操作不存在任一一个happens-before规则,那么这两个操作就没有顺序的保障,JVM可以对这两个操作进行重排序。如果操作A happens-before操作B,那么操作A在内存上所做的操作对操作B都是可见的。


9. 简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。

打破双亲委派机制则不仅要继承ClassLoader类,还要重写loadClass和findClass方法
10. 讲讲JAVA 的反射机制。

反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,类,类的成员,我们在运行的时候还可以动态地去操作他们.


11. 你们线上应用的JVM 参数有哪些。
12. g1 和cms 区别,吞吐量优先和响应优先的垃圾收集器选择。


13. 怎么打出线程栈信息。

jstack


14. 请解释如下jvm 参数的含义:
-server -Xms512m -Xmx512m -Xss1024K
-XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值