- 博客(47)
- 收藏
- 关注
原创 一台服务器可以支持多少TCP连接
在linux系统中一切皆文件,每当有一个tcp连接建立,那么就会打开一个文件描述符。在Linux系统中,文件描述符打开的个数是有限制的,当超过这个限制的时候内核就会跑出too many open files异常。linux上能打开的最大文件数量受三个参数限制,分别是:fs.file-max (系统级别参数):该参数描述了整个系统可以打开的最大文件数量。
2024-02-04 17:33:22
1851
2
原创 VisualVm安装及使用
通过 VisualVM,可以轻松监视远程主机上运行的应用程序,并查看有关远程系统的常规数据。要查看远程主机上应用程序的相关信息,要从远程应用程序中检索数据,需要在远程 JVM 上运行 jstatd 实用程序。单击“确定”后,将在“远程”节点下显示远程主机的节点。展开远程主机节点可查看远程主机上运行的 Java 应用程序。已连接的远程主机将列在“应用程序”窗口的“远程”节点下。展开远程主机节点可查看远程主机上运行的应用程序。无法对远程主机上运行的应用程序进行性能分析。可以用idea启动,也可以直接打开。
2024-02-01 15:57:32
1452
原创 RocketMQ报错defaultMQProducer send exception
RocketMQ报错defaultMQProducer send exception
2024-01-24 17:29:50
2149
原创 redis集群 —— 高性能
Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。本节将对集群的节点、槽指派、命令执行、重新分片、转向、故障转移、消息等各个方面进行介绍。数据分片,每一个分片存在一个节点上,每个节点有一主多从,保证高可用。
2024-01-24 15:26:01
936
原创 redis高可用之Sentinel模式
Sentinel(哨岗、哨兵)是Redis的**高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)**组成的Sentinel系统 (system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替 已下线的主服务器继续处理命令请求。redis的Sentinel模式既实现了协调者的高可用,也实现了redis服务的高可用。
2024-01-23 15:49:54
1590
原创 redis高可用之主从部署
在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选 项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制 的服务器为主服务器(master),而对主服务器进行复制的服务器则被 称为从服务器(slave),如图所示那么B服务器将成为A服务器的从服务器,A也会成为B 的主服务器。进行复制中的主从服务器将保存相同的数据,概念上讲这种现象称为“数据库状态一致”。
2024-01-23 15:01:12
1628
原创 redis数据结构(二)—— 对象
本文主要介绍了Redis中对象的类型和编码,以及各种不同类型的对象的特性和使用场景。包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象等。同时,也提到了一些常用的命令操作,如增加元素、获取交集并集、计算成员数量等。此外,还介绍了Redis中的对象共享、内存回收机制以及对象的空转时长等概念。对于不同的对象底层使用的对象,需要大家熟记于心,在使用的时候才能选对正确的类型。1.2编码和底层实现(重要)
2024-01-17 19:46:50
823
原创 第十二章 Java内存模型与线程(二)
Java 目前的并发编程机制就与上述架构趋势产生了一些矛盾, 1: 1 的内核线程模型是如今 Java 虚拟机线程实现的主流选择,但是这种映射到操作系统上的线程天然的缺陷是切换、调度成本高昂,系统能容纳的线程数量也很有限。 广义上来讲,一个线程只要不是内核线程,都可以认为是用户线程(User Thread, UT)的一种,因此从这个定义上看,轻量级进程也属于用户线程,但轻量级进程的实现始终是建立在内核之上的,许多操作都要进行系统调用,因此效率会受到限制,并不具备通常意义上的用户线程的优点。
2024-01-15 22:44:10
996
原创 布隆过滤器(Bloom Filter)详解
Bloom filter是一种高效的数据结构,它可以用来判断一个元素是否在一个集合中。相比于传统的数据结构,如HashSet和HashMap,Bloom filter具有更高的空间效率和查询速度。不过,Bloom Filter有可能会出现错误判断,但不会漏掉判断。也就是Bloom Filter判断元素不再集合,那肯定不在。如果判断元素存在集合中的话,会有一定的概率判断错误。
2024-01-11 14:24:59
1089
原创 第十章 前端编译与优化
前端编译器: JDK 的 Javac、 Eclipse JDT 中的增量式编译器( ECJ)即时编译器: HotSpot 虚拟机的 C1(客户端)、 C2(服务端) 编译器, Graal 编译器(仍然在实验)。提前编译器: JDK 的 Jaotc、 GNU Compiler for the Java(GCJ) [2]、 ExcelsiorJET 我们可以这样认为, Java 中即时编译器在运行期的优化过程,支撑了程序执行效率的不断提升;
2024-01-10 17:16:48
934
原创 第七章 虚拟机类加载机制
但是jdk中有类A就需要使用这个类,实际运行的时候肯定不是用的接口,而是实现类,在加载类A的时候是bootstrap加载的发现类B的实现类C还未加载,则去加载类C,这里默认先用类A的加载器去加载,类C并不是在bootstrap加载的范围内的,而且按照双亲委派机制,是要从bootstrap往上找加载器的,很显然找不到,所以只能从线程上下文类加载器去加载。这阶段的验证是基于二进制字节流进行的,只有通过了这个阶段的验证之后,这段字节流才被允许进入 Java 虚拟机内存的方法区中进行存储,但是对于初始化阶段,
2024-01-08 21:15:48
831
原创 第三章 垃圾收集器与内存分配策略(三)
ZGC 收集器是一款基于Region 内存布局的,(暂时)不设分代的,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的,以低延迟为首要目标的一款垃圾收集器。ZGC 的染色指针是最直接的、最纯粹的,它直接把标记信息记在引用对象的指针上,这时,与其说可达性分析是遍历对象图来标记对象,还不如说是遍历“引用图”来标记“引用”了。G1会随着堆变大,停顿的时间变长,原因也很容易理解,需要标记的对象越来越多了。对对象的种种标记不再是放在对象的本身属性上,而是放在了指向对象的引用身上。
2024-01-06 22:56:19
958
原创 第三章 垃圾收集器与内存分配策略(一)
在对象中添加一个引用计数器,每当有一个地方引用他,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。问题:无法解决循环引用。
2024-01-03 20:30:56
940
原创 高并发累加器Striped64
Striped64主要用于支持并发累加器的实现。这个类在高并发环境下被用来做某种计数,【其设计的核心思想是在竞争激烈的时候尽量分散竞争】。为了达到这一目标,Striped64维护了一个base Count和一个Cell数组。在多线程环境中,当一个线程想要更新计数时,它会首先试图更新base变量。如果成功,则该线程退出计数;否则,由于竞争激烈,该线程会转向Cell数组来分散计数。Striped64根据线程来计算哈希,然后将不同的线程分散到不同的Cell数组的index上。
2024-01-02 20:59:18
1091
原创 “不常用”的CopyOnWriteArrayList
其实现原理采用”CopyOnWrite”的思路(不可变元素),即所有写操作,包括:add,remove,set等都会触发底层数组的拷贝,从而在写操作过程中,不会影响读操作;避免了使用synchronized等进行读写操作的线程同步;写加锁同时还进行了copy,所以说 CopyOnWrite对于写操作来说代价很大,故不适合于写操作很多的场景;当遍历操作远远多于写操作的时候,适合使用CopyOnWriteArrayList;
2023-12-28 11:28:39
946
深入理解Java虚拟机精华知识点
2024-01-16
李运华老师的从0开始学架构
2023-12-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人