- 1.JVM的主要组成部分及作用
- 2.JVM运行时数据区
- 3.对象是如何创建的
- 4.创建对象时内存是如何分配的
- 5.创建对象时如何处理并发安全问题
- 6.Java对象的内存布局
- 7.对象的访问方式有哪些
- 8.Java内存泄漏和内存溢出是什么,如何避免
- 9.什么情况会发生栈内存溢出
- 10.Java中垃圾回收是什么,为什么需要垃圾回收?
- 11.Minor GC和Full GC有什么不同?什么情况下会触发Full GC和Minor FC?
- 12.为什么要减少Full GC的发生?
- 13.JVM的内存分配与回收
- 14.Java中都有哪些引用类型
- 15.如何判断对象是否可以回收
- 16.JVM中的永久代中会发生垃圾回收吗?元空间会发生垃圾回收吗?
- 17.有什么办法主动通知虚拟机进行垃圾回收?
- 18.垃圾回收算法
- 19.垃圾收集器
- 20.什么是类加载
- 21.简述类加载过程
- 22.类加载器有哪些
- 23.什么是双亲委派机制
- 24.有哪些打破双亲委派机制的例子
- 25.虚拟机性能监控的一些命令
- 26.JVM如何调优
26.JVM如何调优
首先,永久代这个概念是HotSpot虚拟机中独有的,其他Java虚拟机中并没有永久代的概念
在JDK1.8之前JVM存在永久代,在JDK1.8被元空间替代。那什么是永久代呢?永久代和元空间都是方法区的具体实现,方法区只是一种规范
在永久代中主要是存放类的信息(成员方法、构造器、类加载器等)及运行时常量池,所以当永久代满了也会进行回收。
在永久代发生的内存回收主要是常量池的回收和类型的卸载。常量池的回收相对容易,只要常量池中的常量没有被任何地方引用,就可以被回收。判断一个类型是否可以回收比较麻烦,主要看以下几个方面:
- 该类型所有实例都被回收
- 加载该类的类加载器已经被回收
- 该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法
为什么在JDK1.8会使用元空间取代永久代?
永久代使用的是设定好的虚拟机内存,无法动态扩展内存空间,当加载的类过多就可能发生OOM,并且永久代的内存大小设置也是难以确定的,所以对永久代调优也是比较困难的。
元空间的出现就解决了永久代的问题,因为元空间不再使用虚拟机的内存了,而是使用了本地内存,本地内存可以自动扩展调节,内存不足也不会触发Full GC。
本站链接:https://www.mianshi.online,如需勘误或投稿,请联系微信:lurenzhang888
点击面试手册,获取本站面试手册PDF完整版