Netty 源码剖析与实战
傅健
Netty 源码贡献者、Cisco 高级软件工程师
32935 人已学习
新⼈⾸单¥59
课程目录
已完结/共 60 讲
第一章:初识Netty:背景、现状与趋势 (7讲)
第三章:Netty源码:从“线”(请求处理)的角度剖析 (8讲)
第六章:成长为Netty的贡献者 (6讲)
Netty 源码剖析与实战
登录|注册
留言
16
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 19 | Netty如何玩转内存使用
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 揭开Netty面纱
04 | 为什么舍近求远:不直接用JDK NIO?
05 | 为什么孤注一掷:独选Netty?
06 | Netty的前尘往事
07 | Netty的现状与趋势
08 | Netty怎么切换三种I/O模式?
09 | 源码剖析:Netty对I/O模式的支持
10 | Netty如何支持三种Reactor?
11 | 源码剖析:Netty对Reactor的支持
12 | TCP粘包/半包Netty全搞定
13 | 源码剖析:Netty对处理粘包/半包的支持
14 | 常用的“二次”编解码方式
15 | 源码剖析:Netty对常用编解码的支持
16 | keepalive与idle监测
17 | 源码剖析:Netty对keepalive与idle监测的支持
18 | Netty的那些“锁”事
19 | Netty如何玩转内存使用
20 | 源码解析:Netty对堆外内存和内存池的支持
21 | Netty代码编译与总览
22 | 源码剖析:启动服务
23 | 源码剖析:构建连接
24 | 源码剖析:接收数据
25 | 源码剖析:业务处理
26 | 源码剖析:发送数据
27 | 源码剖析:断开连接
28 | 源码剖析:关闭服务
29 | 编写网络应用程序的基本步骤
30 | 案例介绍和数据结构设计
31 | 实现服务器端编解码
32 | 实现一个服务器端
33 | 实现客户端编解码
34 | 完成一个客户端雏形
35 | 引入"响应分发"完善客户端
36 | Netty编码中易错点解析
37 | 调优参数:调整System参数夯实基础
38 | 调优参数:权衡Netty核心参数
39 | 调优参数:图解费脑的三个参数
40 | 跟踪诊断:如何让应用易诊断?
41 | 跟踪诊断:应用能可视,心里才有底
42 | 跟踪诊断:让应用内存不“泄露”?
43 | 优化使用:用好自带注解省点心
44 | 优化使用:“整改”线程模型让"响应"健步如飞
45 | 优化使用:增强写,延迟与吞吐量的抉择
46 | 优化使用:如何让应用丝般“平滑”?
47 | 优化使用:为不同平台开启native
48 | 安全增强:设置“高低水位线”等保护好自己
49 | 安全增强:启用空闲监测
50 | 安全增强:简单有效的黑白名单
51 | 安全增强:少不了的自定义授权
52 | 安全增强:拿来即用的SSL-对话呈现表象
53 | 安全增强:拿来即用的SSL-抓包暴露本质
54 | 安全增强:拿来即用的SSL-轻松融入案例
55 | Cassandra如何使用Netty ?
56 | Dubbo如何使用Netty ?
57 | Hadoop如何使用Netty ?
58 | 赏析Netty之美
59 | 如何给Netty贡献代码?
60 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(16)

  • 最新
  • 精选
冬渐暖
节省内存的一些技巧 1.能用基本类型尽量用基本类型,就不要去用包装类型了,包装类明显占用的空间更大,之前有说到,包装类除了值,还带了一些信息,比如hash之些的对象头,还有引用地址 2.一些类定义的属性变量,就直接在这个类里面定义,不要跑到引用的地方去一个一个的重新定义。 3.创建一些需要提前设置好大小的东西的时候,先去看下装进来的东西有多少(如果不知道就去猜),然后把这个值set进去。比如hashmap的丢弃原数组暴力扩容不如先设置好适合的大小。 不过如果改了jvm的这个负载因子0.75,这些地方还根据0.75判断,就凉凉咯 4.zero-copy 将数据组合到一起,而不是内存的复制 5.内存池:1.循环利用 2.省的用一次创建一次,开始的时候直接给你全部都创好(感觉这样的话会拖慢启动速度,而且也要维护这些东西。。。。) 3.支持并发:一下子可以拿好多个 堆外内存:直接受操作系统管理(而不是虚拟机),jvm只是拿一个引用 好处是1.增大了空间(原来你只有个jvm的,现在你又多了个) 2.减少辣鸡回收。辣鸡回收会让其它的工作暂停 3.堆内在flush到远程时,会先复制到直接内存(非堆内存),然后在发送;而堆外内存相当于省略掉了这个工作。 缺点是1.难管:因为操作系统管的,所以不容易控制, 2.创建慢 3.不容易排查(内存溢出的时候) 堆外内存和非堆内存是不一样的,非堆是比如栈一类的,还是在jvm内部。堆外在外面 这章可以看出,netty在某些方面并不是最优的,不同的场景或许有更好的选择,或许没有

作者回复: “netty在某些方面并不是最优的”,肯定的,不然这15年来就不会一直在持续优化改进了,所以可怕的不是已经做到最好,而是一直还在改进,哈哈

2019-11-28
9
高源
老师请教问题,我开发服务端程序,下面有多个客户端连接发送消息,socket tcp通信方式,现在发现如果多个客户端发送,并发消息多了,根据日志分析发现服务端接收的就晚了,导致客户端记录超时,这种情况怎么解决啊,是服务端处理能力不行吗,另外还有一种情况是客户端发消息了,但服务端没有收到导致超时。这两种情况我该怎么处理呢😊希望老师指点江山啊😊

作者回复: 因为不知道你的程序到底是什么样的,只能从描述上推测可能的情况,是不是你的业务线程是复用NioEventLoop的,也就是没有单独搞一个线程池去处理,这样的话,如果你的任务比较重(单个任务处理很耗时),那就会影响到你的IO处理(收发),自然也就慢了,你看下是不是这个情况。

2019-11-02
2
三颗豆子
课程很棒,但希望大佬可以练习一下英语,byte不是bit,queue不是"亏"之类的。多听几遍会让人记住这些发音的……看视频又想记住知识,又想忘记发音,就很难受。

作者回复: 哈哈,谢谢提醒

2021-03-06
1
13761642169
DirectByteBuffer 是堆外内存。把 JVM 进程当作一个普通进程,堆外内存是原来“堆”的一部分吗?

作者回复: 不是,jvm里面的堆相当于数据,栈算动作,所以加一起,堆栈,而堆外内存自然属于堆“外”。

2019-10-25
3
1
jhren
老师真是妙语连珠 “智商不够靠加机器解决”
2020-06-06
6
Geek_92e5c7
这是一门让我看的津津有味的课程,优秀
2020-11-05
3
李干嘛
不够好,缺乏细节,举个例子,那个msg有时channel有时bytebuf没详细说明。很多地方一笔带过。
2022-10-04
2
13761642169
我看着您的课程,然后仔细去撸了 netty 的源码,感觉水挺深。光内存分配这块,首先是对象池,然后是内存的管理,大量使用 thread local,还有虚引用。再感觉就是 pipeline,这块始终串不起来,通常见到的 pipeline,都是在一条流水线上执行同一个方法,像 filter 那样,但 netty 的 pipeline,write 一个对象出去,调到了 MessageToByte 的 encode 方法
2020-01-23
2
笑忘书
减少内存技巧: 1.基本类型变量优先于包装类变量 2.类变量优先于实例变量 3.预估内存要使用的大小来设置内存空间申请 4.zero-copy (1.逻辑组合代替内存复制 2.包装代替内存复制 3.netty调用了jdk支持的zero-copy) 5.堆外内存(off heap): JVM(heap + non heeap 非堆(栈、方法区等)) 优点:减轻GC压力 减少冗余细节 减少复制 缺点:创建速度慢 受操作系统管理,风险不可控 6.内存池: why:1.创建对象开销比较大 2.对象高频率创建且可复用 3.支持高并发且能保护系统 4.维护、共享有限的资源 how:Apache Commons Pool 全局共享内存池 资源争用比较厉害 Netty 轻量级对象池 io.netty.util.Recycler
2021-04-15
1
13761642169
我是从 rocketMQ 到的 netty,rmq 里面用到了FileRegion,具体这里面的优势在哪
2020-01-23
1
收起评论