自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 收藏
  • 关注

原创 jvm内存调优命令和实战

摘要:本文介绍了JDK提供的JVM命令行诊断工具jmap和jstack,用于分析Java进程内存和线程问题。jmap可查看堆内存对象统计、堆配置摘要及生成堆转储快照,帮助定位内存消耗问题;jstack用于捕获线程堆栈快照,诊断死锁、高CPU占用等线程问题。文章详细说明了各命令的使用方法、输出字段含义及常见应用场景,是Java开发者性能调优和问题排查的重要参考。

2025-07-07 16:15:51 622

原创 G1垃圾收集器

G1垃圾收集器是面向大内存和多核处理器的服务器端收集器,通过将堆划分为多个Region实现高效回收。它采用分代收集策略,支持Young GC和Mixed GC、Full G,平衡了停顿时间和吞吐量。G1通过并发标记、复制算法和可预测停顿时间(默认200ms)优化性能,适合8GB以上堆内存场景。关键参数包括MaxGCPauseMillis、InitiatingHeapOccupancyPercent等。使用时应合理设置停顿时间,避免频繁触发Full GC。G1的优势在于可控的停顿时间、低内存碎片和高并发性能。

2025-07-05 16:24:33 822

原创 Java垃圾回收机制和三色标记算法

文章摘要 本文详细介绍了Java垃圾回收机制,包括对象回收判断方法(引用计数法和可达性分析算法)、垃圾收集算法(标记-复制、标记-清除、标记-整理)以及常见垃圾收集器(Serial、Parallel、ParNew、CMS)。重点分析了CMS的工作流程及优缺点,并探讨了三色标记算法如何解决并发标记中的漏标问题。优化建议包括合理设置年轻代参数以减少老年代垃圾回收频率。文章为理解Java内存管理提供了系统性的技术解析。

2025-06-30 11:12:18 954

原创 JVM对象内存分配机制全解析

摘要: JVM对象内存分配过程涉及多阶段优化策略。首先通过逃逸分析和标量替换实现栈上分配,减少GC压力;大对象直接进入老年代避免复制开销;常规对象优先在Eden区分配,通过Minor GC和年龄计数器管理对象晋升;老年代采用空间担保机制防止容量不足;动态年龄判断机制提前将存活率高的对象移入老年代。该分配体系结合了栈分配、分代收集和动态调整策略,有效平衡了内存利用率和GC性能。(149字)

2025-06-20 20:48:31 687

原创 JVM对象创建全流程解析

本文详细介绍了JVM对象创建的完整流程,主要包括:1)类加载检查阶段,JVM通过new指令参数验证类是否已加载;2)内存分配环节,解释了指针碰撞和空闲列表两种分配方式,以及解决并发问题的CAS和TLAB机制;3)初始化阶段,说明对象内存空间默认零值初始化规则;4)对象头设置,详细剖析了32位系统下对象头的组成结构,包括Mark Word、类型指针等关键字段。整个流程展现了JVM如何高效地完成对象创建,并确保线程安全与内存管理的可靠性。

2025-06-17 17:41:40 755

原创 JVM内存模型

JVM内存模型解析:运行时数据区包含堆(共享)、元空间(共享)、栈(线程私有)、本地方法栈和程序计数器(线程私有)。以Calculate类为例,compute()方法执行时,JVM创建栈帧,包含局部变量表和操作数栈。执行过程:加载常量5和7到操作数栈→存入局部变量表→取出相加→乘9→返回108。对象实例存储在堆,引用存在栈。方法执行完毕后,栈帧弹出,程序返回调用位置继续执行。该过程展示了JVM内存操作的基本原理。

2025-05-30 21:49:22 614

原创 根据jvm源码剖析类加载机制

本文剖析了JVM类加载机制的核心流程和实现原理。首先描述了从执行java命令到创建JVM、初始化类加载器的完整启动过程,重点分析了Bootstrap、ExtClassLoader和AppClassLoader三级类加载器的创建与层级关系。其次详细解析了类加载的七个阶段:加载、校验、准备、解析、初始化、使用和卸载,并阐述了每个阶段的关键操作。通过代码示例展示了不同类加载器的加载路径及双亲委派机制的具体实现,包括其安全防护和避免重复加载的设计目的。最后说明如何通过继承ClassLoader并重写findClas

2025-05-28 22:30:14 985

原创 线程池ThreadPoolExecutor,从0到0.6

ThreadPoolExecutor是JDK提供的在java.util.concurrent包中的一个用于创建线程池的工具类。

2023-03-07 17:33:25 723

原创 Apache Pulsar 云原生消息中间件之王

pulsar,消息中间件,是一个用于服务器到服务器的消息系统,具有多租户、高性能等优势。pulsar采用发布-订阅的设计模式,producer发布消息到topic,consumer订阅这些topic处理流入的消息,并当处理完成之后发送一个确认。一旦创建订阅,即使consumer断开连接,pulsar仍然可以保存所有消息,在consumer确认消息已处理成功之后才会删除消息。Pulsar 的关键特性如下:Pulsar 的单个实例原生支持多个集群,可在集群间无缝地完成消息复制。

2023-03-03 17:05:30 1528

原创 Spring Security 的前后端分离项目的权限方案,从0到0.8

思路分析①通过前面的分析,我们发现Spring Boot集成了默认的Spring Security之后虽然已经具备了认证授权的功能,但存在两个在实际项目中不适用的问题:默认的登录页面默认的用户名密码②同时,前面我们也说一般web应用的安全管理都是通过两条线完成的,Spring Security也是:认证授权③此外,我们结合前后端分离项目中常用的认证授权流程......

2022-09-01 15:17:37 2922

原创 java函数式编程、Lambad表达式、Stream流、Optional类、函数式接口、方法引用的使用,从0到0.8

java函数式编程、Lambad表达式、Stream流、Optional类、函数式接口、方法引用的使用

2022-08-05 12:08:12 1488

原创 Docker应用,从0到0.8

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。......

2022-08-03 11:05:23 528

原创 下载外网资源慢的解决办法

下载外网资源慢的解决办法!

2022-07-06 17:13:21 15198 1

原创 装饰器模式,从0到1

装饰器模式:在不改变原有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。

2022-03-19 17:01:45 455 1

原创 zookeeper,从0到0.4

目录一,简介1,工作机制2,数据结构3,Zookeeper集群角色(1)Leader(2)Follower(3)Observer二,集群安装1,下载2,解压3,修改配置4,启动zookeeper5,查看状态6,启动客户端7,退出客户端8,停止zookeeper三,配置文件详解四,命令行客户端使用1,命令行客户端2,查看znode节点信息3,创建znode节点4,修改znode节点的值5,删除znode节点6...

2022-03-17 10:34:45 977 1

原创 Alibaba微服务组件——Naocs配置中心,从0到0.8

Nacos为用户提供包括动态服务发现,配置管理,服务管理等服务基础设施,帮助用户更灵活,更轻松地构建,交付和管理他们的微服务平台,基于Nacos, 用户可以更快速的构建以“服务”为中心的现代云原生应用。Nacos可以和Spring Cloud、Kubernetes/CNCF、Dubbo 等微服务生态无缝融合,为用户提供更卓越的体验。

2022-02-24 11:52:40 909

原创 SpringCloud微服务组件——OpenFeign调用组件,从0到0.6

Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。Feign可以使HTTP请求远程服务时就像调用本地方法一样的体验。它解决了让开发者调用远程接口就像调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。

2022-01-25 17:30:09 1242

原创 Spring Cloud NetFlix微服务组件——Ribbon负载均衡器,从0到0.6

Ribbon是一个客户端负载均衡器。Ribbon客户端组件提供一系列的完善的配置,如超时,重试等。通过LoadBalancer获取到服务提供的所有机器实例,Ribbon会自动基于某种规则(轮询,随机)去调用这些服务。Ribbon也可以实现自定义负载均衡算法。

2022-01-25 10:21:21 852

原创 MyBatis,从0到0.8

学而时习之,不亦说乎?以前只是能在项目中使用,并不懂里面的弯弯绕,而且对mybatis的认识不系统、不深刻,故在此系统的学习一下,并总结下文。

2022-01-18 14:59:10 1619 1

原创 Redis,从0到0.6

基本的理论先学习,然后将知识融会贯通!

2022-01-07 15:01:48 1002

原创 Alibaba微服务组件——Nacos服务注册中心,从0到0.5

naocs

2022-01-04 11:38:26 2315 2

原创 Elasticsearch全文搜索引擎,从0到0.6

一,ES简介Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-E...

2021-12-19 22:14:33 2063 1

原创 一点一滴积累23种设计模式的理解

“每一个模式秒速了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次的使用该方案而不必做重复的劳动。”一,什么是设计模式设计模式,Design Pattern,是前人在软件设计和代码开发中通过对常见问题反复试验总结出的解决方案,是解决特定问题的一系列套路或模板,给后人提供了设计、编程、解决问题的思想。软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在.

2021-12-13 21:54:18 197

原创 安卓开发要点简介(部分)

1,Service组件的用法Service和都代表可执行的程序区别:Service一直在后台运行,没有用户界面,具有自己的生命周期开发Service的步骤:先开发一个Service子类在AndroidManifest.xml文件配置该Service配置时通过元素指定它可以被哪些Intent启动Android系统本身提供了大量了Service组件Service组件时可执行的程序,有足迹的生命周期(1)创建①定义一个继承Service子类②在AndroidManifest.xml文件中配置

2021-11-04 14:01:16 289

原创 Linux的JDK、Tomcat、Mysql、Redis、Maven、Nginx安装使用

一,安装JDK1,下载所用版本的JDK官网地址:Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/#java8

2021-11-03 17:35:26 490

原创 Spring AOP 切面编程,从0到0.6

随着Spring框架发展至今天,介绍和讲解Spring AOP的文章、视频等已经遍地都是,本文作者依然本着自我学习之后的梳理的宗旨写下这边文章,故文章结构、逻辑、条理等方面比较随性,若读者觉得不方便阅读学习请移步其他优秀的文章,当然也希望对大家有所帮助。本文依靠Spring官方文档对AOP和Spring AOP的介绍,再加上自己的理解而展开。一,对AOP的理解AOP(Aspect-oriented Programming,面向切片编程);通过于预编译方式和运行期动态代理实现不修改源代码的情

2021-08-15 20:10:39 211

原创 Spring的全局(统一)异常处理

一,什么是全局异常处理二,try...catch的弊端三,异常处理的三种方式1,实现HandlerExceptionResolver接口2,@ExceptionHandler3,@ControllerAdvice+@ExceptionHandler四,

2021-08-12 11:04:10 14026 4

原创 java多线程,从0到1

一,创建线程的方式一——继承Thread类线程类:public class MyThread extends Thread{//1,继承Thread类 //2,重写run方法 @Override public void run() { for(int i = 0;i<20;++i) { System.out.println("id:"+this.getId()+" name:"+this.getName()+" i="+i); } }}public class

2021-07-03 19:56:22 167 1

原创 java反射(Reflection)

一,概述反射机制允许程序在运行期间获得任何类的任何内部信息,并直接操作任意对象的内部属性和方法。正是由于反射机制的存在,使java被视为准动态语言。动态编程语言(Dynamic programming Language):动态语言是指程序在运行时可以改变其结构。比如,新的函数可以被引进,已有的函数可以被删除等在结构上的变化。静态类型语言(Statically Typed Language):静态类型语言数据类型是在编译其间检查的。即是,在写程序时要声明所有变量的数据类型。Class类:

2021-06-19 22:36:58 179

原创 java的注解类型(Annotation)

一,前言注解,在java程序中经常看到的@Override、@Deprecated,在SpringBoot中经常用到的@XX。注释:书写在代码中用以辅助 人 理解代码的文字,不参与程序的运行,对代码没有任何影响。注解:①代码中的特殊标记,以“@注释名”的形式存在于代码中,用以辅助程序的理解代码代码,②程序可以读取注解,对被标注的程序(类、方法、属性等)进行限制、规定如何运行等,③也是一种类的类型(自己的理解,不一定完整准确)。注解在java中的典型应用:通过反射技术获取被注解的代码里的注解,以决定如

2021-06-16 21:16:50 1345 1

原创 简单工厂模式+工厂方法模式+反射优化的工厂模式

平时所说的工厂模式,分为简单工厂模式、工厂方法模式和抽象工厂模式,属于设计模式中的创建型模式。创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象。——摘自百度百科工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。——摘自C语言中文网本想通过定义来进一步理解工厂模式,但看到这个定义之后感觉…,可能理科+计算机+男同志更适合采用图和代码的方式理解知识吧,所以后面我还是通过UM

2021-06-13 22:23:57 395

原创 滑动窗口+leetCode题3

曩 ,遇到滑动窗口的题时往往条件发射似的就用滑动窗口的方法解决,也没有细想什么情况下用;今,慕然回首,发现是时候展现其真正的技术了,总结使知识更清晰牢固嘛;故,认真分析一波滑动窗口这个东西的核心内容、具体操作、应用对象,并结合了一道leetCode上的题3,在深入领悟一下我的领悟。一,滑动窗口根据我的认知知识的顺序,看到滑动窗口首先想到计算机网络中的滑动窗口,于是它的样子呈现在我脑海在中:计算机网络中的滑动窗口:1,窗口:窗口内是一段连续的子序列;2,滑动:窗口向一个方面前进,这个前进是通

2021-05-25 18:56:34 164

原创 HashMap学习总结一之从源码学习HashMap底层原理

以前对HashMap的认识仅限于使用——在遇到可以用key-value形式存储的数据并需要高效的查询效率时便使用java API中的HashMap类,对其底层也只是在阅读一些博客或观看一些视频时获得的片段性的了解。毕竟,HashMap是一个秀外慧中的容器,(外:提供了高效的查询效率,内:众多数据结构的集合,包括哈希、顺序表、单向链表和红黑树),故在此通过尝试阅读源码望对其深入理解。一,类前的注释进入定义代码定位到类定义的头部的位置。看看其提供了什么信息:它是有两个泛型的泛型类,猜测K、V各代表键和

2021-05-21 19:19:31 206

原创 oracle中多行注释“/**/”引发的问题

最近在测试一个sql脚本,出现了一个语句执行的问题。测试发现,脚本文件在PL/SQL命令窗口中执行时,执行结果正常,该文件在windows控制台中执行时,界面和执行bat文件一样非正常显示。因为,执行bat文件也是在windows控制台执行该文件,所以,不能正常显示是因为在windows控制台中执行了文件,即与执行的环境有关。经过一番周折也没有发现语句的问题。后来无意中将“/*”改成 /** 问题便得到了解决。真是奇妙!含有一个星号的/*会被windows控制台(sql plus)解释为“

2020-11-17 19:48:06 2305

原创 Android之Activity的的4中加载模式

一,概述1,为什么要想Activity指定四种加载模式?Android采用Task管理多个Activity,通过一个或多个Task来管理一个应用的每个Activity;每次按下返回键将会从栈顶移除一个Activity。但,Android没有为Task提供API,所以开发人员无法直接操作Task,此时,如果开发人员需要对每一次启动的目标Activity都创建一个新实例、或需要复用已经在栈顶的Activity实例、再或需要让每一个Activity都保存在一个栈中以方便全局复用等这些操作时怎么指定是哪种呢?

2020-10-02 19:07:51 435

原创 Android之Activity生命周期概述与测试方法(横屏时Activity状态怎么变化?)

一、概述Activity的活动状态由Androin以Activity栈的形式管理,当前正在运行的Activity位于栈顶Activity生命周期的状态转换图由Activity生命周期的状态转换图可以看出,Activity存在4种状态和7个用于改变状态的系统或掉方法。4种状态:①运行状态,此时当前Activity位于前台,用户可见,可以获得焦点②暂停状态:其他Activity转入前台,但此Activity依然可见而不能获得焦点③停止状态:Activity变得完全不可见④销毁状态:Activi

2020-10-02 12:28:57 508

原创 Android多媒体应用开发之MP3音乐播放器

一,MediaPlayer类概述MediaPlayer是ANdroid自带的多媒体库,可用于实现音频操作,若结合SurfaceView和VideoView等控件可是实现视频的播放。1,创建MediaPlayer对象,并装载音频文件①可以直接使用new的方式MediaPlayer mp=new MediaPlayer();此时,需要调用setDataSource()方法指定要播放的资源文件,调用prepare(),调用start()进行播放。②使用create的方式MediaPlayer mp

2020-10-01 19:52:48 1080 1

原创 人工智能之状态空间表示法的简单应用之翻转三枚钱币

一,状态空间表示法概述1,状态空间表示法就是用来表示问题及其搜索过程的一种方法。是人工智能中最基本的形式化方法,也是讨论为题求解技巧的基础。2,状态空间表示法的基础是状态和算符(1)状态描述某一类不同事物间的差别而引入的一组最少变量q0,q1,…,qn的有序集合,例如,描述学生,变量可以有年级、班级、姓名、性别、学号……根据要解决的问题,从中选择最少的一组变量,比如:区分所有在坐的同学分别在哪一个班上课(年级、班级);区分在坐的每一位同学(姓名、性别、学号)状态变量:Q=(q0,q1,…,qn

2020-09-28 10:36:11 5343 1

原创 二叉树的前中后序遍历的递归与迭代算法

一,递归算法二叉树的前、中、后序遍历的思路和程序都非常简单。前中后序遍历的算法结构相同,只需要调整打印的位置。前序遍历:打印根-访问左子树-访问右子树中序遍历:访问左子树-打印根-访问右子树后序遍历:访问左子树-访问右子树-打印根????遍历二叉树的算法中的基本操作是访问结点,所以不论是按照哪一种依次进行遍历,对有n个结点的二叉树,其时间复杂度为O(n).????由于是该算法是递归调用,所需辅助空间是遍历过程中栈的最大容量,即树的深度;一般情况下为O(logn);最坏情况下树的深度为n,则此时

2020-09-06 20:05:51 683

原创 高性能的MySQL

高可用性需要解决的两个问题:一是,如何实现数据共享或同步数据二是,如何处理failover(failover指当服务器死机或出现错误时可以自动切换到其他备用服务器,不影响服务器上业务系统的运行)1,主从复制解决方案数据同步方法采用的是MySQL replication技术一个日志复制过程在复制过程中一台服务器充当主服务器,一台或多台充当从服务器????从服务器到主服务器拉取二进制日志文件,再将日志文件解析成相应的SQL在从服务器上重新执行一遍主服务器的一致性问题:MySQL replica

2020-08-24 19:06:26 226

空空如也

空空如也

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

TA关注的人

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