自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小新是也的博客

一只上进的程序猿

  • 博客(21)
  • 收藏
  • 关注

原创 浅谈 JVM GC 的安全点与安全区域

HotSpot 使用 OopMap 把引用类型的指针记录下来,让 GC Roots 的枚举变得快速准确。为了减少更新 OopMap 的开销,引入了 安全点。GC STW 时,线程需要跑到距离自己最近的安全点,更新完 OopMap 才能挂起。处于Sleep 或者 Blocked 状态的线程无法跑到安全点,需要引入安全区域。GC 的时候,不会去管处于安全区域的线程,线程离开安全区域的时候,如果处于 STW 则需要等待直至恢复。

2021-09-12 18:13:13 710

原创 哦?原来这就是 JVM 垃圾!

什么是垃圾:没有任何引用指向的一个或多个对象。如何识别垃圾,有两种算法:1. 引用计数法:通过给对象添加被引用的次数来识别。优点是回收简单及时;缺点是无法解决循环引用。2. 可达性分析法:从一系列根对象(GC Roots)开始,根据引用关系向下搜索,如果某个对象到 GC Roots 间没有任何引用,则此对象就是垃圾。优点是解决了循环引用;缺点是耗时和 STW。

2021-09-11 17:43:45 133

原创 从零开始实现简单 RPC 框架 9:网络通信之心跳与重连机制

心跳是用于服务端和客户端保持有效连接的一种手段,客户端每隔一小段时间发一个心跳包,以告知服务端其在线。重连机制是连接断开之后,要使用的时候自动重连的机制。心跳和重连机制,结合起来让服务端和客户端的连接使用更加合理,该断开的断开节省服务端资源,该重连的重连提高可用性。

2021-09-07 08:57:02 684

原创 从零开始实现简单 RPC 框架 8:网络通信之 Request-Response 模型

Netty 在服务端与客户端的网络通信中,使用的是异步双向通信(双工)的方式,即客户端和服务端可以相互主动发请求给对方,发消息后不会同步等响应。这样就会有一下问题:1. 如何识别消息是请求还是响应?2. 请求如何正确对应到响应?

2021-09-06 09:08:49 512

原创 从零开始实现简单 RPC 框架 7:网络通信之自定义协议(粘包拆包、编解码)

TCP 是一个“流”协议,所谓流,就是没有界限的一长串二进制数据。TCP 作为传输层协议,并不了解上层业务数据的具体含义,它会根据 TCP 缓冲区的实际情况进行数据包的划分,所以在业务上认为是一个完整包的,可能会被 TCP 拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的 TCP 拆包和粘包问题。那么如何解决粘包拆包问题呢?

2021-09-05 15:11:30 597

原创 从零开始实现简单 RPC 框架 6:网络通信之 Netty

ccx-rpc 选择的网络框架是 Netty,Netty 是一款大名鼎鼎的异步事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。

2021-09-03 22:31:06 207

原创 从零开始实现简单 RPC 框架 5:网络通信之序列化

从现在开始,我们要开始讲网络通信相关的内容了。既然是网络通信,那必然会涉及到序列化的相关技术。序列化器的定义,很简单,只有序列化,反序列化两个方法。常见的序列化算法有:Java 序列化、FastJson、Jackson、Kryo、Hessian、Protobuf 等。这些算法各有优缺点,大家在使用时,可以结合自己的业务情况进行选择。

2021-08-27 10:09:45 164

原创 从零开始实现简单 RPC 框架 4:注册中心

RPC 中 Consumer 需要请求 Provider 的接口,必须要知道 Provider 的地址才能请求到。那么,Consumer 要从哪里获取 Provider 的地址呢?答案是:注册中心

2021-08-24 21:58:51 532

原创 从零开始实现简单 RPC 框架 3:配置总线 URL

URL 可以理解为配置总线,所有扩展点参数都包含 URL 参数,URL 作为上下文信息贯穿整个扩展点设计体系。

2021-08-22 10:08:30 628

原创 从零开始实现简单 RPC 框架 2:扩展利器 SPI

RPC 框架有很多可扩展的地方,最好的做法就是留下扩展点,让使用者可以不需要修改框架,就能自己去实现扩展。JDK 原生已经为我们提供了 SPI 机制,ccx-rpc 在此基础上,进行了性能优化和功能增强。

2021-08-15 16:23:41 313

原创 从零开始实现简单 RPC 框架 1:RPC 框架的结构和设计

RPC 框架是后端攻城狮永远都绕不开的知识点,本系列 "造轮子系列之RPC",手把手教大家如何打造自己的RPC框架。

2021-08-08 21:29:04 610

原创 Redis 源码解析 10:五大数据类型之有序集合

有序集合有两种编码方式:压缩列表 ziplist 和跳表 skiplist。

2021-01-15 23:45:56 115

原创 Redis 源码解析 9:五大数据类型之集合

集合对象的编码有两种:intset 和 hashtable。

2021-01-05 17:01:14 82

原创 Redis 源码解析 8:五大数据类型之哈希

哈希对象的编码有两种:ziplist、hashtable。

2021-01-03 23:02:21 138 1

原创 Redis 源码解析 7:五大数据类型之列表

列表对象有 3 种编码:ziplist、linkedlist、quicklist。ziplist 和 linkedlist 是 3.2 版本之前的编码。quicklist 是 3.2 版本新增的编码,ziplist 和 linkedlist 在 3.2 版本及后续版本将不再是列表对象的编码。

2020-12-31 13:00:32 91

原创 Redis 源码解析 6:五大数据类型之字符串

字符串的编码有raw、embstr、int三种。raw 用于长字符串。embstr 用于短字符串。int 用于整数类型。

2020-12-29 00:13:42 169

原创 Redis 源码解析 5:压缩列表 ziplist

压缩列表是 ZSEt、Hash 和 List 类型的其中一种编码的底层实现,是由一系列特殊编码的连续内存块组成的顺序型数据结构,其目的是节省内存。ziplist 的结构外层结构下图展示了压缩列表的组成:各个字段的含义如下:zlbytes:是一个无符号 4 字节整数,保存着 ziplist 使用的内存数量。通过 zlbytes,程序可以直接对 ziplist 的内存大小进行调整,无须为了计算 ziplist 的内存大小而遍历整个列表。zltail:压缩列表 最后一个 entry 距离起始地址

2020-12-27 22:58:15 159

原创 Redis 源码解析 4:字典 dict

Redis 中,字典是基础结构。Redis 数据库数据、过期时间、哈希类型都是把字典作为底层结构。

2020-12-25 22:22:58 160 2

原创 Redis 源码解析 3:字符串 SDS

在 Redis 中,字符串都用自定义的结构简单动态字符串(Simple Dynamic Strings,SDS)。Redis 中使用到的字符串都是用 SDS,例如 key、string 类型的值、sorted set 的 member、hash 的 field 等等等等。。。

2020-12-25 17:10:52 106

原创 Redis 源码解析 2:Redis 对象 redisObject

在 Redis 中,有五大数据类型,都统一封装成了一个数据类型:redisObject

2020-12-25 11:14:39 129

原创 Redis 源码解析 1:数据库 redisDb

Redis 服务器将绝大部分的信息都保存在 `server.h/redisServer`。redis 的数据是保存在 `redisServer` 中的 `redisDb` 结构中。

2020-12-25 11:13:15 225

空空如也

空空如也

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

TA关注的人

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