- 博客(17)
- 收藏
- 关注
原创 Netty权威指南:Netty总结-高性能与可靠性
Java的优雅停机通常通过注册JDK的ShutdownHook来实现,当系统接收到退出指令后,首先标记系统处于退出状态,不再接收新的消息,然后将积压的消息处理完,最后调用资源回收接口将资源销毁,最后各线程退出执行。大多数场景下,业务用户会使用RPC框架,他们通常不需要直接针对Netty编程,如果Netty提供了发送失败消息的回推功能,RPC框架就可以进行封装,提供不同的策略给业务用户使用,例如:、在消息解码时,对消息长度进行判断,如果超过最大容量上限,就抛出解码异常,拒绝分配内存。
2024-09-12 08:19:41
1069
原创 Netty权威指南:Netty总结-客户端创建
BootStrap是socket客户端创建工具类,通过Bootstrap可以方便地创建Netty客户端发起异步TCP连接操作。
2024-09-10 22:13:53
1582
原创 Netty权威指南:Netty总结-私有协议栈开发
本质是厂商内部发展和采用的标准,除非授权不然其他厂商无权使用。具有封闭性、垄断性、排他性等特点。包含两部分,消息头和消息体NettyMessage数据结构可参考之前定义,以及添加get,set方法。
2024-09-09 23:06:26
1231
原创 Netty权威指南:Netty总结-编解码与序列化
TCP是流协议,也就是没有界限的的一串数据,底层并不知道上层业务数据的具体含义,也就是说一个完整的包可能会被拆分成多个包进行发送,也可能把几个小包封装成一个大的数据包发送。这就是拆包和粘包。
2024-09-09 23:01:22
1615
原创 Netty权威指南:Netty总结-Java I/O
Linux的内核将所有的外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统提供的系统命令,返回一个file descriptor(fd,文件描述符)。核心是异步通道(Asynchronous Channel),异步通道不会阻塞线程,I/O操作会立即返回,当当I/O操作完成时,系统会自动调用与之关联的CompletionHandler,或通过Future对象通知操作的完成。NIO不能称为异步非阻塞I/O,只能称为非阻塞I/O,是基于I/O复用技术的非阻塞I/O。
2024-09-08 11:58:21
1373
原创 Java并发编程:并发工具(下)
循环栅栏,用来进行线程协作,等待线程满足某个计数。非线程安全,已经有一个线程做完了扩容操作时,其他线程还在扩容操作,e和next引用没变但内容变了,也就是节点没变,节点后面链着的东西变了,继续扩容时就会死链。采用了写入时拷贝的思想,增删改操作会将底层数组拷贝一份,更改操作在新数组上执行,不影响其他线程并发读,读写分离。问题:多线程计数,get、比较、put,这三个操作彼此是原子的,但是合在一起不是原子的。jdk7中,后加入的元素会放到链表的头部,在数组元素超过数组长度的四分之三时,进行扩容。
2024-09-07 13:33:45
1065
原创 Java并发编程:JMM与无锁并发
可见性由jvm缓存优化引起,有序性由jvm指令重排序引起主要学习CAS与volatile,以及一些API,需要知道高性能原子累加器LongAdder的源码,以及伪共享的原理。
2024-09-07 13:19:24
877
原创 Java并发编程:基础-管程
临界区代码就是访问共享资源时又有读又有写的代码片段有两种关键字对资源进行保护:synchronized、lock(ReentrantLock)明白互斥和同步的区别:互斥:临界区代码不被上下文切换而交错,保证代码的原子性同步:某个线程条件不满足时等待,条件满足后继续运行管程即Monitor。
2024-09-07 13:14:09
1326
原创 Java并发编程:基础-进程与线程
操作系统中有一个组件叫做任务调度器,将 cpu 的时间片(windows 下时间片最小约为 15 毫秒)分给不同的程序使用,只是由于 cpu 在线程间(时间片很短)的切换非常快,人类感 觉是 同时运行的。默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守 护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。因为以下一些原因导致 cpu 不再执行当前的线程,转而执行另一个线程的代码。有时限的join,如果线程提前结束,join也会结束。
2024-09-07 13:07:47
1073
原创 深入理解Java虚拟机:Jvm总结-虚拟机字节码执行引擎
不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。输入的是字节码二进制流,处理过程是字节码解析执行的等效过程,输出的是执行结果。
2024-09-06 23:10:03
1432
1
原创 深入理解Java虚拟机:Jvm总结-垃圾收集器与内存分配策略
但是会存在跨代引用的情况,即新生代中对象有可能被老年代所引用,实际情况中,存在互相引用的对象是偏向于同时存活或同时消亡的(被老年代引用的对象在收集时会存活下来然后晋升到老年代),根据第三个假说,为了避免检查跨代引用时扫描整个老年代,可以建立一个记忆集,把老年代划分成若干小块并标识出哪块存在跨代引用,在发生新生代收集时,只有包含跨代引用的块会被加入到GC Roots扫描。冒险:把Survivor无法容纳的对象直接送入老年代,前提是老年代有空间容纳这些对象,但不确定被容纳的对象其中有多少能在回收中存活下来。
2024-09-06 12:21:54
1654
原创 深入理解Java虚拟机:Jvm总结-Java内存区域与内存溢出异常
对于C、C++程序开发来说,程序员需要维护每一个对象从开始到终结。Java的虚拟自动内存管理机制,让java程序员不需要手写delete或者free代码,不容易出现内存泄漏和内存溢出问题,但是如果出现了内存泄漏和溢出的问题,就需要知道虚拟机是怎样使用内存的,才能排查错误并且修正。本章主要讲明Java虚拟机内存的各个区域,各个区域的作用、服务对象,以及常见的异常。
2024-09-06 11:50:52
1554
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人