下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 19 | Netty如何玩转内存使用
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

Netty源码剖析与实战

共60讲 · 约670分钟
4391
免费
01 | 课程介绍
免费
02 | 内容综述
免费
03 | 揭开Netty面纱
免费
04 | 为什么舍近求远:不直接用...
免费
05 | 为什么孤注一掷:独选Nett...
06 | Netty的前尘往事
07 | Netty的现状与趋势
08 | Netty怎么切换三种I/O模...
09 | 源码剖析:Netty对I/O模...
10 | Netty如何支持三种Reacto...
11 | 源码剖析:Netty对Reacto...
12 | TCP粘包/半包Netty全搞...
13 | 源码剖析:Netty对处理粘...
14 | 常用的“二次”编解码方式
15 | 源码剖析:Netty对常用编...
16 | keepalive与idle监测
17 | 源码剖析:Netty对keepal...
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 | 优化使用:为不同平台开启...
48 | 安全增强:设置“高低水位...
49 | 安全增强:启用空闲监测
50 | 安全增强:简单有效的黑白...
51 | 安全增强:少不了的自定义...
52 | 安全增强:拿来即用的SSL...
53 | 安全增强:拿来即用的SSL...
54 | 安全增强:拿来即用的SSL...
55 | Cassandra如何使用Netty...
56 | Dubbo如何使用Netty ?
57 | Hadoop如何使用Netty ?
58 | 赏析Netty之美
59 | 如何给Netty贡献代码?
60 | 课程回顾与总结
本节摘要

精选留言(3)

  • 2019-11-28
    节省内存的一些技巧
    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年来就不会一直在持续优化改进了,所以可怕的不是已经做到最好,而是一直还在改进,哈哈

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

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

  • 2019-10-25
    DirectByteBuffer 是堆外内存。把 JVM 进程当作一个普通进程,堆外内存是原来“堆”的一部分吗?

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

    2