自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yinweicheng的博客

如有错误,敬请指正,我会修改的

  • 博客(52)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 JDK10 GC新特性,到底能带来多大提升?

本文介绍了JDK9和JDK10在垃圾收集(GC)方面的改进,包括统一日志格式(JEP 214)、G1并发Full GC(JEP 304)和Parallel GC的TLAB优化(JEP 307)。JDK10进一步优化了G1的分代晋升效率,并引入了实验性ZGC。相较于JDK8,新版GC在日志管理、并发性能和监控能力上显著提升。文章还通过Visual VM的对象直方图功能,展示了如何分析对象年龄分布,结合GC日志参数优化内存管理。

2025-06-09 10:00:00 1546

原创 摸鱼神器:AI打造的博客IDEA插件

本文分享了从零开发IntelliJ IDEA博客助手插件(orange-tech)的全过程。该插件通过Swing组件实现博客文章的结构化预览和导航,利用JBCefBrowser加载HTML文章内容,并创新性地集成了AI气泡对话功能。开发过程中解决了API数据解析、跨平台UI渲染、Markdown转HTML等技术难题。文章详细介绍了Gradle打包方案的迭代优化过程,最终采用distribution插件实现稳定发布,并配置GitHub Actions实现了自动化构建发布流程。作者还分享了如何借助AI工具加速开

2025-05-30 10:00:00 569

原创 冷知识:Java -version发生了哪些变化?

JEP 223 和 JEP 322 体现了 Java 生态对现代化、自动化运维和版本管理的持续改进。对于开发者而言,理解版本号背后的语义,有助于更精准地选择、升级和调试 JDK 版本,也有助于构建更健壮的工具链和系统。同时,随着Java版本的不断演进,未来或许还会出现新的版本号提案与变更。开发者应持续关注官方文档与社区动态,及时掌握最新变化,从而更好地应对开发过程中可能出现的版本适配等问题。如果你对版本号策略还有疑问,欢迎留言交流!

2025-05-26 10:00:00 606

原创 Java访问HTTPS失败?看懂根证书支持与配置

下面用流程图对比一下JDK 10 之前与JDK 10 及以上版本在访问 HTTPS 地址时,证书验证和连接建立的关键步骤差异。JEP 319 虽然是一项“看不见”的增强,但对 Java 应用连接现代互联网 HTTPS 服务来说意义重大。它简化了证书管理流程,减少了很多因“不受信任证书”导致的连接失败问题。但与此同时,我们也要意识到,JDK 的选择直接影响到你的应用能否顺利访问 HTTPS 服务。如果你还在使用 JDK 8,建议尽快升级,享受更完整的 TLS 支持和安全能力。

2025-05-17 19:52:53 714

原创 玩转 Java 国际化:进击的Locale!

Locale使用场景示例技术/类说明国际化文本通过不同 Locale 加载不同语言资源格式化显示本地化的日期、时间、数字、货币多语言 UI根据 Locale 显示不同文本内容排序与比较Collator根据语言规则进行字符串排序与匹配默认偏好设置决定默认显示语言和格式。

2025-05-11 22:52:31 1032

原创 并发编程太难写?这些新方法救了我

JEP 266带来的新特性,不仅让异步编排变得更加简洁和标准化,还提高了代码的可维护性和性能。通过使用 orTimeout、Flow API等新方法,我们能够更加方便地管理异步任务、错误处理以及超时控制。如果你还没有使用这些新特性,建议从简单的 orTimeout和 Flow API开始,逐步提升你的异步编排能力。相信你会发现,异步编排再也不需要那么痛苦了!🎉想了解更多 JDK 新特性,提升开发效率?欢迎关注我的专栏👉 JDK 新特性专栏!一起来变得更强大吧 🚀。

2025-04-26 23:43:14 838

原创 Spring Framework 5.3 → 6.3全栈升级指南

强制使用6.3+需要云原生特性:GraalVM原生镜像+可观测性使用Java 17+新特性:Records/Pattern Matching。

2025-04-19 00:32:23 1190

原创 为什么IDEA不建议使用append拼接字符串?

拼接方式是否创建新对象是否适合循环性能String +是(每次)否差否(复用)是优所以如果是在写性能敏感的代码,或者涉及循环拼接字符串,java推荐用或(线程安全)。特性Java 8StringJava 9+ 紧凑字符串存储结构char[]每个字符内存2 字节1 字节(LATIN1)或 2 字节(UTF-16)内存利用率固定开销动态节省性能正常持平或略优向后兼容✅✅如果你正在开发高并发应用、微服务或内存敏感系统,

2025-04-19 00:28:56 1104

原创 探究分布式哈希算法:哈希取模与一致性哈希

哈希取模(Hash Modulo),堪称一种简洁明了的分布式哈希算法。其核心原理便是借助哈希函数算出键的哈希值,即 hash(key),接着将该哈希值对节点数量取模,也就是 hash(key) % N,如此一来,所得结果便是数据应存放的节点编号,最终数据就稳稳地存储在对应编号的节点上。通过对哈希取模和一致性哈希的详细介绍,我们清楚地看到了它们各自的优缺点和适用场景。

2025-04-06 17:45:57 624

原创 你的AI我的AI好像不一样~深入了解prompt

Prompt是指输入给AI模型的指令或问题,用于引导模型生成特定的输出。它可以是一个简单的问题、一个复杂的任务说明,或者一系列的指令。有效的prompt能够帮助AI更好地理解用户的需求,从而生成相关性更强、准确性更高的内容。关于prompt的概念,它并没有一个特定的提出者或明确的提出时间,而是随着自然语言处理和深度学习技术的发展逐渐演变而来的。最早的AI模型使用简单的指令,而随着模型能力的增强,prompt的复杂性和灵活性也不断提升。

2025-03-29 01:12:59 1044

原创 Java 高效日志管理:如何优化 Logback 和 SLF4J 的性能?

SLF4J 采用的日志门面模式将日志使用和实现分离。logger . info("执行某项操作");} }logger . info("执行某项操作");} }Logger;import orglogger . info("执行某项操作");} }logger.info("执行某项操作");这种方式让代码与具体日志实现解耦,若后续需从 Logback 切换到 Log4j2 等框架,仅调整依赖配置即可,无需大规模修改业务代码,降低维护成本。

2025-03-22 18:56:36 928

原创 META-INF文件夹详解

需要注意的是,META-INF文件夹的位置应该在项目的classpath根目录下。不,META-INF文件夹不是Spring项目特有的,它是Java项目中常见的一个目录,用于存放一些元数据和配置文件。它在很多Java框架和工具中都得到了广泛的应用,如Java数据库连接(JDBC)的驱动加载、日志框架的实现类加载、dubbo框架中的类加载等。在Java开发中,META-INF目录的作用是为各种框架和工具提供一种统一的约定和扩展机制,用于管理项目的元数据、配置文件和资源文件等。

2025-02-22 20:09:58 1055

原创 Mybatis和Spring源码解析

内容实在太多,不在做搬运,本人原文:https://shiker.tech/s/yuan-ma-jie-xi-xi-lie。最近看代码总结了一下,各位朋友可以看看是否更便于理解了。

2023-06-10 10:18:56 156

原创 maven拆分ssh项目之文件通配符

今天用maven对之前做过的一个springMVC+spring+hibernate项目进行了拆分,在拆分时文件通配符这个东西弄的有点儿懵。。。经过几个小时的调试,终于将通配符弄明白了,话不多说,先看项目目录:雷区一-----spring中的classpath将ssh项目拆分时,spring的配置文件也随之进行拆分。但是spring中依赖的个properties、xml文件依旧在子项目中,因此不需...

2022-01-23 23:51:18 351

原创 理解和对比BIO、NIO、AIO的特性

示例代码:https://gitee.com/shiker/Stream同步阻塞式--BIO一个客户端(连接)对应一个线程,只有一个服务线程为每个连接分配处理线程缺点:缺乏弹性伸缩能力,服务端与客户端并发访问数呈1:1的正比关系,并发访问量过大,系统会产生线程堆栈溢出,创建新线程失败的问题,导致宕机或者僵死,不能对外提供服务。核心代码实例:TimeServerTimeServerHandler:T...

2022-01-23 23:51:10 474

原创 spring整合hibernate获取currentSession

首先,在spring中配置hibernate的数据源和sessionfactory工厂<!-- 配置组件扫描器 --> <context:component-scan base-package="edu.hrbeu" /> <!--扫描配置文件(这里指向的是之前配置的那个config.properties) --> <context:prop...

2022-01-23 23:50:58 1292

原创 jvm运行时数据区与内存管理机制

提纲运行时内存区域 1.程序计数器 1. 当前线程所执行的字节码的行号指示器。 2. 如果线程郑在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是native方法,这个计数器的值则为空。 3. 此内存区域是唯一一个在Java虚拟机规范中没有定义任何out of memory情况的区域 2. Java虚拟机栈 1. 每个方法在执行时都会创...

2022-01-23 23:50:48 249 2

原创 自己动手在Cent OS6.9上编译OPENJDK

之前看jvm的时候就尝试编译一下jdk(为什么要自己编译openjdk呢,一方面可以帮助我们了解jvm的运行机制,另一方面我们可以得到jdk的debug版本,而debug版本的调试工具更丰富),但是时间有限,没成功之后也没再管(考试周。。。==||),今天终于有时间把这个坑补上了。看网上都是ubuntu上编译的jdk,为了不雷同,就换个环境吧。没想到换了个环境之后各种坑都有遇上了,实际上并不一帆风...

2022-01-23 23:50:29 361

原创 jvm垃圾收集器与内存分配策略

提纲判断对象的存活状态垃圾收集主要区域:Java堆和方法区。因为只有在程序运行时才能知道创建哪些对象,所以这部分的内存分配和回收都是动态的。1.引用计数算法:定义:给对象添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数器值就减1;任何时候计数器为0的对象是不可能在被使用的。 优点:实现简单,判定效率高。 缺点:很难解决对象之间相互循环引用的问...

2022-01-23 23:50:19 312 1

原创 JVM故障诊断与性能优化--运行时数据区(一)

Java对象之家--Java堆java堆一般被分为新生代和老年代。其中新生代存放新生对象,老年代存放老年对象(年龄判断见深入理解jvm二),新生代有可能分为eden区,s0区,s1区,s0和s1区也被称为from区和to区,他们是两块大小相等、可以互换角色的内存空间(实际上是为了进行垃圾回收,即复制算法)。下面通过示例展示java堆、方法区、java栈之间的关系:public class Simp...

2022-01-23 23:49:47 399

原创 esplise更新maven报错java.lang.UnsupportedClassVersionError: PR/Sort : Unsupported major.minor version 52

当点击maven进行更新(主要是war工程)时,有时会遇到下面异常:原因:maven默认使用jdk1.5进行项目编译,而我们所需要的jar或者tomcat需要更高版本的jdk,也就是说maven默认的环境达不到项目要求。此处的原因是因为工作环境默认选择用jdk1.8(52.0)进行编译,而spring版本不支持1.8,所以出现错误解决方法:在maven仓库的配置文件(conf/setting.xm...

2022-01-23 23:49:34 310

原创 springboot整合ssm项目纪实

昨天学完了springboot,感觉没什么困难,好多东西都是spring简化来的,今天于是就上手将自己之前写过的一个spring项目进行改进,改进到springboot项目,没想到还是遇到各种突发bug。哎,还是写一些,让后人少采坑吧。注意:我的maven编译是jdk1.8,注意修改!!详情戳:https://blog.csdn.net/yinweicheng/article/details/...

2022-01-23 23:49:23 799

原创 JVM故障诊断与性能优化--jvm参数了解(二)

跟踪垃圾回收和类加载信息1.跟踪垃圾回收示例---读懂日志:package chapter3;/** * 创建实例,演示垃圾回收,进行4次minorGC * * @author shiker * 预设参数:-verbose:gc -Xms20M -Xmx20M(设置堆容量为20M) -Xmn10M(新生代容量10M) -XX:SurvivorRatio=8(survivor占比8:...

2021-12-18 21:29:31 653

原创 虚拟机性能监控与故障处理

提纲JDK的命令行工具1.进程状况查看工具jps -l输出主类的全名 Jps -q省略主类的名称 Jps -m输出进程启动时传递给主类main()函数的参数 Jps -v输出进程启动时jvm的参数2.虚拟机统计信息监视工具jstat [ option vmid [interval(查询间隔)[s|ms] [count(次数)]] ]例:C:\U...

2021-12-18 21:29:13 467

原创 JVM故障诊断与性能优化--垃圾回收概念与算法(三)

认识垃圾回收垃圾:指的是存在于内存中的、不会再使用的对象。如果垃圾不会收会占用大量内存导致内存溢出。常用的垃圾回收算法1.引用计数法只要有其它对象引用了此对象,该对象的引用计数器+1,当引用失效时计数器-1。当计数值为0时,对象就可能不再使用。缺点:无法处理循环引用的情况,加法操作和减法操作对系统性能有影响。2.标记清除法标记阶段,首先通过根节点,标记所有根节点...

2021-12-18 21:28:57 158

原创 JVM调优分析与实战

提纲案例分析1. 高性能硬件上的部署策略 在高性能硬件上部署程序,目前主要有两种方式: 通过使用64位JDK来使用大内存 使用若干个32位虚拟机建立逻辑集群来利用硬件资源。使用64位JDK来使用大内存的缺点:1. 内存回收导致的长时间停顿2. 现阶段,64位JDK的性能测试效果普遍低于32位JDK3. 需要保证程序足...

2021-12-18 21:28:42 269

原创 JVM故障诊断与性能优化-垃圾收集器与内存分配(四)

1.垃圾收集器相关概念见:深入理解jvm--垃圾收集器与内存分配策略(二)垃圾收集器的开关 参数 新生代使用的GC 老年代使用的GC -XX:+UseSerialGC serialGC serialOldGC -XX:+UseParNewGC ...

2021-12-18 21:28:21 423

原创 JVM故障诊断与性能优化-性能监控工具(五)

Linux下的性能监控工具1.显示系统整体资源使用情况-top命令2.监控内存和CPU-vmstat命令vmstat 1 3示例1--使用vmstat查看java程序占用内存情况package chapter6;import java.util.Random;//去package名放入linux中运行public class HoldLockMa...

2021-12-18 21:28:08 183

原创 反射、内省与动态代理

反射:jdk中关于对java.util.reflect的叙述:提供类和接口,以获得关于类和对象的反射信息。在安全限制内,反射允许编程访问关于加载类的字段、方法和构造方法的信息,并允许使用反射字段、方法和构造方法对其底层对等项进行操作。Class类没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。Method...

2021-12-18 21:27:54 204

原创 jvm类文件结构

提纲无关性的基石字节码构成了平台无关性的基石虚拟机和字节码存储形式是语言无关性的基础Class文件的结构无符号数:属于基本的数据类型,以u1、u2、u4、u8来分别代表一个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用描述数字、索引应用、数量值或者按照UTF-8编码构成字符串值。表:是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表都习惯性地以...

2021-12-18 21:27:36 129

原创 jvm类加载机制

提纲类加载的时机类的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。加载、验证、准备、初始化和卸载顺序确定。虚拟机规范严格规定了有且只有5种情况必须立即对类进行初始化:1. 遇到new、getstatic、putstatic或invokestataic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这四条指令最常见的代码场景是:使...

2021-12-18 21:27:24 126

原创 jvm字节码执行引擎

提纲运行时栈帧结构栈帧是用于支持虚拟机进行方法调用个方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始到执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。对于执行引擎来说,在活动线程中,只有位于栈顶的栈帧才是有效的,成为当前栈帧,与这个栈帧相关联的方法称为当前方法。执...

2021-12-18 21:26:49 351

原创 jvm类加载与执行子系统

提纲案例tomcat:正统的类加载器结构web服务器要解决的问题:部署在同一个服务器上的两个web应用程序所使用的java类库可以实现相互隔离。部署在同一个服务器上的两个web应用程序所使用的java类库可以实现共享。服务器需要尽可能的保证自身的安全不受部署的web应用程序影响。支持jsp应用的web服务器,大多数需要支持hotspot功能。java类库放置在t...

2021-12-15 23:09:59 220

原创 jvm类的早期优化

提纲概述java编译器分类:前端编译器:把*.java文件转变成*.class文件的过程后端运行期编译器(JIT编译器):把字节码转变成机器码的过程静态提前编译器(AOT编译器):把*.java文件编译成本地机器码的过程javac编译器编译过程:解析与填充符号表词法分析:将原代码的字符流转变为标记(Token)集合。程序编写的最小元素是单个字符,编译过程的最小元素是标记。关键字、变量名...

2021-12-15 23:09:47 131

原创 jvm晚期优化

提纲即时编译器解释器与编译器解释器优点:解释执行节约时间编译器优点:编译执行提高效率即时编译器:将热点(运行频繁的)代码编译成与本地平台相关的机器码,并进行各层次的优化。完成这个任务的编译器成为即时编译器。hotspot虚拟机内置两个即时编译器,client compiler和server compiler,简称为C1编译器和C2编译器。hotspot会根据自身版本与宿主机的性能自行选择运行模式。...

2021-12-15 23:09:33 149

原创 java内存模型

提纲Java内存模型设计规则:这个模型必须定义的足够严谨,才能让java 的并发访问操作不会产生歧义,也必须定义的足够宽松,使虚拟机有足够的自由空间去利用硬件的各种特性来获取更好的执行速度。主内存与工作内存Java内存模型的主要目标时定义程序中各个变量的访问规则,即在虚拟机中将变量(不包括局部变量和方法参数)存储到内存和从内存中取出变量这样的底层细节。Java内存模型规定了...

2021-12-15 23:09:15 155

原创 线程安全与锁优化

提纲、1. 锁的基本概念和实现线程安全面向过程的编程思想:把数据和过程分别作为独立的部分来考虑,数据代表问题空间中的客体,程序代码则用于处理数据。面向对象的编程思想:站在现实世界的角度去抽象和解决问题,把数据和行为都看做是对象的一部分。当多个线程访问一个对象时,如果不用考虑这些线程在运行环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其它的协调操作,调用...

2021-12-15 23:09:01 284

原创 通过dubbo对ssh进行整合

最近学完了maven和dubbo,在将之前的项目进行整合拆分成maven+dubbo的时候,遇到了很多麻烦,在这里将步骤粗略的写一下。以方便其他人或者日后在遇到此类问题。由与篇幅较长,本片先写maven拆分子项目。项目demo:https://gitee.com/shiker/bookstore整合后的项目(maven拆分+dubbo):https://gitee.com/shiker/b...

2021-12-15 23:08:40 333

原创 jvm故障诊断与性能优化(六)--分析Java堆

找到内存溢出的原因1.堆溢出当对象的大小之和大于由Xmx指定的堆空间大小时,会发生溢出错误。示例1--堆溢出(8G内存环境下)public class SimpleHeapOOM { public static void main(String[] args) { ArrayList<byte[]> list = new ArrayList<byte...

2021-12-15 23:08:20 553 1

原创 AOP的底层实现--ASM

在ASM的核心组件中,Opcodes接口定义了一些常量,尤其是版本号、访问标识符、字节码等信息。ClassReader用于读取Class文件,它的作用时进行Class文件的解析,并可以接受一个ClassVisitor,ClassReader会将解析过程中产生的类的部分信息,比如访问提示符、字段、方法逐个送入ClassVisitor,Class Visitor在接受到对应的类信息后,可以进行各自的处...

2021-12-15 23:08:07 374

mybatis离线说明文档

mybatis说明文档

2017-08-17

eclipse启动时间源码

sclipse启动时间源码,java虚拟机调优时用到,方便学习

2018-01-15

eclipse启动时间插件

eclipse启动时间插件,可查看eclipse启动时间,放到plugins里即可

2018-01-15

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

TA关注的人

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