疏漏总结(七)

1、Spring框架事务传播行为

Spring的传播行为确定了客户端和被调用端的事务边界,简单来说就是多个具有事务控制的Service的相互调用时所形成的复杂的事务边界控制。Spring定义了7种传播行为:

  1. REQUIRED:默认事务传播行为,如调用者存在一个事务则支持当前事务,与调用者处于同一个事务上下文,回滚统一回滚。如果调用者没有事务则开启一个新的事务。被设置成这个级别会为每个被调用的方法创建一个逻辑事务域。如当前方法已创建事务,那么后面的方法支持当前事务如果没有事务会重新建立事务
  2. SUPPORTS:如调用者存在一个事务,则支持调用者事务与调用者处于同一个事务上下文回滚统一回滚
  3. MANDATORY:如调用者存在一个事务则支持调用者事务,与调用者处于同一个事务上下文,回滚统一回滚。如没有事务抛出异常
  4. REQUIRES_NEW:如调用者不存在事务则新建一个事务,如调用者存在一个事务则把当前事务挂起。这两个事务不处于同一个上下文,如果各自发生异常各自回滚
  5. NOT_SUPPORTED:以非事务的方式执行操作,如调用者存在事务就把调用者事务挂起
  6. NEVER:以非事务的方式执行操作,如调用者存在事务则抛出异常
  7. NESTED:如调用者不存在事务就新建一个事务。如调用者存在一个事务,则以嵌套事务执行该方法。嵌套事务是指内层事务依赖于外层事务,外层事务失败时候会回滚内层事务所做的动作,而内层事务操作失败并不会引起外层事务的回滚

2、G1垃圾收集器三色标记法

提到并发标记,我们不得不了解并发标记的三色标记算法。它是描述追踪式回收器的一种有用的方法,利用它可以推演回收器的正确性。

将对象分为三种类型:

  • 黑色:跟对象或者该对象与它的子对象都被扫描(标记完成)。
  • 灰色:对象本身被标记完成,但是还没有扫描完该对象中的子对象
  • 白色:未被扫描的对象。或者是扫描完成后,最终白色对象为不可达对象即为垃圾对象。

当GC开始扫描对象时,则会按照如下图步骤进行对象的扫描:

对象标记过程

1、根对象被置为黑色,子对象被置为灰色。
在这里插入图片描述
2、继续由灰色遍历,将已扫描了子对象的对象置为黑色。
在这里插入图片描述
3、遍历了所有可达的对象后,所有可达的对象都变成了黑色。不可达的对象即为白色,需要被清理。
在这里插入图片描述
在这过程中会造成对象丢失,解决办法如下:
1、插入时候记录对象
2、删除时候记录对象

增量更新: 在CMS采用的是增量更新(Incremental update),只要在写屏障(write barrier)里发现要有一个白对象的引用被赋值到一个黑对象 的字段里,那就把这个白对象变成灰色的。即插入的时候记录下来。

STAB:在G1中,使用的是STAB(snapshot-at-the-beginning)的方式,删除的时候记录所有的对象,它有3个步骤:

  1. 开始标记的时候生成一个快照图标记存活对象
  2. 并发标记的时候所有被改变的对象入队(在write barrier里把所有旧的引用所指向的对象都变成非白的)
  3. 可能存在游离的垃圾,将在下次被收集

这样G1到现在可以知道哪些老的分区可回收垃圾最多。 当全局并发标记完成后,在某个时刻,就开始了Mix GC.

3、Resource和Autowired区别

1、共同点
两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

2、不同点
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。

@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

4、用户态和内核态

当一个进程在执行用户自己的代码时处于用户运行态(用户态),此时特权级最低,为3级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态。Ring3状态不能访问Ring0的地址空间,包括代码和数据;当一个进程因为系统调用陷入内核代码中执行时处于内核运行态(内核态),此时特权级最高,为0级。执行的内核代码会使用当前进程的内核栈,每个进程都有自己的内核栈。

用户运行一个程序,该程序创建的进程开始时运行自己的代码,处于用户态。如果要执行文件操作、网络数据发送等操作必须通过write、send等系统调用,这些系统调用会调用内核的代码。进程会切换到Ring0,然后进入3G-4G中的内核地址空间去执行内核代码来完成相应的操作。内核态的进程执行完后又会切换到Ring3,回到用户态。这样,用户态的程序就不能随意操作内核地址空间,具有一定的安全保护作用。这说的保护模式是指通过内存页表操作等机制,保证进程间的地址空间不会互相冲突,一个进程的操作不会修改另一个进程地址空间中的数据。

5、JDK12中G1的新功能

可中断的G1
如果G1混合集合可能超过暂停目标则会使其终止。
如果G1发现启发式的收集重复的选择错误的区域数及收集预测不准确的时候会切换到更复杂的方式来执行收集;将需收集的内容拆分成两个部分:强制部分和可选部分。强制性部分包括G1不能逐步收集处理的部分(如年轻代),但是可以包含老年代以此提高效率。例如强制部分可是预测的收集部分的80%,剩余的20%(仅仅由老年代组成)构成可选部分。

G1完成强制部分的收集后如果还有剩余时间。G1会以更加细粒度的级别开始收集可选部分。此可选部分的收集粒度取决于剩余的时间量,一次最多只能到一个区域。完成对可选部分的收集后G1可根据剩余时间决定停止集合。

随着收集预测再次变得准确可选部分越来越小,直到强制部分再次包含所有收集部分(即G1完全依赖于其启发式)。如果预测再次变得不准确则下一个集合将再次包含强制和可选部分。

通过G1更及时的返回未使用的内存。

增强G1垃圾收集器。以便在空闲时候自动将java堆内存返回给操作系统。

为了实现向操作系统返回最大内存量的目标,G1将在应用程序不活动期间定期尝试或触发并发周期以确定整体Java堆使用情况。这将导致它自动将Java堆的未使用部分返回给操作系统。同时用户可主动选择Full GC从而最大化的返回未使用内存。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值