自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张哈希的博客

MyCat 1.6核心源代码贡献者之一。为全栈而努力,喜欢各种轮子,最近因业务需要研究NLP相关的东西...

原创 深度探索JFR - JFR详细介绍与生产问题定位落地 - 3. 各种Event详细说明与JVM调优策略(2)
原力计划

2. JAVA 应用相关 2.4. Java Monitor 同步锁相关 主要是三种 Event: 当进入同步块,尝试获取锁的时候,产生 JavaMonitorEnter Event;当调用 Object.wait() 进入等待时,会产生 JavaMonitorWait Event;当 锁升级(另...

2020-04-07 19:48:05 101 0

原创 深度探索JFR - JFR详细介绍与生产问题定位落地 - 3. 各种Event详细说明与JVM调优策略(1)
原力计划

Event 采集详细配置 目前,JDK 11 一共有136个 Event 采集配置。这里会比较详细的去看每一个Event,并说明基本应用,建议配置。如果 default.jfc 中没有打开或者需要修改的配置,会将配置文件代码发出来。 1. JFR 相关 Event 一共4个 Event,但是需要关...

2020-04-03 18:11:55 70 0

原创 深度探索JFR - JFR详细介绍与生产问题定位落地 - 2. 通过一个线上调优例子了解JMC 与 Event 结构与详细配置
原力计划

查看 JFR 事件的工具 - JMC (Java Mission Control) 官网地址:https://adoptopenjdk.net/jmc.html 国内下载起来比较慢,建议在aws上面建一个欧洲法兰克福的实例,在这个实例上先下载好,然后传输到本地。或者直接用我下面提供的连接下载,我也...

2020-04-01 16:52:53 133 0

原创 深度探索JFR - JFR详细介绍与生产问题定位落地 - 1. JFR说明与启动配置
原力计划

本文基于 OpenJDK 11 并涉及一些之后版本的特性,非 OpenJDK 11 的特性会被特殊标记出来 什么是 JFR? 我们都知道,黑匣子是用于记录飞机飞行和性能参数的仪器。在飞机出问题后,用于定位问题原因。JFR 就是 Java 的黑匣子。 JFR 是 Java Flight Recor...

2020-04-01 11:04:22 193 0

原创 OpenJDK 11 JVM日志相关参数解析与使用

OpenJDK 11是在OpenJDK 8之后的第一个长期支持版本,这一版本在JVM日志配置有了很大改动,主要是规范化,统一化了。在OpenJDK 8中,日志配置有很多状态位,让人摸不着头脑,并且比较难以维护与进一步迭代。在OpenJDK 11终于将JVM日志相关的配置规范起来,统一配置。这篇文章...

2020-02-28 16:01:08 139 0

原创 Java中对于位运算的优化以及运用与思考

引言 随着JDK的发展以及JIT的不断优化,我们很多时候都可以写读起来易读但是看上去性能不高的代码了,编译器会帮我们优化代码。之前大学里面学单片机的时候,由于内存以及处理器性能都极其有限(可能很多时候考虑内存的限制优先于处理器),所以很多时候,利用位运算来节约空间或者提高性能,那么这些优秀的思想,...

2020-01-08 19:02:10 154 4

原创 JEP解读与尝鲜系列1 - Java Valhalla与Java Inline class

涉及到的JEP: Project Valhalla JEP 169: Value Objects JEP 218: Generics over Primitive Types 这些特性将在JDK14实现 Valhalla项目背景 最主要的一点就是,让Java适应现代硬件:在Java语言发布之...

2019-10-22 19:54:09 244 3

原创 从JDK8升级到JDK11,看这篇就足够了

原文地址:https://blog.codefx.org/java/java-11-migration-guide/。 在原文的基础上,增加了一些我遇到的具体的坑还有在特定场景下的解决方案,供大家参考 一些背景 在背景知识,我们会讨论一些关于新的JDK Release周期,OpenJDK特性归一...

2019-10-17 15:47:27 1289 0

原创 OpenJDK11与Spring Cloud Finchley的不兼容问题与解决

本文的环境:OpenJDK 11.0.4,Spring Cloud finchley SR4,Spring Boot 2.0.3 最近遇到了一个问题,在feign调用的时候,时常会出现这样一个奇怪的错误: 2019-10-07 08:00:00.620 ERROR [xxx,e1ba4c7540...

2019-10-07 17:37:58 420 0

原创 OpenJDK8升级到OpenJDK11需要注意的修改与异常

目前,JDK两个长期版本是8和11,由于大部分项目使用的还是8,所以从8升级到11会遇到一些困难。 本篇文章会基于实践遇到的问题,分类总结可能 1. Java模块化 从Java 9开始,由于引入了JPMS(https://openjdk.java.net/projects/jigsaw/spec/...

2019-09-11 12:26:23 1545 0

原创 JDK核心JAVA源码解析(7)- 集合相关(1) - LinkedList

想写这个系列很久了,对自己也是个总结与提高。原来在学JAVA时,那些JAVA入门书籍会告诉你一些规律还有法则,但是用的时候我们一般很难想起来,因为我们用的少并且不知道为什么。知其所以然方能印象深刻并学以致用。 本篇文章针对JAVA中集合类LinkedList进行分析,通过代码解释Java中的Fai...

2019-09-04 18:33:56 96 0

原创 Spring cloud实现FeignClient指定Zone调用

本文基于Spring Cloud Fincheley SR3 背景介绍 目前项目多个区域多个集群,这些集群共用同一个Eureka集群。通过设置eureka.instance.metadata-map.zone设置不同实例所属的zone,zone之间不互相调用,只有zone内部调用(其实这里用zo...

2019-06-13 15:52:05 930 4

原创 Spring Cloud Finchley OpenFeign的重试配置相关的坑

如题,本文基于Spring Cloud Finchley.SR2 OpenFeign的重试 OpenFeign配置重试后,逻辑分析 对比Daltson和Finchley的基本组件,发现Ribbon还有Hystrix的重试逻辑基本没变,feign编程openfeign之后,增加了个重试逻辑,我们用...

2019-04-24 12:30:53 1165 0

原创 Ribbon的AvailabilityFilteringRule的坑(Spring Cloud Finchley.SR2)

如题,本文基于Spring Cloud Finchley.SR2 我们项目配置了AvailabilityFilteringRule作为所有Ribbon调用的负载均衡规则,它有那些坑呢(理解歧义和注意点)? 首先来看源码,核心是choose方法: public Server choose(...

2019-04-24 12:04:12 4097 0

原创 分布式缓存存储算法与实践思考

最近遇到一个问题,可能很多人也遇到过:由于业务量的增长,缓存节点个数不够用了。现在的Redis-Cluster直接就加个节点就解决了,但是之前Redis-Cluster不稳定时,我们并不敢用这个,而是通过自己实现分布式缓存Redis实现,在遇到这个问题时,碰到不少麻烦。 由于我们分片算法很简单,直...

2019-04-12 11:40:18 1262 0

原创 大数据级新闻去重实现 - 1.在线实时方案

最近针对爬虫爬下来的新闻进行去重。这个去重要考虑很多方面: 不同网站发布的要点新闻,基本上是有通稿的,内容大同小异,基本一致,有些细节不同,需要去掉重复的,保留质量最好的。 去重对比的时间跨度是多大呢?可能刚开始我们会考虑搜索整个库,每篇文章都对比,但是这样会效率太差了,没有必要。新闻有发...

2019-02-25 16:58:59 2207 0

原创 BookKeeper全解(1)-BookKeeper简介和快速上手

什么是BookKeeper BookKeeper是一个提供日志条目流存储持久化的服务框架。特别适合日志流存储,一个比较经典的应用是作为消息队列Pulsar的持久框架。 那么BookKeeper是怎样产生的呢? 这个灵感来源于Hadoop生态系统。我们知道,Haddop生态系统的文件存储是HDFS,...

2018-10-16 16:06:44 9958 2

原创 Redis系列-生产应用篇-分布式锁(5)-单进程Redis分布式锁的Java实现(Redisson使用与底层实现)-原子锁类

Redisson单进程Redis分布式悲观锁的使用与实现 本文基于Redisson 3.7.5 4. 原子锁类 Redisson中实现了两种原子锁类:RAtomicLong和RAtomicDouble,还有RLongAdder和RDoubleAdder RAtomicDouble和...

2018-09-19 10:43:58 4099 0

原创 JDK核心JAVA源码解析(6) - 原子类AtomicLong与LongAdder对比

想写这个系列很久了,对自己也是个总结与提高。原来在学JAVA时,那些JAVA入门书籍会告诉你一些规律还有法则,但是用的时候我们一般很难想起来,因为我们用的少并且不知道为什么。知其所以然方能印象深刻并学以致用。 本篇文章针对JAVA中的原子类以及JDK1.8新增的LongAdder进行对比,探究它...

2018-09-18 14:10:42 4029 0

原创 Redis系列-生产应用篇-分布式锁(4)-单进程Redis分布式锁的Java实现(Redisson使用与底层实现)-读写锁

Redisson单进程Redis分布式悲观锁的使用与实现 本文基于Redisson 3.7.5 3. 读写锁 Redisson的分布式可重入读写锁RReadWriteLock Java对象实现了java.util.concurrent.locks.ReadWriteLock接口。...

2018-09-13 19:43:38 4524 0

原创 Redis系列-生产应用篇-分布式锁(3)-单进程Redis分布式锁的Java实现(Redisson使用与底层实现)-公平锁

Redisson单进程Redis分布式悲观锁的使用与实现 本文基于Redisson 3.7.5 2. 公平锁 这种锁的使用方式和Java本身框架中的FairLock一模一样: RLock fairLock = redisson.getFairLo...

2018-09-11 20:34:09 4502 0

原创 Redis系列-生产应用篇-分布式锁(2)-单进程Redis分布式锁的Java实现(Redisson使用与底层实现)-可重入锁

Redisson单进程Redis分布式悲观锁的使用与实现 本文基于Redisson 3.7.5 1. 可重入锁(Reentrant Lock) 这种锁的使用方式和Java本身框架中的Reentrant Lock一模一样 RLock lock = redisson.getLo...

2018-09-05 16:22:35 5218 0

原创 Redis系列-生产应用篇-分布式锁(1)-单进程Redis分布式锁实现思路

什么是分布式锁 针对共享内存模型的程序(例如JAVA程序),锁就是一个非常常用的机制。 一般简单分为悲观锁和乐观锁。悲观锁就是你获取这块数据的锁之后,别人就无法访问或操作这块数据,直到你释放这个锁。乐观锁一般就是CAS更新。 在单进程内内存的锁,只控制进程内数据的,就是非分布式锁。相反的,跨...

2018-09-03 17:12:25 4160 0

原创 JDK核心JAVA源码解析(5) - JAVA File MMAP原理解析

想写这个系列很久了,对自己也是个总结与提高。原来在学JAVA时,那些JAVA入门书籍会告诉你一些规律还有法则,但是用的时候我们一般很难想起来,因为我们用的少并且不知道为什么。知其所以然方能印象深刻并学以致用。 本篇文章针对JAVA中的MMAP的文件映射读写机制,来分析为何很多告诉框架用了这个机制...

2018-07-20 12:14:14 5032 2

原创 JDK核心JAVA源码解析(4) - 堆外内存、零拷贝、DirectByteBuffer以及针对于NIO中的FileChannel的思考

想写这个系列很久了,对自己也是个总结与提高。原来在学JAVA时,那些JAVA入门书籍会告诉你一些规律还有法则,但是用的时候我们一般很难想起来,因为我们用的少并且不知道为什么。知其所以然方能印象深刻并学以致用。 本篇文章针对堆外内存与DirectBuffer进行深入分析,了解Java对于堆外内存处...

2018-07-17 17:05:18 10104 10

原创 JDK核心JAVA源码解析(3) - 引用相关

想写这个系列很久了,对自己也是个总结与提高。原来在学JAVA时,那些JAVA入门书籍会告诉你一些规律还有法则,但是用的时候我们一般很难想起来,因为我们用的少并且不知道为什么。知其所以然方能印象深刻并学以致用。 本篇文章针对引用分析,是后面分析各种框架机制的基础 Java引用相关 强引...

2018-07-10 20:44:45 4117 0

原创 JDK核心JAVA源码解析(2) - String(上)

想写这个系列很久了,对自己也是个总结与提高。原来在学JAVA时,那些JAVA入门书籍会告诉你一些规律还有法则,但是用的时候我们一般很难想起来,因为我们用的少并且不知道为什么。知其所以然方能印象深刻并学以致用。 本文从JDK 1.8 & JDK 9.0 String的组成区别...

2018-06-25 16:12:46 5936 0

原创 Spring Cloud Ribbon 全解 (8) - SpringCloud环境下Ribbon+Eureka配置

本文基于SpringCloud-Dalston.SR5 一般SpringCloud环境下是Ribbon+Eureka一起使用的: SpringCloud环境下Ribbon+Eureka配置 示例项目 实例项目地址:https://github.com/HashZhang/Scanf...

2018-05-16 11:05:24 6262 0

原创 Spring Cloud Ribbon 全解 (7) - SpringCloud环境下纯Ribbon(不包含Eureka)重试配置

本文基于SpringCloud-Dalston.SR5 前面已经分析了Ribbon各个组件详细的源码,以及整体的流程 SpringCloud环境下纯Ribbon(不包含Eureka)使用与启动分析: 示例项目 以下项目可以参考:https://github.com/HashZhan...

2018-05-16 11:03:08 7041 3

原创 Spring Cloud Ribbon 全解 (6) - SpringCloud环境下纯Ribbon(不包含Eureka)使用与启动分析

本文基于SpringCloud-Dalston.SR5 前面已经分析了Ribbon各个组件详细的源码,以及整体的流程 SpringCloud环境下纯Ribbon(不包含Eureka)使用与启动分析: 示例项目 以下项目可以参考:https://github.com/HashZhan...

2018-05-16 11:01:48 6058 1

原创 Spring Cloud Ribbon 全解 (5) - 基本组件实现源码(3)

本文基于SpringCloud-Dalston.SR5 我们继续分析如下组件: 所有Ribbon负载均衡器需要实现的接口IClient 服务实例列表维护机制实现的接口ServerList 负载均衡数据记录LoadBalancerStats 负责选取Server的接口ILoadBalancer...

2018-05-08 08:36:34 6806 0

原创 Spring Cloud Ribbon 全解 (4) - 基本组件实现源码(2)

本文基于SpringCloud-Dalston.SR5 我们继续逐个分析 所有Ribbon负载均衡器需要实现的接口IClient 服务实例列表维护机制实现的接口ServerList 负载均衡数据记录LoadBalancerStats 负责选取Server的接口ILoadBalancer 负载...

2018-05-08 08:34:32 6057 0

原创 Spring Cloud Ribbon 全解 (3) - 基本组件实现源码(1)

本文基于SpringCloud-Dalston.SR5 上一篇我们了解到Ribbon主要由如下几个组件组成: 所有Ribbon负载均衡器需要实现的接口IClient 服务实例列表维护机制实现的接口ServerList 负载均衡数据记录LoadBalancerStats 负责选取Server的...

2018-03-27 19:14:43 6594 4

原创 Spring Cloud Ribbon 全解 (2) - 基本组件简介

本文基于SpringCloud-Dalston.SR5 对于一个负载均衡器,就是以用户请求为输入,请求响应为输出的代理模块。 这个模块基本上就是包括一个服务实例列表,根据请求还有负载均衡规则选择一个合适的实例来执行请求并返回响应。 这个服务实例列表,一般包含每个实例基本信息,然后还有...

2018-03-27 11:53:12 4440 0

原创 Spring Cloud Eureka 全解 (8) - 安全配置

本文基于SpringCloud-Dalston.SR5 一般的,Eureka在内网服务,我们不会对于外网暴露Eureka端口,所以一般Eureka不做任何验证。假设我们想进一步增强Eureka的安全性,可以结合spring security来简单配置一些安全设置 首先在Spring Cloud...

2018-03-26 18:14:21 4466 0

原创 Spring Cloud Ribbon 全解 (1) - 总览篇

本文基于SpringCloud-Dalston.SR5 Ribbon是一个客户端负载均衡解决方案,简单来说,就是从Eureka获取可用服务实例列表,然后将请求根据某种策略发到这些实例上面执行 What is Spring Cloud Netflix? 其官方文档中对自己的定义是: ...

2018-03-05 18:11:25 7438 0

原创 Spring Cloud Eureka 全解 (7) - 生产配置最佳实践

本文基于SpringCloud-Dalston.SR5 可以实现比较快的服务上下线: EurekaServer配置: #eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把read...

2018-01-24 17:47:46 16772 9

原创 Spring Cloud Eureka 全解 (6) - 一些热门QA

本文基于SpringCloud-Dalston.SR5 Eureka服务实例启动时,是否会立刻向EurekaServer注册? 是的,立刻会。 EurekaClient在每次实例状态发生改变时,有一个Listener: statusChangeListener = new Appl...

2018-01-24 17:44:02 11861 2

原创 Spring Cloud Eureka 全解 (5) - 自我保护机制

本文基于SpringCloud-Dalston.SR5 自我保护机制 关闭自我保护机制(默认是打开的):eureka.server.enable-self-preservation=false 自我保护机制:默认情况下,如果Eureka Server在一定时间内没有接收到某个微服...

2018-01-24 17:07:36 15943 1

原创 Spring Cloud Eureka 全解 (4) - 核心流程-服务与实例列表获取详解

本文基于SpringCloud-Dalston.SR5 关于服务与实例列表获取 EurekaClient端 我们从Ribbon说起:EurekaClient也存在缓存,应用服务实例列表信息在每个EurekaClient服务消费端都有缓存。一般的,Ribbon的LoadBalancer...

2018-01-24 16:29:58 15608 0

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