Java
文章平均质量分 82
ShareBeHappy_Qin
这个作者很懒,什么都没留下…
展开
-
JVM 性能分析 —— CMS 老年代并发 GC 触发条件与压缩式 GC (升级为 Full GC)触发条件
触发条件二:用户请求式触发导致的 GCCause,就是 javalangsystemgc(即 System.gc())或者 jvmtiforce_gc(即 JVMTI 方式的强制 GC),意味着只要是 System.gc(前提没有配置 ExplicitGCInvokesConcurrent 参数)调用或者 JVMTI 方式的强制 GC 都会进行一次压缩式的 Full GC。如果设置为 true,当应用程序调用 System.gc() 时,CMS 收集器会触发一次并发 GC 收集,而不是 Full GC。原创 2024-08-27 20:38:15 · 837 阅读 · 0 评论 -
Linux 命令 —— ps命令(查看进程信息)
常见的状态有 R: 正在运行,S: 可中断睡眠,D: 不可中断睡眠、Z: 僵尸进程,T: 已停止)、UID、PID、PPID、C、PRI、NI(进程的 nice 值。ps(processes snapshot)命令用于显示当前进程的状态信息,ps 命令查看的是当前进程的快照,即执行ps命令时那一时刻的进程状态快照,如果想要动态实时的显示进程信息,可以使用top命令。ps -F 输出 11 个字段:UID、PID、PPID、C、SZ、RSS、PSR、STIME、TTY、TIME、CMD。原创 2024-08-10 13:27:25 · 1599 阅读 · 0 评论 -
JVM 性能分析 —— G1 日志分析
文章目录日志级别-XX:+PrintGC(简洁版)-XX:+PrintGCDetails(详细版)-XX:G1LogLevel=finest(非常详细版)YGC 日志并发标记日志Mixed GC 日志Full GC 日志日志级别JVM 日志级别中的 fine、finer 和 finest 这三个级别fine:JVM 配置参数为 -XX:G1LogLevel=fine 或使用 -XX:+PrintGC。用于输出一些常规性的信息,不会产生太多的日志输出。finer:JVM 配置参数为 -XX:原创 2024-08-09 19:03:45 · 1273 阅读 · 0 评论 -
JVM 性能分析—— 一文带你读懂 G1 垃圾收集器收集流程
G1 设计目的在JVM 性能分析—— 一文带你读懂 CMS 垃圾收集器收集流程介绍了 CMS 垃圾收集器的工作流程,CMS 收集器的关注点是低延迟,尽可能缩短垃圾收集时用户线程的停顿时间,但在 JDK 9 之后,CMS 不推荐使用。取而代之是 Garbage First,即 G1 垃圾回收器,它除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为 M 毫秒的时间片段内,消耗在垃圾收集上的时间不得超过 N 毫秒。原创 2024-07-28 21:46:50 · 1154 阅读 · 0 评论 -
JVM 性能分析—— 一文带你读懂 CMS 垃圾收集器收集流程
在详细讲解 CMS 与 G1 垃圾收集器之前,先介绍其中的一些知识点,方便后续理解。原创 2024-07-27 15:57:59 · 1002 阅读 · 0 评论 -
elastic-job 定时任务 —— 失效转移、任务错过机制与幂等机制
若 overwrite=true,重启或者启动新的任务服务,相关配置会传到 zookeeper 注册中心中并覆盖掉之前的配置,会以最后一次启动上传的配置为准,所以以后任务执行时,都会从 zookeeper 中得到最新的配置执行。虽然失效转移能够重新执行分配给宕机的任务,但并不能完全保证业务的幂等性,还是建议在作业中实现幂等性,以确保数据的正确处理。第一次触发任务执行5分钟,第一次触发的任务还没有执行完就触发了第二次任务,此时第二次不会叠加执行,会先记录,等第一次任务执行完后接着再执行第二次触发的任务。原创 2024-07-17 23:08:21 · 1295 阅读 · 0 评论 -
Linux 命令 —— top命令(查看进程资源占用)
top 命令是 Linux/Unix 系统中常用的进程监控工具,可以实时显示系统中各个进程的资源占用情况,是一个快照信息,包括CPU、内存等。进入 linux 系统,直接输入 top,回车,就会显示如下所示的信息。1、第一行:时间上的统计top - 15:10:50:表示当前系统的时间是15:10:50;up 10 min:表示系统当前已经运行了10分钟。user:表示当前登录系统的用户数为1。原创 2024-07-14 17:34:19 · 6381 阅读 · 0 评论 -
ShardingSphere-JDBC —— 整合 mybatis-plus,调用批量方法执行更新操作扫所有分表问题
记录下 ShardingSphere 整合 mybatis-plus 进行批量更新时扫所有分表问题的原因及解决方案。ShardingSphere 整合 mybatis-plus 与整合 mybatis 流程是一样的,一个是导入 mybatis 包,一个是导入 mybatis-plus 包,在介绍了 ShardingSphere 分布分表及整合 mybatis 的使用示例,这里就不在赘述整合使用过程了。原创 2024-07-13 17:25:03 · 973 阅读 · 0 评论 -
elastic-job 定时任务 —— elasticjob 介绍与使用教程
Elastic-Job 是当当网开源的一个分布式调度解决方案,基于 Quartz 二次开发的,由两个相互独立的子项目 ElasticJob-Lite 和 Elastic-Job-Cloud 组成。ElasticJob-Lite 是一个轻量级无中心化的解决方案,它提供了分布式任务调度的核心功能,以 Jar 包的形式提供分布式任务的协调服务;原创 2024-07-07 11:33:09 · 1771 阅读 · 0 评论 -
JVM 性能分析——jdk 自带命令分析工具(jps/jstat/jinfo/jmap/jhat/jstack)
在生产环境中,可以执行 jstat 命令,快速收集应用程序的运行数据,可以快速了解应用程序的运行状况,有助于在线上问题发生时进行快速诊断和分析。jhat 命令与 jmap 命令搭配使用,用于分析 jmap 生成的 heap dump 文件,通过 jhat 提供的 Web 界面,可以对内存快照进行交互式的分析和浏览。可以生成内存快照中的对象统计报告、分析内存快照中对象之间的引用关系、支持 Java 对象查询语言(OQL)等,可以帮助开发者快速定位内存泄漏等问题。也可以使用其他工具,如 jprofiler。原创 2024-06-16 12:03:26 · 1731 阅读 · 0 评论 -
JVM 性能分析案列——使用 JProfiler 工具分析 dump.hprof 堆内存快照文件排查内存溢出问题
在 windows 环境下实现。原创 2024-06-15 13:43:22 · 3865 阅读 · 0 评论 -
JVM 性能分析——JVM内存结构(运行时数据区)
每个 JVM 只对应一个 Runtime 实例,即运行时环境。类的加载 –> 验证 –> 准备 –> 解析 –> 初始化,这几个阶段完成后,就可以被 Java 虚拟机所使用。Java 虚拟机会使用到它的执行引擎 (Execution Engine) 来执行类中的字节码指令。执行引擎会利用 JVM 运行时数据区 (Runtime Data Area) 中的各种区域来支持字节码的执行,如程序计数器、虚拟机栈、本地方法栈、堆、方法区等。下面着重介绍运行时数据区,即JVM内存结构。原创 2024-06-12 09:25:24 · 1128 阅读 · 0 评论 -
Java 异步编编程——Java内置线程池(Executor 线程池)
默认情况下,只有当线程池中的线程数大于 corePoolSize 时,keepAliveTime 才会起作用,直到线程池中的线程数不大于 corePoolSize,即当线程池中的线程数大于 corePoolSize 时,如果一个线程空闲的时间达到 keepAliveTime,则会终止,直到线程池中的线程数不超过 corePoolSize。线程管理部分是消费者,它们被统一维护在线程池内,根据任务请求进行线程的分配,当线程执行完任务后则会继续获取新的任务去执行,最终当线程获取不到任务的时候,线程就会被回收。原创 2024-05-31 16:24:17 · 1228 阅读 · 0 评论 -
操作系统——用户态与内核态、同步与异步、阻塞与阻塞
计算机系统中,通常 CPU 执行两种不同性质的程序代码:一种是操作系统内核程序(管理程序);另一种是用户自编程序(即系统外层的应用程序,或简称 “应用程序”)。CPU 运行这两种不同性质的程序,就是操作系统中最基本的两种运行模式:用户态和内核态。先来说一些废话程序执行目的就是操作计算机中的各种硬件资源,每个程序最终都会编程二进制语言来操作硬件,从而实现某种具体功能。这样一说,好像可以不用操作系统,每个程序自己就是操作系统了。行吗?肯定不行啊。应用程序大多是高级语言编写的,你会将高级语言编译成二进制语言吗?原创 2024-05-28 22:45:19 · 1050 阅读 · 0 评论 -
Java 异步编程——Java内置线程调度器(Executor 框架)
任务提交阶段可以根据应用程序的需要灵活地控制任务的产生和提交,任务执行阶段则由 Executor 框架负责管理和调度线程的执行,从而实现更高的并发性能和更好地利用系统资源。Executor 框架是 Java 5 引入的一套用于异步任务执行的API,提供了一种简化线程管理和任务执行的方式,将任务的提交和执行分离开来。任务执行阶段:在任务执行阶段,Executor 根据线程池的配置和调度策略,从它管理的线程池中分配一个空闲线程来执行任务。任务执行完成后,线程会被返回到线程池中,等待被再次分配执行新的任务。原创 2024-05-26 16:51:58 · 1088 阅读 · 0 评论 -
Java 异步编程——既然可以手动创建线程,为什么还要使用线程池
在思考为什么要使用线程池,而不手动创建线程之前。我们先来了解 Java 创建普通对象与线程的区别。普通Java对象创建Java创建普通Java对象,了解JVM的同学,应该都知道JVM创建对象的过程,主要在内存上做了一些处理:Java 在创建普通对象时,主要在堆内存中进行数据处理。Java线程创建接下来,一起看看Java线程的创建过程。首先看一下线程创建的代码:分析上述代码,线程创建分两个过程:第一步,创建一个Thread对象,其实这就是一个普通的Java对象创建,没有什么特殊的;第二步,调用 start(原创 2024-05-16 20:09:43 · 610 阅读 · 0 评论 -
Java 异步编程——为什么要使用多线程,以及在什么情况下使用多线程?
在指定数量的计算器下,就可以有指定数量的工人同时并行计算登记各自的货物线路,在使用计算器计算完后,释放计算器,在等待下一辆货车运货到来之前,就可以有多个计算器释放出来让其它多个工人继续使用登记,宏观上看,在指定数量的计算器下,有更多的工人同时计算登记,这样不仅任务处理速度是上来了,而且计算器也能够得到充分使用。在处理IO密集型任务的时候,虽然多线程和单线程最终都落在一个核心处理器(CPU)去处理任务,但在处理一个任务的整个过程中,CPU并不需要一直参与运算,此时多线程就可以充分利用CPU。原创 2024-05-15 20:34:46 · 1112 阅读 · 0 评论 -
Java 类 —— AutoCloseable
AutoCloseable 是从 jdk7 开始存在的接口,位于 java.lang 包中,用于自动执行资源关闭操作。AutoCloseable 接口定义了一个名为 close() 的方法,用于关闭资源。通常在实现 AutoCloseable 接口的类中重写 close() 方法来实现自定义关闭资源的逻辑,例如关闭文件、释放网络连接等。AutoCloseable 接口是为了配合 Java 7 引入的 try-with-resources(try-catch-finally) 语句而设计的。原创 2024-02-21 18:59:31 · 1241 阅读 · 0 评论 -
一文读懂 Java 注解与自定义运行时注解
注释:说明代码给程序员看的。注解:说明代码给计算机看的。原创 2023-12-26 11:40:36 · 98 阅读 · 1 评论 -
Maven 项目的三种打包方式与 pom.xml 文件中项目描述
这里详细描述maven项目的三种打包方式(jar、war、pom)以及pom.xml中描述项目相关的标签。原创 2023-12-19 22:05:10 · 410 阅读 · 0 评论 -
RocketMQ相关概念与使用入门详解
MQ 是一种提供消息队列服务的中间件(消息中间件),提供了消息生产、存储、消费全过程API的软件系统。消息的发送者(称为发布者、生产者、Producer)会将消息直接发送给特定的接收者(称为订阅者、消费者、Comsumer)。MQ 的基础消息模型就是一个发布/订阅(Pub/Sub)模型。原创 2023-12-19 21:56:48 · 140 阅读 · 0 评论 -
JAVA 中的 SPI 机制,从原理、现有框架中的使用以及自定义实现 SPI 机制使用来深入了解 SPI 机制
这里从原理、现有框架中的使用以及自定义实现 SPI 机制使用来你深入了解 SPI 机制原创 2023-12-19 21:38:35 · 98 阅读 · 0 评论 -
自定义 springboot 启动器 starter 与自动装配原理
介绍 springboot classpath 类路径管理,springboot starter 启动器的原理,并通过自定义 starter 来加深理解,最后简述自动装配原理原创 2023-12-19 21:26:00 · 69 阅读 · 0 评论 -
分布式链路追踪 —— 基于Dubbo的traceId追踪传递
本文首先介绍 Dubbo 的 RpcContext 上下文和 Filter 过滤器,然后再介绍基于Dubbo的traceId追踪传递的实现。原创 2023-12-18 08:30:00 · 1647 阅读 · 0 评论 -
Dubbo 快速入门使用教程
Apache Dubbo 是一款 RPC(Remote Procedure Call 远程过程调用)服务开发框架,提供了远程调用方案和服务治理方案。这里详解介绍dubbo使用入门原创 2023-12-16 17:43:10 · 506 阅读 · 0 评论 -
ShardingSphere-JDBC —— 数据分片详细讲解
ShardingSphere 数据分片模块的主要设计目标是尽量像使用一个数据库表一样使用水平分片之后的数据库表集群。原创 2023-11-17 09:32:59 · 899 阅读 · 0 评论 -
java 新特性—— Lambda表达式与函数式接口
Lambda 表达式 + 方法引用原创 2023-02-02 09:48:49 · 614 阅读 · 0 评论 -
一文读懂 Java 泛型
java泛型介绍原创 2022-12-22 14:42:14 · 374 阅读 · 0 评论 -
Java修饰符——final
Java修饰符原创 2022-10-31 23:32:49 · 338 阅读 · 0 评论 -
Java类——日期格式化类:SimpleDateFormat 类和 DateFormatUtils、DateUtils类
日期格式化类:SimpleDateFormat 类和 DateFormatUtils、DateUtils类原创 2022-10-16 10:25:48 · 1287 阅读 · 0 评论 -
Java类——日期类:Date类和Calendar类
日期类:Date类和Calendar类原创 2022-10-15 21:47:43 · 538 阅读 · 0 评论 -
框架 —— MyBatis
MyBatis学习网址:http://c.biancheng.net/mybatis/https://www.w3cschool.cn/mybatis/7zy61ilv.html下载:https://github.com/mybatis/mybatis-3/releases mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statem原创 2020-08-13 16:30:17 · 162 阅读 · 0 评论 -
框架 —— spring MVC
spring MVC学习网址:http://c.biancheng.net/spring_mvc/https://www.w3cschool.cn/spring_mvc_documentation_linesh_translation/原创 2020-08-12 22:44:41 · 94 阅读 · 0 评论 -
框架 —— Spring
目录什么是spring什么是springSpring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由E原创 2020-08-09 08:44:32 · 324 阅读 · 0 评论 -
Java之JVM内存结构
JVMJava虚拟机(Java Virtual Machine)是一种抽象计算机。与真正的计算机一样,它有一个指令集,并在运行时操作各种内存区域。运行时数据区Java虚拟机定义了在程序执行期间使用的各种运行时数据区域。一些数据区域是在Java虚拟机启动时创建并在Java虚拟机退出时销毁。另一些数据区域为每个线程运行区,每个线程数据区域在线程创建时创建,在线程退出时销毁。1、程序计数器(Program Counter Register)Java虚拟机可以支持同时执行多个线程。每个Java虚拟机线程都原创 2020-06-21 11:04:18 · 147 阅读 · 0 评论 -
leetcode 面试题 117. 填充每个节点的下一个右侧节点指针 II
面试题 117. 填充每个节点的下一个右侧节点指针 II题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/解题:// 使用常量空间,不是完美二叉树public Node connect(Node root) { if(root == null){ return null; } Node firstNode = nu原创 2021-03-18 23:18:23 · 163 阅读 · 0 评论 -
数据库连接池技术(c3p0 与 druid)
数据库连接池概念概念:其实就是一个容器(集合),存放数据库连接对象的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。好处:1.节约资源2.用户访问高效接口类与方法:标准接口:javax.sql 包下的 DataSource 接口。主要方法:获取连接:getConnection()。归还连接:Connection.close()。如果连接对象Connection是从连接池中获取原创 2020-06-28 16:12:05 · 206 阅读 · 0 评论 -
配置文件(properties文件)与 JDBC工具类(JDBCUtils)创建
配置文件(properties文件)properties 文件是一种属性文件,这种文件以键值对 key=value 格式存储内容(键值都是字符串类型)。Java中可以使用util包下的Properties类来读取这个文件。可以用“#”作为注释。解决传参的问题。后缀为.properties,只需在配置文件中设置响应的参数。# 名为 jdbc.properties 的配置文件,不需要以分号结尾。url=jdbc:mysql://localhost:3306/db3username=rootpa原创 2020-06-28 15:16:02 · 1223 阅读 · 1 评论 -
反射、Class类、类加载器
反射**反射:**反射(reflection)机制是指在程序的运行时借助于 Reflection API ,可以构造任意一个类的对象,知道任意一个对象所属的类,任意一个类的成员变量和方法,调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。某个类加载完之后,在堆内存的方法区中就构造一个 Class 类的对象(一个类只有一个Class对象),这个对象就包含了这个类完整的结构信息,可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,形原创 2020-06-28 11:40:51 · 143 阅读 · 0 评论 -
HTTP 请求协议
HTTPhttp://www.blogjava.net/zjusuyong/articles/304788.html原创 2020-06-23 23:34:07 · 311 阅读 · 0 评论