自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

翻身咸鱼的博客

知行合一

原创 netty源码阅读之ByteBuf之directArena分配direct内存的流程

流程分为以下几个流程: 1、从对象池里面拿到PooledByteBuf进行复用 2、从缓存上面进行分配 3、从内存堆里面进行内存分配(如果在缓存上分配不成功,就在内存堆里面分配) 回到上一节开始的代码: @Override protected ByteBuf newDi...

2018-08-28 22:09:27

阅读数 428

评论数 0

原创 Failed to allocate memory within the configured max blocking time 60000 ms

Failed to allocate memory within the configured max blocking time 60000 ms kafka生产者写入消息的时候出现了这个问题。 网上的一般方法是设置 batch.size = 0,一般都是可以的。具体怎么设置,为什么会出现这...

2018-08-28 11:54:13

阅读数 3038

评论数 0

原创 netty源码阅读之ByteBuf之内存分配器PooledByteBufAllocator

那么照例我们从以下两点进行分析吧: 1、拿到线程局部缓存PoolThreadCache 2、在线程局部缓存的Arena上进行分配 我们从PooledByteBufAllocator的newHeapBuffer方法入手: @Override protected ByteBu...

2018-08-27 21:51:31

阅读数 984

评论数 0

原创 netty源码阅读之ByteBuf之内存分配器UnpooledByteBufAllocator

我们从两个角度分析UnpooledByteBufAllocator: 1、heap内存的分配 2、direct内存的分配 由于unpooled就是自己去操作底层api去分配内存,实现起来比较简单。   一、heap内存的分配 上一篇文章其实在最后一部分我们分析过了,heap的的内存分配...

2018-08-23 12:07:12

阅读数 1002

评论数 0

原创 netty源码阅读之ByteBuf之内存分配器ByteBufAllocator

我们分三部分讲解ByteBufAllocator: 1、ByteBufAllocator功能 2、AbstractByteBufAllocator 3、ByteBufAllocator两大子类   一、ByteBufAllocator功能 查看ByteBufAllocator源码: ...

2018-08-23 11:17:35

阅读数 1381

评论数 0

原创 netty源码阅读之ByteBuf之ByteBuf分类

ByteBuf分类,从下面三个维度: 1、Pooled和Unpooled 2、Unsafe和非Unsafe 3、Heap和Direct     一、Pooled和Unpooled 这两个的区别是使用的内存是从预先分配好的内存还是未分配的内存取,第一个从预先分配好的内存去取一段连续的内...

2018-08-23 10:17:15

阅读数 393

评论数 0

原创 netty源码阅读之ByteBuf之ByteBuf结构和重要API

主要分一下几点讲解: 1、ByteBuf结构 2、read、write、set方法 3、mark和reset方法     一、ByteBuf结构 我们找到ByteBuf源码,查看最前面的注释,有这样一段: * <pre> * +-----...

2018-08-22 00:05:10

阅读数 1271

评论数 0

原创 netty源码阅读之ByteBuf

今天我们开启新的篇章,netty很重要的内存概念将在这一章介绍。ByteBuf主要介绍以下几点: 1、内存与内存管理器的抽象 2、不同规格大小和不同类别的内存的分配策略 3、内存的回收过程 学完ByteBuf需要知道以下几个问题: 1、内存的类别有哪些? 2、如何减少多线程内存分配之间...

2018-08-21 21:34:31

阅读数 234

评论数 0

原创 netty源码阅读之pipeline之异常的传播

异常的传播,我们分为以下两部分: 1、异常的触发链 2、异常处理的最佳实践   一、异常的触发链 先一句话总结一下:从触发的节点开始传播(包含当前触发节点) 首先,照例我们有一个用户代码: public final class Server { public static...

2018-08-21 18:10:50

阅读数 1042

评论数 0

原创 java远程下载文件到本地和传送给前端

 java远程下载文件到本地 public class getFile { public static void downloadFile(String remoteFilePath, String localFilePath){ URL urlfile = null;...

2018-08-21 14:58:53

阅读数 2561

评论数 0

原创 netty源码阅读之pipeline之outBound事件传播

分析完inbound事件传播之后,outbound事件其实很简单,我们分以下几点解析: 1、何为outBound事件 2、outbound事件传播机制 3、ctx.channel().write()和ctx.write()的区别 一、何为outBound事件 包含bind、connect...

2018-08-21 10:33:34

阅读数 384

评论数 0

原创 netty源码阅读之pipeline之inBound事件传播

我们通过分析以下几点,分析inBound事件的传播。 1、何为inBound事件以及ChannelInBoundHandler 2、ChannelRead事件的传播 3、SimpleInBoundHandler处理器 首先我们看一个类图: 我们可以知道,ChannelInBoundH...

2018-08-20 12:00:41

阅读数 731

评论数 0

原创 netty源码阅读之pipeline之删除channelHandler

删除channelHandler主要分为以下几个步骤: 1、找到节点 2、链表里面删除找到的那个节点 3、回调删除handler事件。 我们从一个简单的用户代码开始分析: public class AuthHandler extends SimpleChannelInboundHand...

2018-08-15 20:41:34

阅读数 871

评论数 0

原创 netty源码阅读之pipeline之添加channelHandler

添加channelHandler分为以下几个步骤: 1、判断是否重复添加 2、创建节点并添加至链表 3、回调添加完成事件 添加handler由用户代码addLast进入,最终会来到DefaultChannelPipeline的这里: @Override public f...

2018-08-15 16:38:24

阅读数 503

评论数 4

原创 netty源码阅读之pipeline之pipeline初始化

pipeline初始化我们将介绍以下几点: 1、pipeline在创建Channel的时候被创建 2、pipeline的节点的数据结构:ChannelHandlerContext 3、pipeline中的两大哨兵:head和tail 1、pipeline在创建Channel的时候被创建 ...

2018-08-14 23:17:30

阅读数 602

评论数 0

原创 netty源码阅读之pipeline

pipeline我们将分以下几点分析源码: 1、pipeline的初始化  2、pipeline的handler的添加和删除  3、inbound事件、outbound事件和异常的传播 研读过pipeline源码,需要能够回答以下三个问题: 1、netty是如何判断ChannelHand...

2018-08-14 09:26:39

阅读数 346

评论数 0

原创 netty源码阅读之客户端新连接之读事件的注册

上一篇文章《netty源码阅读之客户端新连接之分配线程并注册selector》这里,我们最后分析到AbstractChannel的register0()的代码: private void register0(ChannelPromise promise) { ...

2018-08-13 15:41:27

阅读数 376

评论数 0

原创 netty源码阅读之客户端新连接之分配线程并注册selector

首先,我们看看服务端channel的pipeline里面的构成: Head---->ServerBootstrapAcceptor--->Tail。 也就是,新连接进来之后,会经过Head,这个Head就是我们之前这篇文章《netty源码阅读之服务器启动之端口绑定》...

2018-08-12 15:50:11

阅读数 586

评论数 0

原创 netty源码阅读之客户端新连接之SocketChannel的分类

SocketChannel分为两种: 1、NioSocketChannel 2、NioServerSocketChannel 让我们用一个简化的类图来看看他们的关系: 最终他们都继承自Channel,这个Channel是netty定义的,Channel定义了子类的规范。 Abstra...

2018-08-12 14:32:26

阅读数 416

评论数 0

原创 netty源码阅读之客户端新连接之创建NioSocketChannel

创建NioSocketChannel其实和创建服务端的NioServerSocketChannel类似,从上一篇文章的new NioSocketChannel(this, ch)这里进入,主要做了两件事: 1、调用父类构造函数AbstractNioByteChannel(p,ch,op_read...

2018-08-11 14:31:36

阅读数 555

评论数 0

原创 netty源码阅读之客户端新连接之检测新连接

boss线程的NioEventLoop在用户代码调用bond的时候启动。 检测新连接我们从《netty源码阅读之NioEventLoop之NioEventLoop执行-----processSelectedKey()执行》这一篇文章的这个方法入口:processSelectedKeysOptim...

2018-08-11 13:53:47

阅读数 623

评论数 0

原创 netty源码阅读之客户端新连接

在《netty源码阅读之NioEventLoop之NioEventLoop执行-----processSelectedKey()执行》这篇文章中,我们分析到了他优化的方式,并且说明它一直在此检测io事件。客户端的新连接就从这里开始分析。 新连接的文章,主要分为以下几个小点分析源码: 1、检测新...

2018-08-11 13:26:04

阅读数 352

评论数 0

原创 netty源码阅读之NioEventLoop之NioEventLoop执行-----runAllTask

从《netty源码阅读之NioEventLoop之NioEventLoop执行》知道,select之后,有两个步骤: processSelectedKey()和runAllTask() final int ioRatio = this.ioRatio; ...

2018-08-10 12:51:02

阅读数 646

评论数 2

原创 netty源码阅读之NioEventLoop之NioEventLoop执行-----processSelectedKey()执行

从《netty源码阅读之NioEventLoop之NioEventLoop执行》知道,select之后,就是processSelectedKey() 这里我们要学习两点: 1、selected keySet的优化 2、processSelectedKeysOptimized()执行逻辑  ...

2018-08-10 11:41:07

阅读数 722

评论数 3

原创 netty源码阅读之NioEventLoop之NioEventLoop执行----select()检查io事件

从《netty源码阅读之NioEventLoop之NioEventLoop执行》的select(wakenUp.getAndSet(false))这个函数开始分析,select的时候,先把wakenUp这个标志位设置为false,也就是现在没有用户唤醒了,并把之前是否被用户唤醒作为oldWaken...

2018-08-10 11:03:02

阅读数 598

评论数 0

原创 netty源码阅读之NioEventLoop之NioEventLoop执行

在《netty源码阅读之NioEventLoop之NioEventLoop启动》这里,有一个这个方法,就是最终执行的任务: SingleThreadEventExecutor.this.run(); 看看NioEventLoop的实现: @Override protecte...

2018-08-10 10:22:59

阅读数 370

评论数 0

原创 netty源码阅读之NioEventLoop之NioEventLoop启动

触发NioEventLoop启动有两个方式: 1、服务端启动绑定端口 2、新连接接入通过chooser绑定一个NioEventLoop 在这里,我们先讲解第一种方式,后续文章讲解第二种。   NioEventLoop第一种启动方式入口从用户代码bind()进入,initAndRegist...

2018-08-10 10:14:49

阅读数 372

评论数 0

原创 netty源码阅读之NioEventLoop之NioEventLoop创建

从new NioEventLoopGroup()进入分析NioEventLoop创建,NioEventLoopGroup创建NioEventLoop分为以下几个过程: 1、创建线程创建(执行)器:new ThreadPerTaskExecutor() 2、构造NioEventLoop:for{...

2018-08-09 16:48:36

阅读数 467

评论数 1

原创 netty源码阅读之NioEventLoop

初始阅读源码的时候,晦涩难懂,枯燥无味,一段时间之后就会觉得豁然开朗,被源码的魅力深深折服。 接下去要阅读的是netty的一个重要组件,NioEventLoop。 将会分为以下几点分析。 一、NioEventLoop源码 1、NioEventLoop创建(用户代码在创建bossGroup和...

2018-08-09 12:07:38

阅读数 338

评论数 0

原创 netty源码阅读之服务器启动之端口绑定

端口绑定,大部分是在AbstractChannel的内部类AbstractUnsafe的bind()这个方法里面完成的。主要完成了两件事情: 1、doBind()最终调用到javaChannel.bind()调用jdk底层绑定端口。 2、pipeline的channelActive传播事件,最...

2018-08-05 16:04:57

阅读数 690

评论数 0

原创 netty源码阅读之服务器启动之注册selector

初始化完成之后,就是把创建的channel注册到事件轮询器selector上面去。 注册到selector上主要做以下两件事情: 1、绑定eventLoop,这个eventLoop就是服务端的event,不是childEventLoop[绑定线程] 2、registor0做实际的注册   ...

2018-08-05 15:23:24

阅读数 858

评论数 0

原创 netty源码阅读之服务器启动之服务端channel的初始化

服务端channel的初始化大致分为以下几个步骤: 1、设置channelOptions,channelAttrs 2、设置childOptions,childAttrs 3、配置服务端pipeline:config handler 4、添加连接器,add serverBootstrapA...

2018-08-05 11:59:06

阅读数 458

评论数 0

原创 netty源码阅读之服务器启动之服务端channel的创建

首先是我们一段用户的代码  public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(1); Ev...

2018-08-05 09:54:15

阅读数 435

评论数 0

原创 netty源码阅读之服务端启动

netty服务端启动分为以下几个过程: 1、服务端channel的创建 2、服务端channel的初始化 3、注册selector 4、服务端端口的绑定 我将通过以下用户的代码,后面分几篇文章为大家讲解: public final class Server { public...

2018-08-05 09:14:35

阅读数 365

评论数 0

原创 netty设计模式-责任链模式

责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系, 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。 首先来看看责任链模式的四个要素: 1、责任处理器接口 2、创建链,添加删除责任处理器接口 3、上下文 4、责任链终止机制。...

2018-08-03 10:15:23

阅读数 1278

评论数 0

原创 netty设计模式-迭代器模式

迭代器模式使用很多,但是被我们经常忽略它居然也是一种模式。 1、有一个迭代器接口。 2、对容器里面各个对象进行访问。 netty里面的CompositeByteBuf这个零拷贝的实现,就使用了迭代器模式。首先看一段代码: public static void main(Strin...

2018-08-01 17:12:56

阅读数 434

评论数 0

转载 git请求报错 401

1.我们在服务器上直接git clone项目的版本库的时候报401错误! 错误如下:error: The requested URL returned error: 401 Unauthorized while accessing 原因:git 版本过低   2.git –version ...

2018-08-01 11:39:30

阅读数 1190

评论数 0

提示
确定要删除当前文章?
取消 删除