自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

男儿当自强

人生来平凡,因奋斗进取而不凡。

  • 博客(749)
  • 资源 (1)
  • 收藏
  • 关注

原创 RocketMQ集群搭建

RocketMQ集群,包括多主多从异步复制、多主多从同步双写等多种模式,下面搭建一个一主一从异步复制集群。准备两个虚拟机节点node1:部署主节点、部署nameServer、部署RocketMQ管控台node2:部署从节点、部署nameServer在node1 node2上传RocketMQ源码包,使用mvn -Prelease-all -DskipTests clean inst...

2021-11-16 17:31:55 2741

原创 SpringBoot整合RocketMQ

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0..

2021-11-15 17:56:54 469

原创 查询GC回收器及相关JVM设置

# windows环境 查看GC相关的JVM参数设置java -XX:+PrintFlagsFinal -version | findstr "GC" uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product} uintx AutoGCSelectPauseMillis = 5000 .

2021-11-12 09:18:24 202

原创 RocketMQ控制台rocketmq-console编译安装

下载rocketmq-console对项目解压后进入项目目录修改pom.xml中RocketMQ版本为对应版本<rocketmq.version>4.4.0</rocketmq.version>修改springboot的配置文件application.properties,指定nameServer地址为实际的部署地址。rocketmq.config.namesrvAddr=127.0.0.1:9876编译项目mvn clean package .

2021-11-11 17:25:39 795

原创 G1垃圾回收器在JDK8 JDK9中做出的几点优化

JDK8U20 字符串去重 字符串对象在底层是以char数组的形式进行存储,当创建一个字符串对象时,会将字符串对象添加到一个队列中,G1垃圾回收器在进行新生代的回收时会并发的对队列中的字符串进行去重,减少重复字符串对象对内存的占用,但是也略微增加了在对新生代回收时CPU时间的占用。jvm设置:-XX:+UseStringDeduplicationJDK8U40 并发标记类的卸载 在G1垃圾回收器并发标记执行后,如果一个类加载的所有类不在使用,那么它所加载...

2021-11-11 16:37:40 851

原创 RocketMQ源码编译安装

安装平台为需要Linux、Unix或Mac,Windows不兼容。下载安装包:rocketmq-all-4.4.0-source-release.zip要安装JDK和maven环境进行解压编译:unzip rocketmq-all-4.4.0-source-release.zipcd rocketmq-all-4.4.0/mvn -Prelease-all -DskipTests clean install -Ucd distribution/target/apache-rocket

2021-11-09 15:57:44 928

原创 垃圾回收器分类

垃圾回收器大致分为三类:串行回收器、吞吐量优先回收器和响应时间优先回收器。一 串行回收器串行回收器:采用单线程进行垃圾回收,适合堆内存较小的场景。有Serial回收器和SerialOld回收器,Serial回收器采用复制算法对新生代进行垃圾回收,SerialOld回收器采用标记整理算法对老年代进行回收。串行回收器,在执行GC过程中会造成用户线程阻塞,也就是STW问题。jvm参数配置://-XX:+UseSerialGC = Serial + SerialOl...

2021-11-08 16:19:51 1352

原创 新生代内存不足创建的对象直接进入老年代

package com.tech.gc.gc;import java.util.ArrayList;import java.util.List;/** * 阅读GC日志 * -Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc * 堆的初始和最大内存为20M,新生代分配10M老年代剩余10M,使用SerialGC垃圾回收器,打印GC日志 * * @author lw * @since 2021.

2021-11-07 13:38:09 601

原创 阅读GC日志

package com.tech.gc.gc;/** * 阅读GC日志 * -Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc * 堆的初始和最大内存为20M,新生代分配10M老年代剩余10M,使用SerialGC垃圾回收器,打印GC日志 * @author lw * @since 2021/11/7 */public class Demo_1 { private static fina.

2021-11-07 11:41:54 142

原创 JVM垃圾回收相关参数

含义 参数 堆初始大小 -Xms 堆最大大小 -Xmx 或 -XX:MaxHeapSize=size 新生代大小 -Xmn 或 (-XX:NewSize=size + -XX:MaxNewSize=size ) 幸存区比例(动态) -XX:InitialSurvivorRatio=ratio 和 -XX:+UseAdaptiveSizePolicy 幸存区比例 -XX:SurvivorRatio=ratio 晋升阈值 -XX:MaxTenur

2021-11-07 11:13:04 125

原创 RabbitMQ消费重试

配置:server: port: 8080spring: rabbitmq:# 单机连接配置host port即可# host: 192.168.50.134# port: 5672# 集群连接信息 addresses: 192.168.50.134:5673,192.168.50.134:5672,192.168.50.134:5674 virtual-host: /dev username: tech password: t

2021-11-05 16:05:20 1698

原创 镜像集群搭建及Springboot连接镜像集群

前面已经搭建了由3个节点组成的普通集群,接下来在普通集群的基础上搭建镜像集群,实现高可用以及消息备份。登录任意节点的管控台:Admin-->policies-->Add / update a policyName: 策略名称Pattern: 匹配任意队列或交换机ha-mode:all 在所有节点同步消息ha-sync-mode:automatic 自动同步消息在任意节点上创建1个队列,如果看到如下信息,说明镜像集群搭建完成以后如...

2021-11-05 10:12:37 236

原创 SpringBoot连接普通集群

使用Docker搭建好一个三个节点组成的Rabbitmq集群,接下来用SpringBoot项目连接集群。依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>配置:

2021-11-04 22:16:48 1360

原创 JVM中的五种引用

一 强引用我们平时使用的大多数对象引用,都是强引用,如下obj就是一个强引用,强引用的特点是:如果所有的GC ROOTS对象都没有与某个对象有强引用路径,那么这个对象就可以被垃圾回收了。Object obj=new Object();二 软引用 通过SoftReference引用对象时,这个引用就是软引用。软引用的特点是:如果一个对象仅存在软引用,当进行GC后,如果内存依旧不够使用,则在下次进行GC时,回收软引用引用的对象。软引用自身也是一个对象(Sof...

2021-11-04 17:46:30 819

原创 RabbitMQ普通集群搭建

搭建第一个节点:docker run -d --hostname rabbit_host1 --name rabbitmq1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=tech -e RABBITMQ_DEFAULT_PASS=tech -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie_tech' --privileged=true -v /usr

2021-11-03 16:24:13 4602 2

原创 使用Mat内存分析工具分析GC Roots对象

首先编写一段测试代码package com.tech.gc.root;import java.io.IOException;import java.util.ArrayList;import java.util.List;/** * @author lw * @since 2021/11/3 */public class Demo_1 { public static void main(String[] args) throws IOException {

2021-11-03 11:17:11 839 1

原创 RabbitMQ死信队列 延迟队列 利用延迟队列实现关单功能

死信队列用于存放死信,投递的消息在一定的条件下会变为死信,如消息被消费者拒收,并没有设置重回队列;队列中的消息满了,在发送消息;队列的消息达到TTL时间未被消费,可以给单条消息设置过期时间,也可以给一个队列中的消息设置过期时间,在投递的消息变为死信后,死信会被投递到队列绑定的死信交换机,死信交换机根据路由key将消息路由到死信队列。新建死信交换机新建死信队列绑定死信交换机和死信队列新建普通队列,指定队列中消息的过期时间,指定死信交换机,指定发送消息到死信交...

2021-11-02 16:53:36 386

原创 RabbitMQ死信队列

死信队列用于存放死信,投递的消息在一定的条件下会变为死信:消息被消费者拒收,并没有设置重回队列; 队列中的消息满了,在发送消息; 队列的消息达到TTL时间未被消费,可以给单条消息设置过期时间,也可以给一个队列中的消息设置过期时间; 在投递的消息变为死信后,死信会被投递到队列绑定的死信交换机,死信交换机根据路由key将消息路由到死信队列。创建死信交换机,和普通交换机没区别创建死信队列,和普通队列没区别死信交换机绑定死信队列...

2021-11-02 14:10:17 98

原创 RabbitMQ消息的可靠性投递

消息的投递路径:生产者->交换机->队列->消费者消息的可靠性投递包括:发送的可靠性和消费的可靠性。消息发送的可靠性,可以通过发送确认机制和交换机转发消息到队列的确认机制(confirmCallback和returnCallback)来实现,消费的可靠性可以通过手动确认机制来实现。 开启确认机制后,由于频繁的确认交互,会降低RabbitMQ吞吐量,不是特别重要的消息不建议开启。一 发送确认机制...

2021-11-01 16:47:08 343

原创 直接内存及内存分配与释放

直接内存使用的是操作系统内存,不受JVM管理,读写速度快,内存的分配与释放代价高,常用作NIO的数据缓冲区,如 ByteBuffer。使用传统IO与NIO(使用直接内存)拷贝文件性能对比package com.tech.direct;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.ByteBuffer;im...

2021-11-01 11:26:52 524

原创 RabbitMQ整合SpringBoot

maven依赖:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd.

2021-10-30 10:17:01 120

原创 Topic 交换机

发送消息时,需要指定路由key,消息到达交换机后,根据路由key匹配队列,队列在绑定交换机时指定了路由key,支持通配符,*代表1个词,#代表1个或多个词,交换机根据路由key把消息转发到匹配的队列中。package com.tech.rabbitmq.nospring.topic;import com.rabbitmq.client.BuiltinExchangeType;import com.rabbitmq.client.Channel;import com.rab...

2021-10-29 17:41:29 347

原创 Direct类型交换机

生产者发送消息,指定消息路由key,到达direct类型交换机,direct类型交换机与队列绑定,并指定了路由key,direct交换机根据消息的路由key与绑定的路由key匹配,找到对应的队列,交换机将消息转发到队列中。package com.tech.rabbitmq.nospring.direct;import com.rabbitmq.client.BuiltinExchangeType;import com.rabbitmq.client.Channel;impo...

2021-10-29 16:54:55 435

原创 使用StringTable节省堆内存

如果应用中有大量的字面量字符串,使用intern方法将这些字符串放入串池中比直接放入堆中要节省内存。package com.tech.constantpool;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;/** * 字符串入池与不...

2021-10-29 15:37:16 140

原创 StringTable优化

StirngTable进行入池字符串时,先查找StringTable中是否有该字符串,没有才会入池,StringTable是一个hash表,适当增加StringTable中桶的数量,会减少hash碰撞的几率,提升查找效率。package com.tech.constantpool;import java.io.*;/** * 串池中桶的数量对性能的影响 * 设置栈内存500m 堆内存500m 打印串池统计信息 串池中桶的数量 * -Xms500m -Xmx500m -XX:+PrintS

2021-10-29 14:55:32 141

原创 StringTable串池垃圾回收

先看一段代码:package com.tech.constantpool;/** * 演示StringTable垃圾回收 * jvm参数:设置堆空间大小为10M;打印串池统计信息;打印GC信息 * -Xmx10m -XX:+PrintStringTableStatistics -XX:+PrintGCDetails -verbose:gc * * @author lw * @since 2021/10/29 */public class Demo_6 { public st

2021-10-29 14:03:46 268

原创 在JDK1.8中串池的位置是在堆中

package com.tech.constantpool;import java.util.ArrayList;import java.util.List;/** * @author lw * @since 2021/10/29 */public class Demo_5 { public static void main(String[] args) { List<String> list=new ArrayList<>(); .

2021-10-29 10:44:14 376

原创 字符串相等判断

字面量是保存在常量池的串池中,字面量相加会被编译器优化,直接将结果保存在串池中(如果之前已经存在,直接使用不会入池)。如果是变量相加,则会使用stringbuilder进行append,然后调用stringbuilder的toString方法,将结果保存在堆中 在jdk1.8中,intern方法会将堆中字符串进行入池,并返回池中的字符串,如果池中在入池前存在该字符串则原字符串引用不变,如果串池中之前不存在该字符串,则原字符串引用指向池中字符串。package com....

2021-10-29 10:17:45 312

原创 发布/订阅模式

发送消息到交换机,交换机并不存储消息,只是转发消息,当交换机的类型是fanout类型时,消息会被转发到所有与交换机绑定的队列中。package com.tech.rabbitmq.nospring.pub;import com.rabbitmq.client.BuiltinExchangeType;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbit...

2021-10-26 14:25:48 96

原创 字符串拼接

package com.tech.constantpool;/** * @author lw * @since 2021/10/26 */public class Demo_3 { public static void main(String[] args) { String s1="a"; String s2="b"; String s3="ab"; String s4=s1+s2; System.out.

2021-10-26 10:46:01 75

原创 串池与常量池的关系

在运行时常量池中,有一块逻辑区域是StringTable(串池),用于存放字面量,串池实际上是一个hash表,不能扩容。当jvm指令在执行时,当执行到字面量信息时,会去串池中查找是否有该字面量,如果没有该字面量将其放入到串池中。package com.tech.constantpool;/** * @author lw * @since 2021/10/26 */public class Demo_2 { public static void m...

2021-10-26 10:32:31 660

原创 类的二进制字节码文件

有一段简单的java代码,经过编译器编译后得到类的二进制字节码文件,使用javap反向解析器分析该class文件。package com.tech.constantpool;/** * @author lw * @since 2021/10/26 */public class Demo_1 { public static void main(String[] args) { System.out.println("hello wo...

2021-10-26 09:48:07 289

原创 工作队列模型

Work queuesDistributing tasks among workers (thecompeting consumers pattern)当生产者生产能力过高时,需要引入多个消费者来消费消息,默认这些消费者采用轮询的方式消费消息,不管消费者的消费速度如何,消费者消费的消息数量贴近于一致。生产者发送多条消息package com.tech.rabbitmq.nospring.work;import com.rabbitmq.client.Channel;im..

2021-10-25 16:47:23 194

原创 简单队列模型

"Hello World!"The simplest thing that doessomething消息发送者:package com.tech.rabbitmq.normal;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import java.nio.charset.Standar..

2021-10-25 16:02:20 230

原创 基于Docker安装RabbitMQ和管控平台

docker run -d --hostname rabbit_host1 --name test_rabbit -e RABBITMQ_DEFAULT_USER=tech -e RABBITMQ_DEFAULT_PASS=tech -p 15672:15672 -p 5672:5672 rabbitmq:management说明:-d docker后台运行容器--hostname 节点名称--name 容器名称-e 添加容器内部的相关参数(RABBITMQ_DEFAULT_US..

2021-10-25 14:20:40 165

原创 方法区及内存溢出

方法区用于存放类信息、类加载器、常量池等,方法区在jvm启动时创建,方法区是一套规范,不同的jvm厂商对于方法区实现有所不同。比如Oracle的hotspot虚拟机,在jdk1.8之前使用永久代实现方法区,永久代使用的是堆空间;在jdk1.8及之后使用元空间来实现方法区,元空间使用的是直接内存。方法区也存在内存溢出异常,如方法区加载过多类的二进制字节码会出现内存溢出错误。使用jdk1.8版本 演示内存溢出错误package com.tech.metaspace;impor...

2021-10-25 10:30:39 737

原创 jvisualvm进行资源监视

package com.tech.heap;import java.util.ArrayList;import java.util.List;/** * @author lw * @since 2021/10/22 */public class HeapDemo_3 { public static void main(String[] args) throws InterruptedException { List<Student> list=new .

2021-10-22 17:55:22 136

原创 JVM堆内存诊断 jmap

使用jps查看进程ID; jmap -heap 进程ID;jmap可以详细的打印堆内存使用信息package com.tech.heap;/** * @author lw * @since 2021/10/22 */public class HeapDemo_2 { public static void main(String[] args) throws InterruptedException { System.out.println...

2021-10-22 14:19:02 406

原创 堆内存溢出

通过new关键字创建的对象存储在堆中,垃圾收集器会关注堆空间,堆可能会出现堆内存溢出异常。模拟堆内存溢出package com.tech.stack;import java.util.ArrayList;import java.util.List;/** * @author lw * @since 2021/10/22 */public class StackDemo_4 { public static void main(String[] args) {

2021-10-22 10:24:38 176

原创 栈内存溢出

虚拟机栈是每个线程运行所需要的内存空间,虚拟机栈是由栈帧组成,栈帧是每个方法运行所需要的内存空间,用于存放参数、局部变量和返回地址等信息,当一个栈中所有栈帧所需要的内存空间超过栈的空间时,会出现栈溢出异常。模拟栈溢出package com.tech.stack;/** * @author lw * @since 2021/10/21 */public class StackDemo { private static int count = 0; pu...

2021-10-21 10:04:30 226

rocketmq-console.zip

RocketMQ控制台,下载后对资源解压,修改Pom中RocketMQ版本修改配置文件中RocketMQ nameServer地址,用Maven编译,运行target目录下的jar即可

2021-11-09

空空如也

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

TA关注的人

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