1.垃圾回收算法哪些阶段会stop the world?
2.minorGC、majorGC、fullGC的区别,什么场景触发full GC
3.垃圾回收器 CMS 和 G1的区别?
4.什么情况下使用CMS,什么情况使用G1?
5.G1回收器的特色是什么?
6.GC只会对堆进行GC吗?
7.说一下你对 Spring 的理解
8.Spring IoC和AOP 介绍一下
9.Spring的aop介绍一下
10.IOC和AOP是通过什么机制来实现的?
1.垃圾回收算法哪些阶段会stop the world?
STW,即Stop-The-World的缩写,指的是系统在执行特定操作时需暂停(停止)所有应用程序线程。
标记阶段和再标记阶段会stop the world来避免错标,漏标。为了缩短stop the world时间,会采用并发算法,多个GC线程来。
复制/压缩阶段(Copy/Compact Phase)这一过程涉及对象的内存地址变化,因此需要暂停应用线程,避免引用被修改导致的数据不一致。此阶段一般是Stop-the-World中耗时较长的部分。
2.minorGC、majorGC、fullGC的区别,什么场景触发full GC?
最大的区别是其作用范围和触发频率。
minorGC,是作用在年轻代的,当eden区无法再创建新对象时,会触发minorGC,将eden区和一个survivor区的存活对象移至另外一个survivor区。
majorGC发生老年代。当老年代无法再新增对象时,会指向GC算法进行回收。
fullGCN是堆整个堆内存,以及永久代元空间的GC。一般调用System.gc()或者Runtime.getRuntime().gc()后,尝试执行。或者永久代或元空间内存不足。
3.垃圾回收器 CMS 和 G1的区别?
CMS:concurrent mark sweep 并发标记清除算法,是分代的老年代垃圾回收器,也是第一个关注到STW的垃圾回收器。 通过三色标记法:初始标记(stw,探索被GCRoots引用的对象),并发标记,重新标记(stw对并发标记进行校验),最后再并发清除。只清除,不整理,会造成大量内存碎片,触发Full GC。
G1:Garbage-First Garbage Collector 垃圾第一算法,是分区的可用于年轻代合老年的回收器。 G1 有五个属性:分代、增量、并行、标记整理、STW。把堆分为固定大小的region,每个region可以是eden,survivor,old,humongous或者空白。G1根据,每个region的垃圾回收情况决定下一次GC处理哪些region,是增量的一点一点GC。并且回收的时候是并行的。对于老年代的region,执行标记-整理算法。
4.什么情况下使用CMS,什么情况使用G1?
5.G1回收器的特色是什么?
G1最大的特点是引入分区的思路,弱化了分代的概念。
G1可以通过设置预期停顿时间(Pause Time)来控制垃圾收集时间避免应用雪崩现象。
G1 能更充分的利用 CPU 多核环境下的硬件优势,来缩短 stop the world 的停顿时间。
6.GC只会对堆进行GC吗?
JVM 的垃圾回收器不仅仅会对堆进行垃圾回收,它还会对方法区进行垃圾回收。
方法区是用于存储类信息、常量、静态变量等数据的区域。虽然方法区中的垃圾回收与堆有所不同,但是同样存在对不再需要的常量、无用的类信息等进行清理的过程。
7.说一下你对 Spring 的理解
Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
其核心特性分别为IoC控制反转,AOP面向切面编程,事务管理和MVC框架。
(基于注解的方式用得多了,都忘记当初基于xml配置的依赖注入等等了)。
8.Spring IoC和AOP 介绍一下
这部分看javaguide比较好。
9.Spring的aop介绍一下
10.IOC和AOP是通过什么机制来实现的?
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib 生成一个被代理对象的子类来作为代理
IoC
我粗略的总结一下:控制反转就是把创建和管理 bean 的过程转移给了第三方。而这个第三方,就是 Spring IoC Container,对于 IoC 来说,最重要的就是容器。
Bean 其实就是包装了的 Object,无论是控制反转还是依赖注入,它们的主语都是 object,而 bean 就是由第三方包装好了的 object。
dependency injection - 依赖注入。配置文件把资源从外部注入到内部,容器加载了外部的文件、对象、数据,然后把这些资源注入给程序内的对象,维护了程序内外对象之间的依赖关系。
AOP
AOP,也就是 Aspect-oriented Programming。通过切面技术为业务主体增加额外的通知(Advice),从而对声明为“切点”(Pointcut)的代码块进行统一管理和装饰。(例如,苍穹外卖插入和更新商品信息,用户信息等等要set修改时间,或者创建时间,就自定义注解,并利用切面类,在执行mapper函数之前进行set操作。
我们可以简单的把 AOP 理解为贯穿于方法之中,在方法执行前、执行时、执行后、返回值后、异常后要执行的操作。
会用到反射等等。