java
文章平均质量分 85
怎能止步于此
一个创业者,一个希望能够在人生中有不断尝试的人,不断对未来有梦想的人,猜测、谣言、苦难、挫折,一定会伴随着你。
展开
-
手把手搭建Skywalking,玩转分布式链路追踪
什么是SkywalkingSkywalking是一个适用于分布式系统的性能监控工具文档地址:https://skyapm.github.io/document-cn-translation-of-skywalking/功能:服务,服务实例,端点指标分析根本原因分析服务拓扑图分析服务,服务实例和端点依赖性分析检测到慢速服务和端点性能优化分布式跟踪和上下文传播数据库访问指标告警安装单机版Skywalking下载前往https://archive.apache.org/di原创 2021-11-24 23:31:02 · 2655 阅读 · 2 评论 -
SpringCloud之远程调用Feign
创建Feign的消费者实例创建项目,引入依赖借助动态代理接口实现远程调用比较Eureka,Ribbon和Feign的调用方式。首先我们先创建一个ribbon-consumer的模块,并添加依赖: <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>s原创 2021-11-21 20:36:36 · 530 阅读 · 0 评论 -
硬钢Spring源码——五万字梳理完Spring核心原理
Spring源码解读前言Spring核心接口和类Bean与BeanDefinitionSpring的一等公民——BeanBeanDefinition ——Bean的定义BeanDefinition源码探究SpringIoc容器BeanFactoryBeanFactory和FactoryBean 的区别BeanFactory架构体系ListableBeanFactoryAutowireCapableBeanFactoryDefaultListableBeanFactoryApplicationContextA原创 2021-11-21 00:41:08 · 719 阅读 · 0 评论 -
Eureka快速入门——创建服务提供者
关于服务提供者的创建较简单,小编就少说点废话,直接上代码,跟着敲一敲相信聪明的小伙伴们就能一目了然了。创建服务提供者1.创建eureka-client模块并添加依赖依赖 <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-原创 2021-11-12 21:44:16 · 783 阅读 · 0 评论 -
推开SpringCloud的第一扇大门——初步探讨服务治理
SpringCloud前面,我相信各位小伙伴们已经对微服务架构有了一个基本的了解吧,那么现在立即马上,我们正式开始SpringCloud微服务架构实战部分的内容,从这里,我们推开SpringCloud技术架构的第一扇大门,我们一起来探讨一下SpringCloud中最最核心的一个组件——服务治理组件。分布式系统CAP定理在正式介绍服务治理组件之前,我们先来聊一聊在分布式系统一个非常重要的理论——CAP定理。一致性这里的C就是一致性(Consistency),它指的是在分布式系统中,所有的数据副本,比原创 2021-11-11 23:36:07 · 692 阅读 · 0 评论 -
史诗级鸿篇巨著微服务架构之微服务介绍
微服务架构认知欢迎大家和小编一起学习史诗级鸿篇巨著,微服务架构第一章——微服务架构认知,在本文中主要和大家介绍一下微服务架构的理念,让大家对微服务有个比较直观的认识,在介绍本次微服务系列之前,先来给大家做个剧透,看看我们整篇系列文章要介绍的内容。微服务介绍SpringCloud在微服务的整个体系当中,它包含了许许多多的组件,比如:服务治理——Eureka、Nacos、Consul负载均衡——Ribbon服务容错——Hystrix服务调用——Feign、DubboRPC分布式配置中心—原创 2021-11-10 22:31:41 · 725 阅读 · 0 评论 -
深入研究池化技术——对象池
池化技术池化技术是性能调优的重要措施,池化的思想是把对象放到池子里,当要使用的时候,从池子里面拿对象,用完后再放回池子里,这样可以降低资源分配以及释放的开销,从而提升性能,在实际项目中,其实我们每天都在使用池化技术。关于池化技术有以下几种:对象池:通过复用对象,减少对象的创建、垃圾回收的开销线程池:通过复用线程来提升性能连接池:如数据库连接池/Redis连接池/HTTP连接池,通过复用TCP连接来减少创建和释放连接的时间来提升性能。本文,我们详细来探讨一下对象池。对象池对象池用于维护一些很原创 2021-11-07 13:40:09 · 1284 阅读 · 0 评论 -
Java并发之彻底搞懂synchronized
前言我们开始向Java多线程模块发起进攻。由于Java线程这部分知识点非常多,并且网上也有相关的一些教程,如果要求小编把内容全部梳理完并不现实,我们重点介绍一些面试常考知识点,此外,还要给大家打个预防针,就是关于那种高大上的如何支撑千万级并发架构设计咱也不会说,毕竟没有在实际的系统中接触过这类知识的话,光靠在面试里面背概念不仅没有任何帮助,反而会给自己带来不少麻烦,做过就是做过,没做过就是没做过,并不是人人都有处理这种量级高并发的机会。希望大家不要被这类噱头唬住,毕竟万变不离其宗还是学习原理为主,所谓高并原创 2021-11-06 01:23:41 · 436 阅读 · 0 评论 -
java高阶编程之无锁并行计算框架——Disruptor初识
网上关于Disruptor相关的文章有很多,笔者看过美团技术团队出的一篇文章《高性能队列Disruptor》,也看过博客园中自称“史上最全”的文章《disruptor (史上最全)》,个人感觉内容比较少,说的也只是浮于表面。那么,请各位跟随小编一起揭开Disruptor的神秘面纱,探讨互联网高性能的奥妙吧!Disruptor快速入门2011年,企业应用软件专家Martin Fowler在自己的网站上写了一篇LMAX架构的文章。在文章中他介绍了LMAX是一种新型零售金融交易平台,它能以很低的延迟产生大原创 2021-11-03 22:40:06 · 911 阅读 · 2 评论 -
打通JVM调优第六战-代码缓存区(Code Cache)问题分析
代码缓存区代码缓存区是一块存储编译后代码的区域控制代码缓存区的配置有如下几个:属性作用默认值-XX:InitialCodeCacheSize设置代码缓存区的初始大小 ,以java -XX:+PrintFlagsFinal|grep InitialCodeCacheSize结果为准不同操作系统、不同编译器的值不同-XX:ReservedCodeCacheSize设置代码缓存区大小,以java -XX:+PrintFlagsFinal|grep ReservedCod原创 2021-10-28 19:48:59 · 2569 阅读 · 0 评论 -
打通JVM调优第五战-方法区溢出与直接内存溢出
方法区溢出与直接内存溢出方法区溢出方法区溢出总结直接内存溢出什么是直接内存?直接内存使用场景实战演练分配直接内存总结直接内存溢出问题直接内存总结方法区溢出我们本文主要探讨一下方法区溢出与直接内存溢出。先来回顾一下方法区的知识点:线程共享,用来存储被虚拟机加载的类型信息、常量、静态变量等在JDK8 之前,方法区是用持久代(Perm Gen)实现的,从JDK8 开始持久代被元空间(Metaspace)给代替了。同时方法区也成了一个逻辑上的概念。看下图:方法区的一部分在堆内存,另一部分在元空间原创 2021-10-27 22:49:47 · 807 阅读 · 2 评论 -
打通JVM调优第四战-栈内存溢出
栈内存溢出关于虚拟机栈与本地方法栈在java虚拟机规范里是这样描述的:如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError如果虚拟机的栈内存允许动态扩展,当无法申请到足够内存时,将抛出OutOfMemoryError虚拟机虽然是这样定义的,但是对于我们所熟悉的Hotspot虚拟机有两点意外:栈内存不允许动态扩展统一使用Xss设置栈大小,不区分虚拟机栈还是本地方法栈有的虚拟机是区分的,可以用Xss设置虚拟机栈,Xoss设置本地方法栈看下面一段原创 2021-10-26 23:59:51 · 214 阅读 · 0 评论 -
打通JVM调优第三战-堆内存溢出排查与分析
笔者有话说纸上得来终觉浅,绝知此事要躬行。这句话笔者一直把它当做自己的座右铭。希望大家也能抱有和笔者一样的姿态,多动手,多实践。让我们用实际行动证明,在我们年轻人的世界,不存在‘不可能’。聊聊内存溢出内存溢出是实际项目中经常会遇到的问题,关于内存溢出,可以细分为:堆内存溢出栈内存溢出方法区溢出直接内存溢出这四类。本文,我们就主要探讨一下堆内存溢出问题。看我下面演示一段容易造成OOM的代码:这段代码很简单,在main方法里面,我们不断地往oomList里面添加元素,然后使用我原创 2021-10-26 22:39:46 · 493 阅读 · 1 评论 -
打通JVM调优第二战-CPU过高问题定位
CPU过高问题如何定位?本文,我们来聊一下对于CPU过高问题如何定位。如果我们CPU占用率非常高,那么该怎样去定位哪段代码导致CPU过高呢?我们一般可以采用两种方式定位这种问题。top+jstacktop命令是linux中常用的命令,可以查看CPU的运行情况,比如查看CPU占用率,内存使用率等等。我们来演示一下:我们可以看到39331这个进程占用率最高,占用率为0.7%接着我们执行top -Hp 30331然后就可以显示出当前进程里面线程的运行信息我们可以看出来,29537这个线程是占原创 2021-10-25 23:34:49 · 418 阅读 · 0 评论 -
打通JVM调优第一条战-JVM日志
不同版本的JVM日志差异是比较大的,所以有必要专门探讨一下,首先我们先来看一下JDK 8里的JVM日志是怎么玩的。常用参数这里笔者整理了JDK8一部分相关垃圾收集和运行时的常用参数。JDK 8垃圾收集相关参数G1PrintHeapRegions、GCLogFileSize、NumberOfGCLogFiles、PrintAdaptiveSizePolicy、PrintGC、PrintGCApplicationConcurrentTime、PrintGCApplicationStoppedTime、P原创 2021-10-25 22:42:09 · 538 阅读 · 0 评论 -
JVM性能调优工具2之jcmd详解(覆盖全网最全的jcmd命令与说明文档)
上篇文章里《JVM常用性能调优工具详解1》我们已经探究了jps、jstat等监控工具,以及jinfo、jmap、jstack、jhat等故障排查工具,这里我单独拿出一篇文章,特别介绍jcmd。(因为jcmd这玩意细节太多了,整理文档就整理了好几个小时…)jcmdjcmd全称JVM Command,用于将诊断命令请求发送到正在运行的Java虚拟机,从JDK 7开始提供。使用说明命令如下:-f 从文件读取并执行命令-l 列出本机上的所有JVM进程我们先来看一下最简单的jcmd -l原创 2021-10-24 21:25:17 · 14865 阅读 · 0 评论 -
面临层出不穷的垃圾收集器我们如何选择?
如何选择垃圾收集器?前面几章,我们已经聊过了七种垃圾收集器,当然,在比较新的JDK版本中,还有低延迟更高效的垃圾收集器,比如:Shenandoah 、 ZGC… 这些内存我们以后再做详细介绍。那么,面临这么多的垃圾收集器,我们如何选择呢?我们可以从三个方面去考虑:你的应用系统关注的主要矛盾点是什么?比如说,某个项目是一个数据分析类的应用系统,我们希望它能更迅速的获得执行结果,那么吞吐量就是主要矛盾点。可以使用Parallel Scavenge而假设,某个应用是一个Web应用,Stop The原创 2021-10-24 08:33:52 · 251 阅读 · 0 评论 -
深入浅出垃圾收集器-G1收集器
G1收集器前面几篇博文中,我们聊了新生代收集器和老年代收集器(《深入浅出垃圾收集器-新生代收集器》、《深入浅出垃圾收集器-老年代收集器》),这篇文章主要和大家介绍最后一款主流的垃圾收集器 G1收集器。G1收集器的全称是:Garbge First这是一款面向服务器端应用的垃圾收集器,它既可以用于新生代,也可以用于老年代。内存布局G1这款垃圾收集器,它带来了很多革命性的变化,首先是堆内存布局的变化。我们来看一下图:和前面介绍的说有垃圾收集器都不一样,G1把整个java堆划分成了若干个大小相等的原创 2021-10-23 22:36:08 · 1704 阅读 · 0 评论 -
深入浅出垃圾收集器-老年代收集器
老年代收集器上篇文章中,和大家介绍了新生代收集器。这次,我们聊一聊老年代收集器。如果大家没有看过我的《深入浅出垃圾收集器-新生代代收集器》这篇文章的话,建议先去阅读后,再来学习这篇文章。Serial Old收集器也叫串行老年代收集器,可以认为它是Serial收集器的老年代版本。但是,它采用的是标记整理算法。它的执行过程大致是这样的:可以看出,他和Serial收集器相比,除了使用的算法不一样以外,其他和Serial收集器都是一样的。Serial收集器有哪些适用场景呢?可以和Serial/P原创 2021-10-23 18:46:10 · 425 阅读 · 0 评论 -
深入浅出垃圾收集器-新生代收集器
垃圾收集器前面我们已经详细探讨了垃圾收集算法,我们这次探讨一下垃圾收集器。垃圾收集算法为实现垃圾回收提供强有力的理论支持。而垃圾收集器则是利用垃圾收集算法,实现垃圾回收的实践落地。那么和垃圾收集算法类似,java也提供了多种垃圾收集器,不同的垃圾收集器也有不同的特性以及适用场景,甚至不同的垃圾收集器之间还可能存在配合使用的关系。那么使用起来还是比较复杂的。...原创 2021-10-23 09:30:09 · 485 阅读 · 0 评论 -
彻底理解分代收集算法
分代收集算法就目前来讲,业界各种商业虚拟机堆内存的垃圾收集,基本上都采用了分代收集。可想而知,分代收集算法有多么重要。分代收集算法的思想是:根据对象的存活周期,把内存分成多个区域,不同区域使用不同的回收算法回收对象。堆内存结构Java 把堆分成了"新生代"个"老年代",我们来看下图:经过分代之后,垃圾回收可以分成以下几类:新生代回收(Minor GC | Young GC)老年代回收(Major GC)清理整个堆(Full GC)由于执行Major GC的时候,也会伴随着一次原创 2021-10-22 22:16:29 · 2720 阅读 · 1 评论 -
初步探讨垃圾回收机制
写在前面社会上难免会有各种各样的偏见,年龄可以被否认,学历可以被否认,能力可以被否认,经验也可以被否认,但否认不了的,是我们年轻人一往无前的干劲,当有一天你能正确的接受和看待各种各样的偏见,不与他人相争,不与他人相比。静下心来,做自己的领域,成为自己心里的专家,做自己的偶像。万物没有什么可以争议,万事也没有什么值得惊奇,走自己的路,让别人说去吧。大话垃圾回收我们来探讨一下垃圾回收这个话题,垃圾回收是性能调优的重中之重,绝对值得我们深入研究。垃圾回收的内容水非常的深,细节也非常的多,小飞龙在准备这篇文原创 2021-10-21 21:31:25 · 235 阅读 · 0 评论 -
聊聊逃逸分析、标量替换与栈上分配
逃逸分析分析变量能否逃出他的作用域全局变量赋值逃逸方法返回值逃逸实例引用逃逸线程逃逸我们看下面一段代码:这段代码演示了三种逃逸的场景。public static SomeClass someClass;//全局变量赋值逃逸public void globalVariablePointerEscape() { someClass = new SomeClass();}这段代码里,我们把一个局部变量赋值给了一个静态变量,局部变量的作用域是在方法内部,类变量的作用域是在类里原创 2021-10-20 23:01:39 · 517 阅读 · 0 评论 -
大透编译器,聊聊方法内联
方法内联上篇文章中,和大家聊过JVM会用编译的方式为代码提速,那在这个基础上,即时编译器还做了很多的优化措施,从而进一步的提升性能,我们这次聊的方法内联就是即时编译器优化措施之一。来看下这段代码:private static int add1(int x1, int x2, int x3, int x4){ return add2(x1, x2) + add2(x3, x4);}private static int add2(int x1, int x2) { return x1 + x2;原创 2021-10-20 20:45:43 · 202 阅读 · 0 评论 -
侃侃编译器优化
字节码是如何运行的?首先我们先探讨一下字节码是如何运行的,众所周知,java有两种运行模式,一种叫解释执行,一种叫编译执行:解释执行:由编译器一行一行翻译执行编译执行:把字节码翻译成机器码,直接执行机器码下面我们来对比一下这两种执行模式:解释执行:优势在于没有编译的等待时间性能相对差一些编译执行:运行效率会高很多,一般认为比解释执行快一个数量级带来了额外开销那么怎样去查询Java是解释执行还是编译执行的呢?很简单,执行 java -version就可以了我们可原创 2021-10-19 23:49:24 · 274 阅读 · 0 评论 -
并发编程之原子性、有序性及可见性。
问题引入在计算机执行程序的过程中,每条指令都是在cpu中执行的。程序中的临时数据都是存放在主存中的。而cpu和数据直接产生交互的是高速缓存。在程序运行过程中,会将运算需要的数据从主存拷贝一份到高速缓存中。那么cup在进行计算时直接可以从高速缓存中读取数据和写入数据,运算结束后,再将高速缓存中的数据刷新到主存。很典型的一个例子: i = i+1;当线程执行这个语句时,cpu首先会先从主存中读取i的值,然后复制到高速缓存,然后cpu会对i进行+1的操作,然后写入高速缓存,最后刷新到主存中。缓存一原创 2021-08-18 00:28:28 · 186 阅读 · 0 评论 -
SpringCloudAlibaba电商项目实战
在昨天我们已经完成了父工程搭建和通用模块以及注册中心的搭建,那么接下来我们继续完成资料:云盘连接 提取码:er6t在云盘中将基础结构代码直接下载,并解压,通过idea打开这里每一个模块都是微服务模块,对应的都是对于数据库中表的增删改查操作,这里我有必要说一点每一个启动类上,都是通过通用mapper对包进行了扫描,并且每一个实体类都有相应数据库的表与字段的关系映射。也就是说,通过通...原创 2020-02-15 11:49:35 · 4324 阅读 · 4 评论 -
网站首页高可用解决方案
网站首页高可用nginx+lua学习目标了解Lua语言的基本语法使用Nginx+Lua+redis实现广告缓存掌握Nginx限流的基本使用方法1Lua介绍1.1Lua是什么Lua 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical CatholicUniversity of Rio de Janeiro)里的一个由Roberto Ierusalimsch...原创 2020-03-13 11:50:06 · 567 阅读 · 2 评论 -
Springboot连接jdbc6.0以上报错解决
错误如下:解决方案:在yml或properties中修改jdbc连接url添加&serverTimezone=Asia/Shanghai再次运行便可正常显示连接jdbc6.0版本以上必须设置serverTimezone...原创 2020-01-02 22:32:10 · 291 阅读 · 0 评论 -
探讨java与Python区别之多继承
为什么java不存在多继承今天刚学完Python的面向对象,发现在Python中类的继承是存在多继承的,而以前学的java却不存在多继承,学过java的都知道,类与类之间只有单继承的关系,而接口与类或接口与接口之间却存在多实现,那么大家有没有考虑过,为什么类却不能存在多继承的关系呢?1.产生的歧义比如我们定义一个A的类,里面定义一个eat()方法,再定义一个B类和C类,也分别定义自己的eat...原创 2019-09-22 14:43:28 · 419 阅读 · 0 评论 -
java操作数据库笔记
##JDBC1.概念:Java database Connectivity java 数据库连接, java语言操作数据库JDBC本质:其实就是官方(sun公司)定义的一套操作所有关系型数据库的规则,及接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(jdbc)编程,真正执行的代码是驱动jar包中的实现类2.快速入门: 步骤: 1...原创 2019-09-20 20:30:54 · 817 阅读 · 0 评论 -
浅谈个人自学编程心得
学习之路的坎坷与挫折从小学到高中从来没有对学习持有多大的热情,换句话说,其实我学习都是爸妈和老师逼的,作业也从来没有认真完成过一次,每次买的教材试卷什么的基本都是空白的,就根本对学习这事没有任何的兴趣,作业完成数量可以说是全校完成最少的人,现在说出来感觉自己还挺光荣的嘿嘿。虽然不爱学习,但人总要有个兴趣爱好吧,我的兴趣爱好就是打游戏,从小学的时候家里就买了一台电脑,只要一有空就玩游戏,以前非常...原创 2019-09-19 15:38:36 · 1684 阅读 · 4 评论