面试题小总结
什么时候会触发Full GC/如何避免触发Full GC
-
调用 System.gc() 建议虚拟机执行Full GC ,但是虚拟机不一定会去执行。不建议使用这个手段,应该让虚拟机自己管理内存。
-
未指定老年代、新生代大小,伸缩堆时会产生FULL GC ,所以一定要配置 -Xms(初始堆大小) -Xmx (最大堆大小)
-
老年代空间不足
老年代空间不足的常见场景比如:大对象、大数组直接进入老年代,长期存活的对象进入老年代等
为了避免以上原因引起的Full GC,应当尽量不要创建大对象以及数组。除此之外应该通过虚拟机的参数调大新生代的大小(-Xmn:年轻代大小)让对象尽量在新生代被回收,不进入老年代还可以通过-XX:MaxTenuringThreshold调大对象进入老年代的年龄,让对象在新生代存活的久一点在执行Full GC后空间依然不足,则抛出异常:java.lang.OutOfMemoryError: Java heap space. -
Jdk7以前的(永久代空间耗尽) ps:1.8以上方法区换成了元空间,元空间原则上的内存就是物理硬盘的大小
在Jdk7及以前,HotSpot虚拟机中的方法区是用永久代实现的,永久代中存放了一些class的信息、常量、静态变量等数据。当系统要加载的类、反射的类和调用的方法较多时,永久代可能会占满,在未采用CMS GC的情况下也会执行Full GC,为避免以上原因导致Full GC,垃圾收集器可采用CMS GC 或者增大Perm Gen(永久代) -
空间分配担保失败
1、平均每次晋升的对象平均大小>大于老年代的剩余空间
2、Minor GC后存活的对象超过了老年代剩余空间
注意GC日志中是否有promotion failed和current mode failure两种状况,当出现这两种状况的时候可能会触发Full GC.
promotion failed是在进行Minor GC的时候,Survivor space空间放不下只能晋升老年代。而此时老年代也空间不足时发生。 concurrent mode failure 是在进行CMS GC过程,此时有对象要放入老年代而空间不足造成的。这种情况下会退化使用serial Old收集器变成单线程的,此时是相当的慢的。为了避免以上的情况,策略就是尽量把对象在新生代使用回收,减少晋升老年代的几率。引用地址: [QIANGLU]: https://juejin.cn/post/6884065458866094094
Dubbo如何设置线程池大小
服务提供方线程池实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方的业务逻辑
1.Dubbo的默认线程池是200,调整线程池大小配置为<dubbo:protocol threadpool='XXXX' />
mysql 一条sql此前是走索引的,随着业务量增加为什么不走索引了。
1.当数据量达到全表的30%则不会走索引,优先走ALL全表查询。
BeanFactory 和ApplicationContextFactory的区别
BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。
-
BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能:
①继承MessageSource,因此支持国际化;
②统一的资源文件访问方式。
③提供在监听器中注册bean的事件。
④同时加载多个配置文件。
⑤载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。 -
BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化。这样,我们就不能发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常。
-
BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建,如使用ContextLoader。
-
BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。

浙公网安备 33010602011771号