一时无两


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Netty源码分析——泄露检测

发表于 2018-11-07 | 分类于 Netty源码分析
Netty源码分析——泄露检测前言Netty泄露检测依赖于JDK原生的弱引用和引用队列,在早些的版本里,Netty使用的是幻影引用,这篇文章我会基于最新的Netty版本来做一个分析。这篇文章涉及的知识点除了Netty的泄露检测实现,还有一些JDK的知识点,主要是幻影引用和弱引用在被回收时的一些知识点。 幻影引用和弱引用的回收JAVA中存在四种引用,分别是: 强引用,最普遍的引用,类似Object obj = new Object()这类的引用。只要强引用还存在,垃圾回收器就不会回收掉被引用的对象。当内存空间不足,JVM宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意 ...
阅读全文 »

Netty源码分析——ByteBuf开篇

发表于 2018-11-01 | 分类于 Netty源码分析
Netty源码分析——ByteBuf开篇前言这是ByteBuf开篇,主要介绍ByteBuf的结构,继承关系等,为我们后面的学习打一下铺垫。 ByteBuf的作用主要是为了平衡CPU处理速度和网络传输速度。一般情况下,CPU处理速度都远大于网络传输速度,如果我们直接把数据写入网络,那么就会导致写入请求大量的被阻塞(都在争抢套接字)。为此我们引入缓冲区的概念,积累一定的数据再往网络中写。 基本概念ByteBuf维护了两个索引,分别是读索引和写索引。图示: +——————–+——————+—————-+| discardable bytes | readable bytes | writable b ...
阅读全文 »

Netty源码分析——伙伴分配算法

发表于 2018-10-30 | 分类于 Netty源码分析
Netty源码分析——伙伴分配算法前言今天跟大家一起来看一下伙伴分配算法。这个算法在Netty中用于在PoolChunk中分配内存。而这个算法的有点主要是可以使分配的内存尽可能的连续,不会产生内存碎片。今天来看下这个算法的实现。 基本概念我研究伙伴分配算法的时候,在网上也看了一些文章,普遍都存在一个问题就是把算法和内存直接挂钩,看上去都是多少多少字节,多少多少KB,很容易把人搞晕。分析算法主要还是让人能看懂,所以我们就分苹果好了,图中用A替代。 首先我们要明确一下伙伴分配算法的基本概念,或者说基本玩法: 伙伴分配算法只能管理2的指数个苹果的分配,比如2、4、8、16等等。 索要内存也必须是2 ...
阅读全文 »

Dubbo源码解析——优雅停机

发表于 2018-10-08 | 分类于 dubbo源码
Dubbo源码解析——优雅停机前言今天来看看Dubbo的优雅停机,Dubbo的主要环境还是在Spring容器中,我们主要看看在Spring环境下的优雅停机。代码主要分析Provider端和Consumer端。 Provider先看下Dubbo的DubboApplicationContextInitializer,这个类实现了spring的ApplicationContextInitializer接口: 123456public class DubboApplicationContextInitializer implements ApplicationContextInitializer &# ...
阅读全文 »

Dubbo源码解析——connections vs share connection

发表于 2018-09-04 | 分类于 dubbo源码
Dubbo源码解析——connections vs share connection前言先说明一下connections和share connections的区别,这里先看下connections的使用方式和官方文档: 1<dubbo:reference interface="com.foo.BarService" connections="10" /> 这种方式可以限制客户端服务使用连接不能超过10个。而默认不配置的情况,就是共享一个连接,但是共享连接存在一个问题,比如两个Invoker贡献了一个连接,只有Invoker1关闭的时候是不能直接关闭连接的,只有在两个Invoker都 ...
阅读全文 »

遇见Dubbo

发表于 2018-08-31 | 分类于 随笔
遇见Dubbo我是一个有Dubbo情节的程序员。 Dubbo以不同方式,陪伴了我时间不长的整个代码生涯。不久前,通过社区投票,我被选举为Committer。当时我在朋友圈发了一句话,也是贯穿我从开始使用Dubbo、研究Dubbo、贡献Dubbo到最后成为Committer的全过程,一直为我提供内心无与伦比愉悦的源泉:成长这种事,能看见脚印特别幸福。 今天来个回忆杀,把我和Dubbo的那些事拿出来说说。 相识就好像胎教一样,很多父母希望在孩子还没成型的时候,给他灌输一些东西,以此影响他出生之后的性格和爱好。我知道Dubbo,是在我大三翘课出去实习的时候,那个时候是懵懂的,我眼里最牛的人就是能熟练 ...
阅读全文 »

Netty源码分析——connect vs active

发表于 2018-08-28 | 分类于 Netty源码分析
Netty源码分析——connect vs active前言Netty中有几个概念,看了网上的很多文章,给出的解释实在是不太能让人信服,所以今天自己去扒了扒源码,加上debug,基本已经把connect事件和active事件给搞明白了。 不知道大家有没有类似的困惑,Netty中(这里指的是4.1.x版本),有channelActive和channelInactive,分别对应着管道生效和管道失效。然后还有connect和disconnect事件,分别对应着连接和失去连接事件。之前对着两个大类的事件不太明白,debug之。 源码分析首先,我们先看看这两大类事件分别是哪种类型的事件: connec ...
阅读全文 »

Dubbo源码解析——mock

发表于 2018-08-27 | 分类于 dubbo源码
Dubbo源码解析——mock使用Dubbo提供了mock和stub两种方式进行服务的优雅的动态降级,临时屏蔽一些非关键服务,并定义返回策略。官方文档上给出了我们使用方式: 123RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));r ...
阅读全文 »

Netty4.1.x的类冲突问题

发表于 2018-08-23 | 分类于 线上问题排查
Netty4.1.x的类冲突问题间接问题直接进主题。最近在搞一个大项目,来来回回涉及到几十个工程。其中有八个工程是新工程。部署的时候一直报错NoSuchMethodException:ByteToMessageDecoder.ensureNotSharable。看到这个异常基本上可以断定是类冲突问题,所以解决思路也应该先往排除相同依赖之类的方向上走。 目前我们这边的RPC使用的是Netty的4.1.7版本,而且确实也间接的使用到了ByteToMessageDecoder(业务解码器继承LengthFieldBasedFrameDecoder,LengthFieldBasedFrameDecod ...
阅读全文 »

MySQL为什么需要主键

发表于 2018-08-08 | 分类于 MySQL
MySQL为什么需要主键主键表中每一行都应该有可以唯一标识自己的一列(或一组列)。一个顾客可以使用顾客编号列,而订单可以使用订单ID,雇员可以使用雇员ID或雇员社会保险号。 主键一列(或一组列),其值能够唯一区分表中的每个行。唯一标识表中每行的这个列(或这组列)称为主键。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只设计相关的行。 表中的任何列都可以作为主键,只要它满足以下条件: 任何两行都不具有相同的主键值。 每个行都必须具有一个主键值(主键列不允许NULL值) 这里列出的条件是MySQL本身强制实施的。 除MySQL强制实施的规则外,应该坚持的几个普遍认为的最好习惯为: ...
阅读全文 »
123…9
时无两

时无两

88 日志
24 分类
84 标签
GitHub E-Mail
© 2020 时无两
主题 — NexT.Pisces v5.1.3