文章分类 -  技术文章

技术相关文章
摘要:前言 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享一些解决这类问题非常常用的办法,绝大多数内容可以应用到实际项目中。 现实项目中可能会遇到这些场景: 1、填写某些form表单时,保存按钮不小心快速点了两次,表中竟然产生了两条重复的记录,只是id不一样。 2、在项目中为了解决 阅读全文
posted @ 2023-02-13 15:13 梅晓煜 阅读(47) 评论(0) 推荐(0)
摘要:一、G1垃圾收集器 G1(Garbage-First) 是一款面向服务端应用的垃圾收集器,主要针对配备多核CPU及大容量内存的机器,以极高概率满足GC停顿时间的同时,还兼具高吞吐量的性能特征。 在JDK1.7版本正式启用,是JDK9以后的默认垃圾收集器,取代了CMS收集器。 为什么叫做Garbage 阅读全文
posted @ 2022-10-19 17:36 梅晓煜 阅读(2610) 评论(0) 推荐(1)
摘要:在观察JVM GC时,我们需要看得懂GC日志,并且知道相关的参数配置。 我们以下面的这个Demo为例子去设置GC日志参数(需要 javac 生成class文件) public class GCDemo { public static void main (String[] agrs) { byte[ 阅读全文
posted @ 2022-10-11 10:15 梅晓煜 阅读(1373) 评论(0) 推荐(0)
摘要:JVM中最重要的一部分就是堆空间,基本上大多数的线上JVM问题都是因为堆空间造成的OutOfMemoryError(OOM)。因此掌握JVM关于堆空间的参数配置对于排查线上问题非常重要。 PS: 本文所有配置,如果没有特殊说明,均是基于JDK1.8。 堆配置 我们使用-Xms设置推的初始空间大小,使 阅读全文
posted @ 2022-09-20 18:01 梅晓煜 阅读(2252) 评论(0) 推荐(0)
摘要:在了解JVM的垃圾回收的过程中,经常会遇到这些术语,例如:Minor GC、Young GC、Old GC、Full GC、Stop-The-World等。这些GC的术语代表什么,之间的区别又是什么,通过这一篇希望可以加深印象。 Minor GC 从年轻代空间回收内存称为Minor GC,有时候也成 阅读全文
posted @ 2022-09-19 16:26 梅晓煜 阅读(119) 评论(0) 推荐(0)
摘要:CMS是老年代垃圾回收器,在回收过程中可以与用户线程,它可以与Serial回收器和Parallel New回收器搭配使用,Java9之后默认年轻代使用Parallel New回收器,并且不可更改,同时JDK9已经不推荐使用CMS,默认使用G1,并且JDK14已被删除了。CMS牺牲了吞吐量来追求回收速 阅读全文
posted @ 2022-09-14 11:09 梅晓煜 阅读(1921) 评论(0) 推荐(0)
摘要:概述 三色标记算法,应用于JVM并发垃圾回收,为了减少STW,JVM将比较耗时的标记阶段,变成了并发标记,在并发标记的同时,用户线程也可以继续运行。 并发标记一共会有两个问题:一个就是本来标记不是垃圾,此时用户线程将对象属性赋予null,取消引用,但是根据标记认为它不是垃圾,就是浮动垃圾问题;第二个 阅读全文
posted @ 2022-09-09 11:32 梅晓煜 阅读(1272) 评论(0) 推荐(0)
摘要:前面几篇文章,介绍了Java虚拟机内存结构,垃圾回收机制。那么这一篇就具体说说执行垃圾回收的回收器。 不同的版本的虚拟机回收器也各不相同,下面都是以HotSpot为虚拟机版本,因为此版本商业化程度比较高、技术也比较成熟。 总的来说,Java虚拟机的垃圾回收器可以分为四大类型:串行回收器(Serial 阅读全文
posted @ 2022-09-01 11:21 梅晓煜 阅读(722) 评论(0) 推荐(0)
摘要:上一节讲到运行时数据区,Java虚拟机内存结构,里面提及到存活时间短的对象,会被回收。那么我们不得不谈到Java虚拟机的垃圾回收机制,毕竟内存总是有限的。我们需要一种机制将不再被使用的对象回收,从而释放内存,这样才能我们的程序才能持续运行下去。 首先什么是垃圾? 和我们日常生活对比下,如果一个东西没 阅读全文
posted @ 2022-08-31 22:50 梅晓煜 阅读(224) 评论(0) 推荐(0)
摘要:大家都知道运行JAVA程序,会先将源文件变成字节码文件,然后JVM会加载字节码文件,将其存入内存空间中,之后进行一系列的初始化动作,最后运行程序得出结果。 那么字节码数据在JVM内存中是如何存放?JVM在为类实例或者成员变量分配内存是如何分配的?这些都需要我们了解以下JVM的内存结构。 内存结构其实 阅读全文
posted @ 2022-08-31 08:47 梅晓煜 阅读(97) 评论(0) 推荐(0)
摘要:有时候面试的时候,会遇到给你一串代码,里面有很多打印语句,让你说出打印的顺序其实就是在考察JVM 类加载机制。 JVM 虚拟机执行 class 字节码的过程可以分为七个阶段:加载、验证、准备(重点)、解析、初始化(重点)、使用、卸载。 这里最后会给出例子,现在先讲下这几个过程。 加载 官方描述: 加 阅读全文
posted @ 2022-08-30 14:49 梅晓煜 阅读(130) 评论(0) 推荐(0)
摘要:闲来无事,开始重新学习JVM相关知识,不定时更新。 我这个人学习任何东西,都要比别人多学几次,才能牢固的记住,可能跟我的学习方式有关。每次重新学习,都能带来不同的认识,扫除之前的一些盲区。 阅读全文
posted @ 2022-08-25 09:18 梅晓煜 阅读(30) 评论(0) 推荐(0)