首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Android CR 案例集 & 最佳实践

最近两个月一直在做团队 CR Owner 机制的落地,以及 CR 氛围和文化的提升,对于 CR 逐渐有了一些更深的理解以及可落地的方案 个人理解,Code Review 是为了找出代码中「理想」和「现实...」之间的差距,所以如何把 CR 做好,其实就可以拆解成两个问题 理想的代码究竟是怎样的,也就是所谓的最佳实践 如何找出代码中理想和现实的差距,我给出的答案是从日常的 CR 活动中形成一份 CR 案例集...于是便有了这篇文章,希望从平常的 CR 活动中收集最常见问题和改进方案,以及 Android 中可落地的最佳实践,形成一份极佳的 CR 案例集供开发者和 reviewer 参考,并给新同学一些指引和借鉴...一、CR 中常见的问题 1、 代码规范 建议阅读:Java 编码规范 1.

76210

技术团队如何高效落地代码CR

引言 代码CR(Code Review)是软件研发活动中保障平台产品质量的重要环节,相信很多技术团队平常都会进行代码CR。...就拿阿里来说,一般周二和周四都是发布日,那么在发布上线某项功能之前都要组织进行发布代码CRCR不通过的代码必须修改检查通过后才能发布上线,可见一线互联网大厂技术团队对于代码CR的重视程度。...虽然大家对于代码CR都不陌生,但是在自己团队中实际落地的时候不免还是会遇到这样或者那样的问题,比较典型的问题有如下几种: 1、到底是所有的代码都需要进行CR,还是只要核心业务代码才需要进行CR?...3、线上CR还是线下CR? 4、代码CR很费时间和精力,如何才能保证在花费的时间和精力后可以达到预期效果?...如何保证代码CR效果 如果我们想要保证代码CR的落地效果,我们就需要搞清楚到底哪些因素会影响技术团队代码CR效果。

1.2K20

JVM垃圾回收--回收算法详解

Java虚拟机分代回收的思想,也就是从这个统计进行设计的。分代设计就是将堆划分为年轻代和老年代,对象存活时间很短就在年轻代,存活很长时间,就把这个对象移动到老年代。...年轻代使用耗时较短的回收算法也就是所说的Minor GC,大量的存活下来的对象占据老年代,到一定量级,那么根据算法就会触发全堆扫描--》FULL GC,这个时候就是我们所说的 Stop-the-world...我们新创建的对象,new出来的会放到Eden区中,Eden区中的临时对象会在这里,如果Eden区中的对象进行一次Minor Gc,不能被回收的对象会放到 Survivor的一个区中,每一次进行Minor...虽然做了分代,但是由于对象之间的相互调用,老对象又和新对象产生了引用关系,那么就得跑到老年代扫一遍 才能知道引用的新对象是否也该回收了,其实就是循着绳子找东西,本来院子里面的东西要搬走,但是屋子里面的有根绳子...垃圾回收算法还有很多,思路和思想都是提高回收效率,减少对系统的影响,另外还有一个空间利用率问题 。 备注:文中一部分是基于自己整理,一部分是对网络上的内容的摘录整合。

42320

GC回收算法&GC回收

:发现了就回收(按线程优先级) 虚引用:任何时刻都会被回收 GC回收算法 分代收集本质上就是分类讨论,根据对存活对象的预判,采用效率更高的收集算法。...GC回收器 Serial 回收器 Serial回收器是一种单线程串行回收器,使用复制算法,在执行回收时会产生较长时间的停顿,优点是不会产生线程切换的开销 通过JVM参数-XX:+UseSerialGC可以使用串行垃圾回收器...Serial Old 回收器 SO回收器是一种多线程并行回收器,使用标记整理算法,适用老年代 ParNew回收器 PN回收器是一种多线程并行器,使用复制算法。...参数控制:-XX:+UseParNewGC Parallel Old回收器 PO是一种多线程回收器,使用标记整理算法,适用老年代 Parallel Scavenge回收器 PS回收器也是一种多线程并行回收器...G1回收回收流程: 初始标记 并发标记 重新标记 并发回收 Minor GC 和Full GC 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。

89810

GC回收算法&&GC回收

GC回收器 Serial 回收器 单线程串行回收 使用复制算法 会产生较长时间的停顿(Stop the world) 不会产生线程切换的开销 通过JVM参数-XX:+UseSerialGC可以使用串行垃圾回收器...ParNew回收器 多线程并行回收 新生代回收器,采用复制算法 参数控制:-XX:+UseParNewGC Parallel Scavenge回收器 多线程并行回收 新生代回收器,采用复制算法 追求高吞吐量...Serial Old 回收器 老年代单线程回收 使用标记整理算法 Parallel Old回收器 老年代多线程回收 使用标记整理算法 串行与并行的效率分析: 以新生登记为例,假设新生人数较多,数量在5000...分区算法(G1内存结构) 在G1回收器之前,垃圾回收器分配的内存都是连续的。 ? 在G1回收器中,垃圾回收器将内存分为大量区块。 ?...,回收后大小,(年轻代堆总大小) 括号外:GC回收前年轻代和老年代大小,回收后大小,(年轻代和老年代总大小) user代表用户态回收耗时,sys内核态回收耗时,rea实际耗时。

74140

垃圾回收

1.4 分代回收算法 分代回收算法是一种垃圾回收算法,它将堆中的对象分成不同的代,每个代都有不同的回收策略。...分代回收算法的优点是可以更高效地回收内存,并且可以避免对短命对象进行过多的扫描和回收,提高性能。 通常分代回收算法都是基于标记-清除算法或标记-整理算法来实现的。...在运行环境中,垃圾回收算法会监测内存使用情况,当内存不足时会触发回收。 所以,当一个变量被标记清除时,它不是立刻被回收的,垃圾回收器会在运行时检查变量和对象的可达性,并在适当的时候回收不再使用的内存。...总结来说, Google Chrome 浏览器使用的是 V8 引擎,它采用了增量标记清除算法和分代回收算法结合的垃圾回收机制。新生代对象采用增量标记清除算法回收,而老生代对象则采用分代回收算法回收。...1、全局变量下挂载的变量无法被回收 2、一个对象被闭包引用,或者被事件监听,它也无法被回收 3、垃圾回收器无法回收循环引用,需要手动解除引用关系释放内存

18110

驱动开发:内核CR3切换读写内存

首先CR3是什么,CR3是一个寄存器,该寄存器内保存有页目录表物理地址(PDBR地址),其实CR3内部存放的就是页目录表的内存基地址,运用CR3切换可实现对特定进程内存地址的强制读写操作,此类读写属于有痕读写...,多数驱动保护都会将这个地址改为无效,此时CR3读写就失效了,当然如果能找到CR3的正确地址,此方式也是靠谱的一种读写机制。...= __readcr0();cr0 &= 0xfffffffffffeffff;__writecr0(cr0);_disable();return irql;}// 开启写保护void Close(KIRQL...irql){UINT64 cr0 = __readcr0();cr0 |= 0x10000;_enable();__writecr0(cr0);KeLowerIrql(irql);}// 检查内存ULONG64...irql){UINT64 cr0 = __readcr0();cr0 |= 0x10000;_enable();__writecr0(cr0);KeLowerIrql(irql);}// 检查内存ULONG64

76230

JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生、随线程而灭,因此这几个区域的内存分配和回收都具备确定性,就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。...垃圾收集器在对堆区和方法区进行回收前,首先要确定这些区域的对象哪些可以被回收,哪些暂时还不能回收,这就要用到判断对象是否存活的算法!...对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收后还没有足够的内存,才会抛出内存溢出异常。...2.5 方法区如何判断是否需要回收   猿们,方法区存储内容是否需要回收的判断可就不一样咯。方法区主要回收的内容有:废弃常量和无用的类。...老年代的特点是每次垃圾收集时只有少量对象需要被回收,而新生代的特点是每次垃圾回收时都有大量的对象需要被回收,那么就可以根据不同代的特点采取最适合的收集算法。 ?

1.1K50

内存回收

本篇介绍一下内存回收。内存回收应该是整个Linux的内存管理上最难理解的部分了。 分析: 1,PFRA Page Frame Reclaim Algorithm,Linux的内存回收算法。...而PFRA则不然,它不是一个具体的算法,而是一个策略---什么样的情况下需要做内存回收,什么样的page适合做回收回收多少算OK,实在回收不了怎么办呢。。。...6,reverse mapping 上面的策略,是决定什么时候回收回收哪些page。 真正要回收的时候,要做什么呢?...9,kswapd 内核线程,负责内存回收。zone的watermark不满足的时候,就需要唤醒kswapd来回收内存。 10,lru list 内存回收lru选择那些内存需要回收。...只是说,如果内存不够了,linux会尝试回收,尽量满足。 回收的时候,如果实在回收不到了,linux会选择最差的策略---杀掉一部分进程。

3.3K100

jvm垃圾回收详解_java 垃圾回收

JVM 垃圾回收 1.概述 JVM 会自动帮程序员进行垃圾回收,并不需要程序员手动的进行垃圾回收(C++等语言需要自己手动回收垃圾),了解 JVM 的垃圾回收,可以帮程序员写出占用内存更小、更高效的程序...(1) 垃圾收集器在对堆区和方法区进行回收前,首先要确定这些区域的对象哪些可以被回收,哪些暂时还不能回收,这就要用到判断对象是否存活的算法。...Generation)的回收算法(回收主要以Mark-Compact为主) 在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。...现在 JVM 的垃圾回收算法的趋势。 4.分代垃圾回收器 4.0 配合使用 分代垃圾回收器,对于不同的分代可以使用不同的垃圾回收器进行配合使用。...,在老年代是标记清除算法 单线程 4.1.2 过程 所有线程并行 到达指定安全点 开始垃圾回收,除垃圾回收线程外全部停止 回收完毕,所有线程正常运行 4.2 吞吐量优先垃圾回收 4.2.1

1K32

JVM垃圾回收二:分代垃圾回收

试想,在不进行对象存活时间区分的情况下,每次垃圾回收都是对整个堆空间进行回收,花费时间相对会长,同时,因为每次回收都需要遍历所有存活对象,但实际上,对于生命周期长的对象而言,这种遍历是没有效果的,因为可能进行了很多次遍历...因此,分代垃圾回收采用分治的思想,进行代的划分,把不同生命周期的对象放在不同代上,不同代上采用最适合它的垃圾回收方式进行回收。 如何分代 ?...对年轻代进行并行垃圾回收,因此可以减少垃圾回收时间。一般在多线程多处理器机器上使用。使用-XX:+UseParallelGC.打开。...吞吐量:吞吐量为垃圾回收时间与非垃圾回收时间的比值,通过-XX:GCTimeRatio=来设定,公式为1/(1+N)。例如,-XX:GCTimeRatio=19时,表示5%的时间用于垃圾回收。...浮动垃圾:由于在应用运行的同时进行垃圾回收,所以有些垃圾可能在垃圾回收进行完成时产生,这样就造成了“Floating Garbage”,这些垃圾需要在下次垃圾回收周期时才能回收掉。

82530
领券