自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 Netty从入门到精通九——Netty的可靠性

Java的优雅停机通常通过注册JDK的ShutdownHook来实现,系统接收到退出指令后,首先会标记退出状态,不在接收新消息->将积压的消息处理完->调用资源回收接口将资源销毁。①客户端连接超时:同步阻塞I/O模型中,连接操作时同步阻塞的,不设置超时时间,客户端线程会被长时间阻塞。1.TCP层面的心跳监测,TCP的Keep-Alive机制,作用域是整个TCP协议栈。全局流量整形的作用范围是进程级的,作用域针对所有的Channel。,通常是全局引用,需要显示的释放,否则JVM不会回收。

2023-10-24 00:59:35 237

原创 Netty从入门到精通八——Netty架构

一旦链路建立成功后便是长连接,要保证长连接的链路有效性,就需要通过心跳机制周期性的进行链路检测(系统空闲时链路出现问题无法识别出,待到业务高峰期会造成大量业务失败)。负责事件在职责链中有序传播,可以把ChannelPipeline看成是一个ChandlerHandler的链表,当需要对Channel进行某种处理的时候,这一层分为两类,纯粹的业务逻辑编排和其他的应用层协议插件(用于特定协议相关的会话和链路管理)。,触发超时Handler,用户可以基于写空闲超时发送心跳消息进行。

2023-10-24 00:58:00 109

原创 Netty从入门到精通七——Netty客户端创建

(4)SO_REUSEADDR:用于决定如果网络上仍然有数据向旧的 ServerSocket 传输数据,是否允许新的 ServerSocket 绑定到与旧的 ServerSocket 同样的口上。(5)CONNECT_TIMEOUT_MILLIS:客户端连接超时时间,由于 NIO 原生的客户端并不提供设置连接超时的接口,因此,Netty 采用的是自定义连接超时定时器负责检测和超时控制;,表示通道中已经有了可读的数据,可以执行读操作了(通道目前有数据,可以进行读操作了)

2023-10-23 23:46:24 619 1

原创 Netty从入门到精通六——Netty服务端创建

① 负责处理客户端连接接入的是一个NioEventLoop,当Selector检测到新的Channnel准备就绪后,默认执行processSelectedKeyOptimized方法,6.绑定并启动监听端口,这一步和第二步一起进行,绑定端口前系统会进行初始化,然后再启动端口,并将ServerSocketChannel注册到Selector上监听客户端连接。该处监听的是连接操作,所以执行unsafe.read()方法,read()方法中的doReadMessages方法实际就是。③执行完注册操作后,紧接着。

2023-10-23 23:28:09 219 1

原创 Netty从入门到精通五——私有协议栈开发

在链路中断INTERVAL时间后,由客户端发起重连操作,若失败则在INTERVAL时间后再次发起重连,因为需要保证服务端在这段时间内充分释放句柄资源,等待下次重连。Ping-Pong是双向机制,可以保证双方无论谁出现故障都可被及时检测,当消息读写发生IO异常后,就代表链路中断,需要关闭链路释放资源,重连或等待重连。,链路建立成功后客户端会主动发送握手消息,服务端收到握手消息后若通过IP校验,会返回应答消息给客户端。:链路空闲时,客户端主动发Ping消息给服务端,服务端接收到消息后回复Pong消息给客户端;

2023-10-23 23:18:31 348 1

原创 Netty从入门到精通四——编解码技术(序列化/反序列化)

Thrift通过IDL描述接口和数据结构定义,支持读多种类型和可选必选定义,也支持协议前向兼容。●无须实现java.io.Serializable接口,即可实现Java序列化。经测试Java序列化的性能只有二进制编码的6.17%左右,性能很差。,Java序列化后的字节数组其他语言无法进行反序列化。,在同等情况下,编码后的字节数组越大,存储的时候就越。使用,支持数据(对象)序列化和多种类型的RPC服务。,生产代码和编译,这点是与其他IDL相比的。是Java序列化最致命的问题,因为。

2023-10-09 21:45:30 200 1

原创 Netty从入门到精通三——TCP粘包/拆包

是一个网络通信框架,支持 TCP 和 UDP 两种套接字协议,在这里我主要介绍Netty对TCP的支持,首先来介绍一下TCP中的粘包拆包。④服务端两次读取到两个数据包,分别是整个D2和D1的一部分,D1的剩余部分,也发生了TCP拆包。③服务端两次读取到两个数据包,分别是D2的一部分,整个D1和剩余的D2部分,发生TCP拆包。③将特殊的分隔符作为消息结束的标志,回车换行符就是一种特殊的结束分隔符。, 进行MSS(最大报文长度)大小的TCP分段,当。③进行MSS大小的TCP分段,也要进行拆包。

2023-10-09 21:41:46 93 1

原创 Netty从入门到精通二——NIO入门

这个和 BIO是不同的,BIO 中要么是输入流,要么是输出流,不能是双向的。伪异步I/O的读和写操作都是同步阻塞的,仅仅只是对BIO线程模型的一个煎蛋优化,无法解决同步I/O导致的通信线程阻塞问题。,像Web服务器那样。的,Event 就是一个重要的概念。Java AIO是NIO2.0,是真正的异步非阻塞I/O,新增了异步的套接字通道,只有。Buffer是一个对象,在面向流的I/O中,数据都是被直接读写到Stream中,而在。,可以反映底层操作系统的情况,比如 Linux,底层的操作系统通道就是双向的。

2023-10-09 21:37:10 96 1

原创 Netty从入门到精通——I/O基础入门

②I/O效率不会随着FD数目的增加儿线性下降:统select/poll在只有少部分socket活跃的情况下也会线性扫描全部socket集合,会导致效率线性下降。①支持一个进程打开的socket描述符(FD)不受限制(仅受限于操作系统的最大文件句柄数):elect最大的缺陷就是单个进程能打开的FD手受限的,最常见的I/O模型,缺省情形下所有的文件操作(进程)都是阻塞的。I/O多路复用的优势就是节省了系统开销,不需要再创建新的进程或线程,节省了系统资源。,这样一来epoll的I/O效率大大提升。

2023-10-09 21:29:30 137 2

原创 JVM虚拟机夯实系列-虚拟机类加载器

一个典型的例子便是JNDI服务,JNDI现在已经是Java的标准服务, 它的代码由启动类加载器来完成加载(在JDK 1.3时加入到rt.jar的),肯定属于Java中很基础的类型 了。是由这个模型自身的缺陷导致的,双亲委派很好地解决了各个类 加载器协作时基础类型的一致性问题(越基础的类由越上层的加载器进行加载),基础类型之所以被 称为“基础”,是因为它们总是作为被用户代码继承、调用的API存在,但程序设计往往没有绝对不变的完美规则,如果有基础类型又要调用回用户的代码,那该怎么办呢?

2023-09-17 15:32:00 67 1

原创 JVM虚拟机夯实系列-虚拟机类加载的过程

保证方法体中的类型转换总是有效的,例如可以把一个子类对象赋值给父类数据类型,这是安全 的,但是把父类对象赋值给子类数据类型,甚至把对象赋值给与它毫无继承关系、完全不相干的一个 数据类型,则是危险和不合法的。·类中的字段、方法是否与父类产生矛盾(例如覆盖了父类的final字段,或者出现不符合规则的方法重载,例如方法参数都一致,但返回值类型却不同等)。同样的,实现类初始化时也。·指向常量的各种索引值中是否有指向不存在的常量或不符合类型的常量。·这个类的父类是否继承了不允许被继承的类(被final修饰的类)。

2023-09-17 15:30:13 57 1

原创 JVM虚拟机夯实系列-虚拟机类加载机制

如果一个java.lang.invoke.MethodHandle实例最后的解析结果为REF_getStatic、REF_putStatic、REF_invokeStatic、REF_newInvokeSpecial四种类型的方法句 柄,并且这个。而用到这写指令的情况通常为:使用new关键字实例化对象时、读取或者设置一个类型的静态字段(被final修饰、已在编译器把结果放入常量池的静态字段除外)以及调用一个类型的静态方法的时候。的特点实现的,这就需要类加载时稍微。完成的,而其动态扩展的特性是。

2023-09-17 15:27:57 53 1

原创 JVM虚拟机夯实系列-垃圾收集器选择和内存分配与回收

三者构成了一个不可能三角,也就是说,通常一款优秀的收集器最多可以同时达成其中的两项。而一般垃圾收集器的选择会从一下三点出发:①应用程序的,需要则需要关,希望则则更。②运行应用的等等。③使用。

2023-09-17 15:24:30 60 1

原创 JVM虚拟机夯实系列-垃圾收集器

面向服务端应用的垃圾收集器,目的是替代CMS收集器,JDK9后,G1已经取代Parallel Scavenge加Parallel Old组合,称为服务端模式下的默认垃圾收集器。尽管在其进行垃圾收集时,会将所有正常的用户线程暂停,出现停顿(STW),但Serial收集器仍是HotSpot虚拟机客户端(Client)模式下的默认新生代收集器,因为CMS收集器的并发性,所以要在老年代预留出足够的空间进行用户线程的执行,JDK5设置老年代被使用68%的阈值就激活CMS收集器,JDK6设置92%的阈值。

2023-09-17 15:20:32 66 1

原创 JVM虚拟机夯实系列-垃圾收集算法

HotSpot虚拟机⾥⾯关注吞吐量的Parallel Scavenge收集器是基于标记-整理算法的,⽽关注延迟的CMS收集器则是基于标记-清除算法的,这也从侧⾯印证这点。CMS收集器在面临空间碎片过多时会采用“和稀泥”的方法,在空间碎片处于可容忍范围内时,采用标记清除算法,当空间碎片达到一定数量时采用标记整理算法。(如将⾃⼰或者某个属性赋值)时维护记录数据的正确性,会增加⼀些运⾏时的开销,但⽐起收集时扫描整个⽼年代来说仍然是划算的。因为新生代的存活率比较低,所以虚拟机都采用这种算法进行新生代回收。

2023-09-17 15:11:56 80 1

原创 JVM虚拟机夯实系列-垃圾回收机制

Java内存运行时,所以这几个区域的内存分配和回收都有确定性,候内存就了。而Java堆和方法区则不一样,一个接口的多个实现类需要的内存不一样,一个方法的多个分支需要的内存也不一样,只有在 程序运行期间才会知道创建哪些对象,

2023-09-15 13:35:19 65

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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