自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BLF2

Hello JAVA

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

转载 JVM学习之垃圾回收器

垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性语法层面:Lambda表达式、switch、自动拆箱装箱、enum、泛型API层面:Stream API、新的日期时间、Optional、String、集合框架底层优化:JVM优化、GC的变化、元空间、静态域、字符串常量池等。

2024-01-15 23:54:34 88 1

转载 JVM学习之垃圾回收相关概念

1、一般的垃圾回收算法至少会划分出两个年代,年轻代和老年代。但是单纯的分代理论在垃圾回收的时候存在一个巨大的缺陷:为了找到年轻代中的存活对象,却不得不遍历整个老年代,反过来也是一样的。2、如果我们从年轻代开始遍历,那么可以断定N, S, P, Q都是存活对象。但是,V却不会被认为是存活对象,其占据的内存会被回收了。这就是一个惊天的大漏洞!因为U本身是老年代对象,而且有外部引用指向它,也就是说U是存活对象,而U指向了V,也就是说V也应该是存活对象才是!而这都是因为我们只遍历年轻代对象!

2024-01-15 23:53:24 47

转载 JVM学习之垃圾回收概述和相关算法

垃圾回收概述Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。

2024-01-15 23:51:40 50

转载 JVM学习之字符串常量池

在调用intern方法时,如果池中已经包含了由equals(object)方法确定的与该字符串内容相等的字符串,则返回池中的字符串地址。如果不是用双引号声明的String对象,可以使用String提供的intern方法:intern方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。2、使用 intern() 方法:由于数组中字符串的引用都指向字符串常量池中的字符串,所以程序需要维护的 String 对象更少,内存占用也更低。常量池就类似一个Java系统级别提供的缓存。

2024-01-15 23:49:54 60

转载 JVM学习之执行引擎

执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部。

2024-01-15 23:47:03 18

转载 JVM学习之对象的实例化内存布局与访问定位

因此一般来说(由字节码中跟随invokespecial指令所决定),new指令之后会接着就是执行init方法,把对象按照程序员的意愿进行初始化,这样一个真正可用的对象才算完成创建出来。将对象的所属类(即类的元数据信息)、对象的HashCode和对象的GC信息、锁信息等数据存储在对象的对象头中。在Java程序的视角看来,初始化才正式开始。初始化成员变量,执行实例化代码块,调用类的构造方法,并把堆内对象的首地址赋值给引用变量。所有属性设置默认值,保证对象实例字段在不赋值可以直接使用。

2024-01-15 23:45:41 21

转载 JVM学习之方法区

原文链接:https://github.com/youthlql/JavaYouth方法区栈、堆、方法区的交互关系从线程共享与否的角度来看ThreadLocal:如何保证多个线程在并发环境下的安全性?典型场景就是数据库连接管理,以及会话管理。栈、堆、方法区的交互关系下面涉及了对象的访问定位Person 类的 .class 信息存放在方法区中person 变量存放在 Java 栈的局部变量表中真正的 person 对象存放在 Java 堆中在 person 对象中,有个指针指向方法区中

2024-01-15 23:44:10 85

转载 JVM学习之堆

从内存模型而不是垃圾收集的角度,对Eden区域继续进行划分,JVM为每个线程分配了一个私有缓存区域,它包含在Eden空间内。多线程同时分配内存时,使用TLAB可以避免一系列的非线程安全问题,同时还能够提升内存分配的吞吐量,因此我们可以将这种内存分配方式称之为快速分配策略。据我所知所有OpenJDK衍生出来的JVM都提供了TLAB的设计。1、每个线程都有一个TLAB空间2、当一个线程的TLAB存满时,可以使用公共区域(蓝色)的。

2024-01-15 23:42:37 65

转载 JVM学习之虚拟机栈

具体问题具体分析如果只有一个线程才可以操作此数据,则必是线程安全的。如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制的话,会存在线程安全问题。如果对象是在内部产生,并在内部消亡,没有返回到外部,那么它就是线程安全的,反之则是线程不安全的。/*** 面试题:* 方法中定义的局部变量是否线程安全?具体情况具体分析* 何为线程安全?* 如果只有一个线程才可以操作此数据,则必是线程安全的。* 如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制的话,会存在线程安全问题。

2024-01-15 23:40:33 62

原创 Spring Cloud Feign上传文件

最近有个需求就是把图片格式化成300*240的大小并且作为小程序分享时的封面,A服务负责处理图片,B服务是公共服务,负责上传图片到OSS并且生成访问链接。

2023-12-27 18:06:08 471

原创 JVM学习之运行时数据区

JVM的PC寄存器是对物理PC寄存器的抽象模拟,是软件层面的概念,主要存储指令相关的现场信息。CPU只有把数据加载到寄存器才能使用。PC寄存器是用来存储指向下一条指令的地址,也可以理解为即将要执行指令的代码。由执行引擎读取下一条指令。它是一块很小的内存空间,小到可以忽略不计,也是运行速度最快的存储区域。在JVM规范中,每个线程都有自己的程序计数器,是线程私有的,生命周期与线程一致。任何时间,一个线程只有一个方法在执行,也就是所谓的当前方法。

2023-12-16 23:17:08 186

原创 JVM学习之类加载子系统

引导类加载器(Bootstrap Classloader)和自定义类加载器(User-Defined ClassLoader)从概念上来讲,自定义类加载器一般是指程序中由开发人员自定义的一类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有3个:注意:上面的ClassLoader是类似等级关系,不是继承关系。不是Java语言实现的。//获取系统类加载器。

2023-12-16 23:13:08 152

原创 JVM学习之JVM概述

Java虚拟机的启动是通过引导类加载器(Bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。在今天,Java程序的运行性能已经达到了可以和C/C++程序一较高下的地步。Hotspot VM是目前市面上高性能虚拟机代表作之一。Java编译器输入的指令流基本上是一种基于。HotSpot只使用的PC寄存器,所以是。它采用解释器与即时编译器并存的架构。JVM整体结构详细图。

2023-12-16 23:10:06 225

原创 Spring Boot 升级3.x 指南

先创建一个parent项目,打包类型为pom,继承自spring boot的parent项目然后把版本集中放在这个pom里面,示例如下

2023-11-23 20:08:18 1313

原创 Kafka Rebanlace次数过高问题

为什么会下线:1.心跳原因:hearbeat.interval.ms和session.timeout.ms2. 拉取间隔 : max.poll.interval.ms

2023-11-09 23:55:30 1325

原创 埋点日志最终解决方案——Golang+Gin+Sarama VS Java+SpringWebFlux+ReactorKafka

以上一步一个坑,有些是自己能力不够踩的,有些是为了解决某个问题踩的,最后终于消停的一阵。但又出现新问题了,这次问题没那么紧急,但比较重要。按照一般的剧本,上面的坑都踩完,基本上也就不会怎么去改这个服务,但新的问题还是出现了,就是容器化部署基础镜像要升级,从原来的debian10升级成了debian11,当然这是大版本,小版本几乎没周都会升级,升级时也不会通知项目组测试,运维直接升。在debian10升级debian11的时候,出现了一个问题细思极恐,就是zlib。

2023-10-25 19:29:33 1283 6

原创 cAdvisor监控Docker容器做性能测试

当前有个服务做技术选型,服务要求比较高的性能,要做性能测试。部署的环境是容器话部署,但申请新的容器流程较长,于是我打算在流程走完之前简单评估下性能,来确定技术选型是否可行。当前有一个测试服务器上装有Docker。

2023-10-20 19:11:25 371

原创 Redis不支持集群错误——ERR This instance has cluster support disabled

我没公司RedisServer权限,公司的RedisServer不是集群部署,就是单个,那就只能从配置上修改一下了,Configuration从Cluster变成Standalone即可。说明RedisServer不支持集群,网上很多文章都是修改Server配置重启解决此问题的,这不再赘述。最近手动配置了Redis的连接池。

2023-08-18 11:43:37 1323

原创 SpringBoot版本升级引起的FileNotFoundException——WebMvcConfigurerAdapter.class

就是这了,Jar里面没法排掉某个特定的类,只能在当前项目中创建一个和这个类一模一样的类,代码改成自己想要的。因为Java中,某个类(同一个classloader+全限定名)已经被加载了,就不会再次被加载,项目中的类加载优先于Jar包中的,又都是同一个类加载器加载,所以会优先加载到项目中类,Jar中的则不会被加载了,曲线救国。这TM和大海捞针没区别啊,这项目光依赖自己的包就几十个,大部分都是公司内部包,我都没有源码,这可怎么找啊,只能去报异常的地方碰碰运气了。里面翻找了一下,感觉最有价值的就是里面的。

2023-07-28 21:41:24 1396

原创 记一次Mysql慢SQL优化过程

讲道理的话,连结查询的字段一定是要加索引的,这个表因为历史原因没有加,最开始我感觉这玩意儿正常人都会加吧,结果就是没有,可能当时设计人员认为没有很多数据吧。历史问题就不追究了,主要是要知道怎么去定位问题和解决问题。

2023-07-21 18:50:23 118

原创 Nginx接收Http协议请求转发使用Https协议

公司使用阿里的apigateway,规定不太友好,同是SIT环境,A系统的SIT1环境居然不能调用B系统的SIT2环境的接口。因为各个系统之间部署的SIT环境数量不同A系统可能只有1套,B系统可能有8套,这样的话,可能会随时切换调用B系统的环境,管理员不允许,于是想着用Nginx做下转发。因为A系统调用B系统是内部调用,不计划使用HTTPS,因为还要去申请证书,但是B系统调用入口必须使用HTTPS,这样就要求Nginx可以接收HTTP协议的请求,转发出去的协议是HTTPS。

2023-06-13 20:06:03 5115 2

原创 关于OpenResty+doujiang24/lua-resty-kafka写入kafka故障转移模拟测试——踩坑

某个ip如果一直无法访问就没法将请求消息正确发送到kafka,此ip恢复时即可正确发送到kafka

2023-03-22 21:16:39 850

原创 nginx+lua写入kafka报buffered messages send to kafka err: not found broker

[error] 9#0: *4029703 [lua] producer.lua:272: buffered messages send to kafka err: not found broker, retryable: true, topic: xxx, partition_id: 11, length: 2

2023-03-13 20:34:03 528

原创 python定时任务执行shell脚本切割Nginx日志-慎用

docker+python+shell切割Nginx日志

2023-02-01 19:27:50 755

原创 Zuul迁移至Spring Cloud Gateway踩坑记录

Zuul1.x已经不维护了,需要迁移。这里记录一下从Zuul1.x迁移到Spring Cloud Gateway 3.x遇到的坑

2022-11-29 13:46:41 1495

原创 golang使用chromedp生成滚动更新页面的PDF

golang使用chromedp实现懒加载页面生成PDF

2022-11-04 00:34:58 1457

原创 记一次服务CPU过高排查

查看到CPU过高,于是根据CPU线程占用排查问题

2022-09-30 16:38:22 980

原创 记一次生产环境内存占用过高的排查

生产环境出现内存使用较大的情况,没有OOM,但K8s服务重启了,查一下原因

2022-08-26 14:00:10 745

原创 StringRedisTemplate 分布式锁

StringRedisTemplate 分布式锁

2022-07-14 15:10:46 2284

原创 Docker容器只有JRE没有JDK使用Jattach导出内存快照

Docker容器里面只有JRE没有JDK使用jattach导出内存快照

2022-07-01 14:44:21 1951 2

原创 Spring Boot Nacos配置无法覆盖@Value定义的默认值

SpringCloud Swagger2 Nacos配置无法覆盖@Value设置的默认值

2022-06-03 18:08:48 3306

原创 K8s部署Spring Boot Admin,Actuator监控(不使用主机名通信)

---------------- 特别感谢:wang dayu 同学整理 ----------------集成说明1.由于环境上部署无法访问pod地址,需要将client的客户端服务 url和管理网址进行转换覆盖pod的地址2.插件需要严格遵守与springboot,springcloud版本兼容性,具体对应关系请参考该地址:https://blog.csdn.net/q283614346/article/details/121146721以下集成案例以springboot 版本1.5.7.RE

2022-03-12 21:03:40 1429

原创 Lua将Nginx请求数据写入Kafka——埋点日志解决方案

缘起有一个埋点收集系统,架构是Nginx+Flume。web,小程序,App等客户端将数据报送至Nginx,Nginx将请求写入本地文件,然后Flume读取日志文件的数据,将日志写入Kafka。这个架构本来没什么问题,但是部署在K8s容器就有问题了,当前一个Nginx后面是3个Flume,Nginx根据渠道将日志写入web.log,mp.log,app.log,3个log文件各对应一个Flume将数据写入Kafka,遇到的问题首先是health check问题,K8s一个容器只能提供1个health ch

2022-01-28 20:10:29 5050

原创 JUC笔记(二)

打断park的线程: public static void main(String[] args) throws InterruptedException { Thread myThread = new Thread(()->{ System.out.println("park---->"); LockSupport.park(); System.out.println("unpark---->"); Syste

2022-01-23 20:08:14 384

原创 JUC笔记(一)

同步和异步这个概念相对于调用者来说,如果调用者需要等待方法返回后才能继续运行,就是同步,如果不需要等待方法返回即可继续运行,就是异步。在多线程里,同步的扩展意思是多线程之间协调一致。IO操作IO操作不占用CPU,但是线程被阻塞创建和启动线程直接使用ThreadThread thread = new Thread(){ @Overide public void run(){ }};//必须调用start启动线程thread.start()使用Run

2022-01-03 16:29:54 317 1

原创 mysql慢日志分析,执行计划

Mysql慢日志分析,资源消耗监控,执行计划慢日志Mysql提供了慢日志记录,可以监控执行时间超过设定值的sql,并予以记录。查看是否开启了慢查询日志:show variables like '%slow%';show variables like '%long_query_time%';可以看到慢查询日志的状态slow_query_log是OFF,是关闭状态,slow_query_log_file是慢日志文件存储位置,long_query_time是超过多少秒视为慢查询,默认是10秒。

2021-08-08 17:12:01 669

原创 mysql的undo log、redo log、binlog和MVCC

Mysql的undo log、redo log、binlog和MVCC本文试图解释undo log,redo log,bin log的作用,以及Innodb的MVCC机制undo logundo log 记录的是sql语句执行更新前的数据,这里的更新是泛指,除了select其它都算更新。在读已提交和可重复读的隔离级别下,会记录事务中某条数据的修改版本链,用来支持MVCC,详细参考MVCC章节。redo logredo log的设计是为了提高性能,如果没有redo log,数据库更新一条数据的过程大

2021-06-14 16:49:58 438 4

原创 事务的ACID,隔离级别,脏读,幻读和不可重复读

事务的ACID原子性(atomicity)一个事务中执行的sql语句,要么全部成功,要么全部失败,不可能一部分成功。一致性(consistency)事务执行前和执行后数据一致,也就是说事务中的sql语句不能只执行一部分。这种请款一般发生在事务异常中断,服务器异常宕机,此时需要保证正在执行的事务在数据库重启后要进行提交或回滚操作。隔离性(isolation)多个事务执行过程中不互相干扰。持久性(durability)事务提交成功后永久保存在磁盘,不能出现事务提交成功后,数据没保存情况,异常宕

2021-06-07 23:47:47 649 8

原创 对接OKTA 使用SAML2.0协议

对接OKTA 使用SAML2.0协议缘起给客户做项目,客户要求内部使用okta登陆,使用SAML2.0协议,需要对接。okta初探OKTA是SSO,SAML协议的交互流程大致如下浏览器打开需要登录系统登陆界面,系统登陆界面只有一个登陆按钮,没有输入用户名密码的地方(原因是OKTA使用域账户登陆的时候,能直接获取域账户名,除了这个还有好多客户端都支持,比如Apple账户)点击按钮,跳转到OKTA页面,这个页面只有一个loading动画,个人猜测里面有获取当前域账户名的代码然后再次一个

2021-05-07 18:44:29 3953 15

原创 Nginx 前端服务器 转发后端请求 自定义错误页面

算是备忘吧nginx server 配置:(版本号1.16.1)server { listen 80 default_server; listen [::]:80 default_server; server_name xxx.net; # Load configuration files for the default server block. include /etc/nginx/defaul

2021-04-17 23:48:55 1248 2

C语言文件操作快速上手手册

这本简单的《C语言快速上手手册》是我和一位同学参考cpp然后总结出来的哭诉应用文件操作的一本很实用的手册,简化了课本和参考资料大篇幅讲和专业术语多的头疼的问题...

2014-07-14

空空如也

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

TA关注的人

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