自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM调优常用的命令和参数

2、jmap:用来生成dump文件和查看堆相关的各类信息的命令。5、jinfo:查看jvm参数和动态修改部分jvm参数。7、- XX:MaxPermSize:设置永久代最大值。6、-XX:PermSize:设置永久代初始值。3、jstat:查看jvm运行时的状态信息。4、jstack:查看jvm线程快照的命令。1、jps:查看进程及其相关去信息。3、-Xmn:新生代的内存空间大小。5、-Xss:每个线程的堆栈大小。1、-Xms:初始化堆大小。2、-Xmx:最大堆大小。

2024-07-05 17:57:16 73

原创 发现CPU占用过高,该如何排查解决?

4.使用 jstack pid | grep 线程id(16进制) -A 20 (显示20行)2.使用 top -H -p pid 发现有两个线程占用比较大。使用命令 printf '0x%x\n' pid。1.使用top命令 查看cpu占用最多的进程。3.将线程id转换为16进制。根据代码显示进行错误排查。

2024-07-05 17:46:04 199

原创 聚集索引与非聚集索引的区别

聚集索引是指表的索引和数据存储在一个文件中(innodb)非聚集索引指表数据与表索引存储在两个文件中(MyISAM)非聚集索引叶子节点存储的事data的地址。聚集索引的data存在叶子节点。2.从文件的检索方式来区别。1.从文件存储方式来区别。

2024-07-05 17:29:47 200

原创 ElasticSearch的使用场景

而且,随着你数据和查询量的增长,Elasticsearch 分布式的特性允许你的部署能随着它无缝地增长匹配。Elasticsearch 的日志解决方案(ELK 栈)可以实现秒级的数据采集到展示,提供灵活的搜索分析能力,并支持交互式分析。它支持商品搜索、应用搜索、站内搜索等功能,能够处理高并发的查询请求,提供高性能、高可用的搜索服务。但是不论你的实例与其中一个相似,还是你正使用 Elasticsearch 来解决一个新的问题,你在 Elasticsearch处理数据、文档和索引的方式是相同的。

2024-04-14 17:34:46 543

原创 【RocketMQ】 RocketMQ的使用场景

在秒杀或团队抢购活动中,由于用户请求量较大,导致流量暴增,秒杀的应用在处理如此大量的访问流量后,下游的通知系统无法承载海量的调用量,甚至会导致系统崩溃等问题而发生漏通知的情况。此时需要提供一种广播机制,一条消息本来只可以被集群的一台机器消费,如果使用 RocketMQ 的广播消费模式,那么这条消息会被所有节点消费一次,相当于把价格信息同步到需要的每台机器上,取代缓存的作用。对于一个指定的 Topic,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费。

2024-04-11 09:47:55 1348

原创 【JVM】常见的JVM参数

Xmn 年轻代的大小,默认值为整个堆的1/3,可以根据峰值流量计算最大的年轻代大小,尽量让对象只存放在年 轻代,不进入老年代。但是实际的场景中,接口的响应时间、创建对象的大小、程序内部还会有一些定时任务等不 确定因素都会导致这个值的大小并不能仅凭计算得出,如果设置该值要进行大量的测试。-XX:MaxMetaspaceSize=值 参数指的是最大元空间大小,默认值比较大,如果出现元空间内存泄漏会让操作系 统可用内存不可控,建议根据测试情况设置最大值,一般设置为256m。

2024-04-10 08:30:00 484

原创 【JVM】如何解决内存泄漏问题

(memory leak):在Java中如果不再使用一个对象,但是该对象依然在GC ROOT的引用链上,这 个对象就不会被垃圾回收器回收,这种情况就称之为内存泄漏。⚫ 少量的内存泄漏可以容忍,但是如果发生持续的内存泄漏,就像滚雪球雪球越滚越大,不管有多大的内存迟 早会被消耗完,最终导致的结果就是。⚫ 使用MAT打开hprof文件,并选择内存泄漏检测功能,MAT会自行根据内存快照中保存的数据分析内存泄漏 的根源。⚫ 当堆内存溢出时,需要在堆内存溢出时将整个堆内存保存下来,生成。

2024-04-09 09:16:08 576

原创 【JVM】垃圾回收器

1、CMS使用了标记-清除算法,在垃圾收集结束之后会出现大量的内存碎片,CMS会在Full GC时进行碎片的整理。Shenandoah 是由Red Hat开发的一款低延迟的垃圾收集器,Shenandoah 并发执行大部分 GC 工作,包括并 发的整理,堆大小对STW的时间基本没有影响。CMS垃圾回收器关注的是系统的暂停时间, 允许用户线程和垃圾回收线程在某些步骤中 同时执行,减少了用户线程的等待时间。PS+PO是JDK8默认的垃圾回收器,多线程并行回收, 关注的是系统的吞吐量。:吞吐量高,而且手动可控。

2024-04-01 17:32:05 870

原创 【每日一题】13. 罗马数字转整数

算法

2024-03-21 17:38:19 217

原创 【JVM】垃圾回收算法

复制算法的核心思想是:1.准备两块空间From空间和To空间,每次在对象分配阶段,只能使用其中一块空间(From空间)2.在垃圾回收GC阶段,将From中存活对象复制到To空间。3.将两块空间的From和To名字互换。标记整理算法也叫标记压缩算法,是对标记清理算法中容易产生内存碎片问题的一种解决方案。核心思想分为两个阶段:1.标记阶段,将所有存活的对象进行标记。Java中使用可达性分析算法,从GC Root开始通过引用链遍历出所有存活对象。2.整理阶段,将存活对象移动到堆的一端。

2024-03-19 17:37:04 1002

原创 【JVM】如何判断堆上的对象没有被引用?

终结器引用指的是在对象需要被回收时,终结器引用会关联对象并放置在Finalizer类中的引用队列中,在稍后由一条由FinalizerThread线程从队列中获取对象,然后执行对象的finalize方法,在对象第二次被回收时,该对象才真正的被回收。,软引用相对于强引用是一种比较弱的引用关系,如果一个对象只有软引用关联到它,当程序内存不足时,就会将软引用中的数据进行回收。,JVM中默认引用关系就是强引用,即是对象被局部变量、静态变量等GC Root关联的对象引用,只要这层关系存在,普通对象就不会被回收。

2024-03-19 15:06:21 1192

原创 【每日一题】13. 罗马数字转整数

数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。例如, 罗马数字 2 写做 II ,即为两个并列的 1。X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。解释: M = 1000, CM = 900, XC = 90, IV = 4.I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。解释: L = 50, V= 5, III = 3.

2024-03-19 10:06:51 349

原创 【每日一题】134. 加油站

贪心算法

2024-03-18 16:54:35 352

原创 【每日一题】238. 除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请 不要使用除法,且在 O(n) 时间复杂度内完成此题。输入: nums = [-1,1,0,-3,3]输入: nums = [1,2,3,4]-n 为输入数组 nums 的长度。输出: [24,12,8,6]输出: [0,0,9,0,0]

2024-03-14 14:43:07 328 1

原创 【JVM】什么是运行时数据区?

运行时数据区指的是JVM所管理的内存区域,其中分成两大类:线程共享 –方法区、堆方法区:存放每一个加载的类的元信息、运行时常量池、字符串常量池。堆:存放创建出来的对象。线程不共享 –本地方法栈、虚拟机栈、程序计数器本地方法栈和虚拟机栈都存放了线程中执行方法时需要使用的基础数据。程序计数器存放了当前线程执行的字节码指令在内存中的地址。直接内存主要是NIO使用,由操作系统直接管理,不属于JVM内存。

2024-03-13 15:43:07 1248

原创 【每日一题】274. H 指数

根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且 至少 有 h 篇论文被引用次数大于等于 h。因为排序后,当 i >= 0 并且 citations[i] <= h 时,说明已经没有论文引用次数大于等于 h,因此此时的 h 即为所求的 H 指数。解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。citations[i] > h 表示当前论文引用次数大于等于我们要找的 H 值。

2024-03-13 10:54:24 412

原创 【每日一题】45. 跳跃游戏2

贪心算法

2024-03-12 16:58:10 439 1

原创 【每日一题】55. 跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。判断你是否能够到达最后一个下标,如果可以,返回 true;否则,返回 false。输入:nums = [2,3,1,1,4]输入:nums = [3,2,1,0,4]

2024-03-06 16:59:36 370 1

原创 【JVM】类加载器的双亲委派机制

JDK8及之前的版本中,扩展类加载器和应用程序类加载器的源码位于rt.jar包中的sun.misc.Launcher.java。2.避免重复加载,双亲委派机制可以避免同一个类被多次加载,上层的类加载器如果加载过类,就会直接返回该类,避免重复加载。1.保证类加载的安全性通过双亲委派机制,让顶层的类加载器去加载核心类,避免恶意代码。历史上Osgi框架实现了一套新的类加载器机制,允许同级之间委托进行类的加载。平台类加载器的存在更多的是为了与老版本的设计方案兼容,自身没有特殊的逻辑。

2024-03-05 11:33:22 526 1

原创 线程池工具类

以下是一个线程池工具类,用于cpu密集型任务。以下是下载图片工具类。

2024-03-05 11:14:36 492 1

原创 【每日一题】122. 买卖股票的最佳时机 II

贪心算法求解

2024-03-05 10:03:49 353

原创 【每日一题】121. 买卖股票的最佳时机

解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;解释:在这种情况下, 没有交易完成, 所以最大利润为 0。输入:prices = [7,6,4,3,1]输入:[7,1,5,3,6,4]

2024-03-04 16:56:28 346

原创 【JVM】类加载器

Java类加载器(Class Loader)是Java虚拟机(JVM)的一部分,负责将类的字节码加载到内存中,并将其转换为可执行的Java对象。类加载器在Java应用程序中起着重要的作用,它实现了动态加载类的机制,使得Java具备了灵活性和可扩展性。1.启动类加载器(Bootstrap Class Loader):也称为根类加载器,它负责加载Java虚拟机的核心类库,如java.lang.Object等。除了这三个主要的类加载器,Java还支持自定义类加载器,开发人员可以根据需要实现自己的类加载器。

2024-03-02 22:57:53 434

原创 【每日一题】189. 轮转数组

输入: nums = [1,2,3,4,5,6,7], k = 3。输入:nums = [-1,-100,3,99], k = 2。向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]输出: [5,6,7,1,2,3,4]输出:[3,99,-1,-100]

2024-03-02 22:13:36 330

原创 【每日一题】leetCode 169. 多数元素

使用摩尔投票法进行解题,核心理念为 票数正负抵消。此方法时间和空间复杂度分别为 O(N)O(N)O(N) 和 O(1)O(1)O(1) ,为本题的最佳解法。给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。关于元素数量的问题我们很容易想到使用hashmap的特性进行求解,key为nums[i],value为出现的次数。如果一个数出现次数大于总数的1/2那么最中间的数一定复合条件。你可以假设数组是非空的,并且给定的数组总是存在多数元素。

2024-03-01 10:47:02 369 3

原创 【JVM】类的生命周期

类的生命周期

2024-02-29 17:47:43 1317 1

原创 【每日一题】leetCode

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。快指针从数组第三个数开始,因为题目中要求最多有两个重复项,所以判断第三个数和第一个数是否相同。这道题显而易见是使用双指针进行解题,具体解法如下。快指针:无论是否相同都移动到下一个数用于判断。如果不相同则写入,同时慢指针走动。

2024-02-29 10:23:56 328 1

原创 【JVM】字节码文件的组成二

字节码文件的组成:基本信息和常量池

2024-02-28 17:17:08 309 1

原创 【JVM】字节码文件的组成一

我们通过插件打开字节码文件可以看到主要有六个部分组成分别是:一般信息、常量池、接口、字段、方法、属性。一般信息:魔术,字节码文件对应的Java版本号,访问表示(public final等等)父类和接口。常量池:保存了字符串常量、类或接口名、字段名主要在字节码指令中使用。属性:类的属性,比如源码文件名内部类的列表等。字段:当前类或接口声明的字段信息。方法:当前类或接口声明的方法信息。一 、如何打开字节码文件。二 、字节码文件的组成。如何在idea中使用。

2024-02-28 15:54:17 604 1

原创 【JVM】Java虚拟机的组成

执行引擎:将字节码文件中的指令解释为机器码,同时使用即时编译器优化性能。运行时数据区域:负责管理JVM使用到的内存,比如创建对象和销毁对象。ClassLoader:加载class字节码文件中的内容到内存中。本地接口:调用本地已经编译的方法,比如虚拟机中的c/c++的方法。

2024-02-28 15:45:34 440 1

原创 【每日一题】leetCode

使用双指针进行去重

2024-02-28 09:50:26 338

原创 每日一题-数组

移除元素算法

2024-02-27 10:37:00 330

原创 leetCode每日一题 88. 合并两个有序数组

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。输入:nums1 = [0], m = 0, nums2 = [1], n = 1。输入:nums1 = [1], m = 1, nums2 = [], n = 0。解释:需要合并 [1,2,3] 和 [2,5,6]。解释:需要合并的数组是 [] 和 [1]。输出:[1,2,2,3,5,6]

2024-02-26 17:50:52 544

空空如也

空空如也

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

TA关注的人

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