自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 问答 (1)
  • 收藏
  • 关注

原创 Elasticsearch查询总数返回10000条

我一般都会使用NativeSearchQueryBuilder查询es,但是这种查询返回的结果只有10000条,加上track_total_hits = true即可java代码如下:NativeQueryBuilder query = new NativeSearchQueryBuilder()query.setTrackTotalHits(true)

2022-03-30 20:56:40 2718

原创 将一个对象加入到Spring容器内

只需要在类里面使用AutowireCapableBeanFactory就可以@Autowiredprivate AutowireCapableBeanFactory autowireCapableBeanFactory;#使用的时候如下,obj代表你想把哪个对象放入Spring容器autowireCapableBeanFactory.autowireBean(obj);...

2021-07-03 20:46:11 454

原创 springboot连接不上docker内redis

现象描述:springboot连接redis的配置是从nacos下拉取的,里面配置了redis的密码,如下图所示当用springboot连接的时候会报错org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 10

2021-06-13 14:39:14 2900 2

原创 错误:springcloud gateway hoxton sr3 与springboot版本

开始的时候springboot依赖的父项目是2.2.3版本的,配置网关启动的时候报错spring-webflux 5.2.3发生错误,此时只需要将springboot父项目升级到2.2.5即可

2020-11-26 18:00:20 1659 8

原创 AQS框架与samephore、CountDownLatch

一、samephone来限制对资源访问的线程的上限;好比洗浴店里面的手牌,比如你进去一个洗浴店里,服务生首先会给你一个手牌;如果手牌没有了你则需要去喝茶等待;等他其他问洗完你才可以去享受服务;手牌相当于你一个许可;你去享受服务的时候先要获取手牌,服务完成之后需要归还手牌;基本语法//线程的上限 Semaphore semaphore = new Semaphore(3); //获取一个许可意思就是使用减法,用现在的结果减1semaphore.acquire(); //释放的意思就是使用加法,用

2020-09-22 10:07:41 249

原创 AQS框架与ReentrantLock、ReentrantReadWriteLock

一、AQS:abstractQueuedSynchronizer(抽象队列同步)1.AQS的作用:既然AQS是一个队列,底层一定是会有FIFO这样等待队列(wait queues)实现的,这个等待的队列的概念就synchronized关键字的底层wait set一样,synchronized是通过调用wait方法使线程进入到等待队列,通过notify/notifyall唤醒,唤醒后进入到Entry set,一个有2个底层的数据结构,而AQS是可以把wait set变成多个,阻塞队列只有一个,这是AQS的基

2020-09-15 15:26:59 188

原创 Synchronized关键字应用

一、Demo1package com.shadow.demo1;import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "enjoy")public class Demo2 { private int count = 10; public void test(){ //synchronized(this)锁定的是当前类的实例,这里锁定的是Demo2类的实例 synchronized (this){

2020-09-10 11:37:14 90

原创 Synchronized关键字原理分析二

一、预备知识CAS什么是CAS呢?compare and swap 比较和交换, CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。 如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不做任何操作。无论哪种情况,它都会在 CAS 指令之前返回该 位置的值;整个过程都是不可打断的,所以CAS是一个原子操作;主要是利用CPU的CAS指令,同时借助JNI来完成Java的非阻塞算法;二、 公平锁非公平锁非公平锁:加锁的时候直接去枪锁,不会管队列内

2020-09-07 16:46:35 138

原创 Synchronized关键字原理分析一

在说synchronized内置锁之前,首先先来研究一下对象头,因为所谓锁便是给对象一个标识,而这个标识便是存在对象头当中。对象:对象头 + 实例数据 + 填充数据对象头:markword + classpoint一、对象头接下来看下面的一张图意思是java的对象头在对象的不同状态下会有不同的表现形式,主要有三种状态,无锁状态、加锁状态、gc标记状态。那么我可以理解java当中的取锁其实可以理解是给对象上锁,也就是改变对象头的状态,如果上锁成功则进入同步代码块。但是java当中的锁有分为很多

2020-09-07 13:57:15 152

原创 玩转MAT分析内存泄漏

MAT 简介MAT 工具是基于 Eclipse 平台开发的,本身是一个 Java 程序,是一款很好的内存分析工具,所以如果你的堆快照比较大的话,则需要一台内存比较大的分析机器,并给 MAT 本身加大初始内存,这个可以修改安装目录中的 MemoryAnalyzer.ini 文件。柱状图在柱状图中,我们看到,其实它显示的东西跟 jmap –histo 非常相似的,也就是类、实例、空间大小。 但是 MAT 有一个专业的概念,这个可以显示对象的引入和对象的引出。 在 Eclipse MAT 中,当右键单

2020-09-05 16:45:36 1313

原创 亿级流量高并发下GC预估与调优

亿级流量系统,其实就是每天点击量在亿级的系统,根据淘宝的一个官方的数据分析。 每个用户一次浏览点击 20~40 次之间,推测出每日活跃用户(日活用户)在 500 万左右。同时结合淘宝的一个点击数据,可以发现,能够付费的也就是橙色的部分(cart)的用户,比例只有 10%左右。 90%的用户仅仅是浏览,那么我们可以通过图片缓存、Redis 缓存等技术,我们可以把 90%的用户解决掉。 10%的付费用户,大概算出来是每日成交 50 万单左右。一、GC预估如果是普通业务,一般处理时间比较平缓,大概在 3,4.

2020-09-04 16:53:58 1170

原创 JVM 性能调优之内存优化与 GC 优化

JVM 调优是一个系统而又复杂的过程,但我们知道,在大多数情况下,我们基本不用去调整 JVM 内存分配,因为一些初始化的参数已经可以保证应用 服务正常稳定地工作了。 在应用服务的特定场景下,JVM 内存分配不合理带来的性能表现并不会像内存溢出问题这么突出。一般你没有深入到各项性能指标中去,是很难发现其 中隐藏的性能损耗一、压测工具ABAb(ApacheBench) 测试工具是 Apache 提供的一款测试工具,具有简单易上手的特点,在测试 Web 服务时非常实用。 ab 一般都是在 Linux 上用。

2020-08-15 13:50:08 400

原创 玩转类加载和类加载器

一、类加载类的生命周期下图中这7个阶段必须记住,面试会问阶段顺序加载、验证、准备、初始化、卸载这5个阶段的顺序是固定的,解析阶段有时会在初始化之后执行加载类加载的时机在虚拟机规范中并没有明确的规定,但是加载需要做的事情如下:通过类的全限定路径名获取这个类的二进制字节流将二进制字节流中静态存储结果转化为方法区运行时数据结构在内存中生成代表这个类的.class对象,作为这个类的各种数据结构的访问入口验证验证是为了保护虚拟机自身的安全,大致会完成下面4种检验动作:文件格式验证元数

2020-08-02 12:42:48 173

原创 JVM面试“核武器” 垃圾回收器串讲及HotSpot的细节实现

一、三色标记并发标记时候使用三色标记算法在三色标记法之前有一个算法叫 Mark-And-Sweep(标记清除)。这个算法会设置一个标志位来记录对象是否被使用。最开始所有的标记位都是 0,如果 发现对象是可达的就会置为 1,一步步下去就会呈现一个类似树状的结果。等标记的步骤完成后,会将未被标记的对象统一清理,再次把所有的标记位 设置成 0 方便下次清理。 这个算法最大的问题是 GC 执行期间需要把整个程序完全暂停,不能异步进行 GC 操作。因为在不同阶段标记清扫法的标志位 0 和 1 有不同的含义, 那么

2020-07-28 15:17:57 199

原创 分代回收机制和垃圾回收算法

一、垃圾回收的基础知识分代回收理论在程序开发过程中,大多数的对象都会很快消亡,那些始终有引用的对象在垃圾回收的时越难回收,所以就出现了新生代和老年代。新生代用来存放很快消亡的对象,年老代用来存放多次垃圾回收都没有回收掉的对象。GC分类YoungGC:回收新生代OldGC:回收年老代FullGC:年轻代、年老代、方法区都回收 二、垃圾回收算法 因为算法的实现有很多细节设计,所以这里重点说3种算法思想,这里是重点,面试会问复制算法将新生代内存分为大小相等两块,其中一块做为预留,当这一块的内

2020-07-26 06:36:51 560

原创 玩转JVM中的对象及引用

一、JVM中对象的创建过程类加载将.class文件加载到JVM运行时数据区的过程(后面在讲)检查加载检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查类是否已经被加载、解析、初始化内存分配JVM给新生对象分配内存,分配内存的方式有2种:指针碰撞如果java的内存是规整的,所有用过的内存放在一边,没有用过的内存放在另一边,使用一个指针将其分开,那所分配内存就仅仅是将指针往没有用过的内存的方向挪动新生对象所需要内存大小相等的距离,这就是"指针碰撞"。空闲列表如果java的内

2020-07-23 15:01:22 338

原创 深入理解JVM的内存区域

通过Java代码来看内存处理的全流程先看一下下面的这段代码package ex2;/** * @author King老师 * VM参数 * -Xms30m -Xmx30m -XX:MaxMetaspaceSize=30m -XX:+UseConcMarkSweepGC -XX:-UseCompressedOops */public class JVMObject { public final static String MAN_TYPE = "man"; // 常量

2020-07-21 12:29:47 219

原创 JVM的内存区域

一、JVM内存区域运行时数据区定义:java虚拟机在执行java程序的时候会把它所管理的内存划分为若干个不同的数据区域。在JVM中,JVM的内存主要分为堆、方法区、虚拟机栈、本地方法栈、程序计数器等。同时,按照与线程的关系,也可以线程私有区(一个线程拥有单独一份内存区域)与线程共享区(被所有的线程的共享,只有一份).最后,还有一个直接内存(假如windows一共有8G内存,JVM虚拟化的时候使用了5G,还剩下的3G就可以称为直接内存)的概念,虽然它并不是运行时数据区,但是也会被使用。现在来说一说J

2020-07-19 00:00:42 791

原创 JVM基础知识

Java程序从编译到运行

2020-07-16 21:10:35 97

空空如也

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

TA关注的人

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