随笔分类 - Java
摘要:java的类加载机制 概要 Class文件是Java 编译器(如 javac)将 Java 源代码(.java 文件)编译而生成的。编译器将 Java 代码转换成字节码,存储在 Class 文件中,Class 文件需要加载到虚拟机中之后才能运行和使用。 JVM 需要将编译后的字节码文件加载到其内部的
阅读全文
摘要:常见的JVM调优参数和应用场景 概要 JVM调优可以显著提升Java应用性能,减少响应时间和垃圾回收停顿,优化内存使用,降低内存溢出风险,并提高资源利用率。 以下是一些常用的JVM参数和应用场景的介绍。 一、堆内存设置 -Xms<size> 和 -Xmx<size>:设置初始堆大小和最大堆大小。 1
阅读全文
摘要:SpringBoot系列 - 启动原理(下) 从上一篇文章《SpringBoot系列-启动原理(上)》中,介绍了SpringBoot应用启动的核心方法run()的整体情况。这篇文章来详细展开介绍。其中比较重要的方法会标记上*** 一、createBootstrapContext *** Defaul
阅读全文
摘要:Spring中Aware接口原理 在Spring中存在一个Aware接口,实现该接口可以让我们的Bean获取到Spring容器中特定的资源,但该接口只是个标记接口,不存在任何方法,因此我们还需要继承Aware来做特定资源获取的实现。 换句话说:只要实现了Aware子接口的Bean都能获取到一个Spr
阅读全文
摘要:SpringBoot 使用策略+工厂模式的几种实现方式 一、 方式一:结合 @PostConstruct 实现 @PostConstruct 注解是用来在 Spring 管理的 bean 初始化后立即执行某些方法。 这里通过 @PostConstruct 注解将各种实现类初始化之后加入到策略类集合M
阅读全文
摘要:SpringBoot系列 - 自动装配 概要 自动装配:通过注解或者一些简单的配置就能在 Spring Boot 的帮助下实现某块功能。 我们现在提到自动装配的时候,一般会和 Spring Boot 联系在一起。但是,实际上 Spring Framework 早就实现了这个功能。Spring Boo
阅读全文
摘要:SpringBoot系列- SPI机制 概要 什么是SPI呢,全称是 Service Provider Interface 。简单翻译的话,就是服务提供者接口,是一种寻找服务实现的机制。这个是针对厂商或者插件的。 其实就是一个规范定义、或者说是实现的标准。 一、SPI的核心思想 SPI的核心思想是模
阅读全文
摘要:SpringBoot-事件监听机制 概要 在 Spring Boot 中,事件(Event)是一种在应用程序中用于通知和响应状态或动作变化的机制。 通过事件机制,不同的组件可以松散耦合地协作,实现模块化和可扩展的应用程序架构。事件的作用在于提供了一种解耦的方式,使得应用程序的不同部分能够相互通信和交
阅读全文
摘要:SpringBoot-启动原理(上) 概要 Spring Boot是建立在Spring框架之上的微服务框架,旨在简化Spring应用的开发过程。与传统的Spring应用相比,Spring Boot采用约定优于配置的原则,通过提供默认配置和快速开发的特性,大大减少了开发者的工作量。Spring Boo
阅读全文
摘要:字符串常量池 概要 字符串常量池 是 JVM 为了提升性能和减少内存消耗,针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建。 一、内存区域 1)JDK1.7之前 运行时常量池(字符串常量池也在里边)是存放在方法区,此时方法区的实现是永久代。 2)JDK1.7 字符
阅读全文
摘要:IDEA 字节码工具 jclasslib bytecode viewer 1. 下载安装 首先我们在 IDEA 的插件市场中搜索 jclasslib bytecode viewer 和进行下载安装,安装过后根据 IDEA 版本的不同,可能需要重启才能使用。 2. 使用 下载安装过后,在我们的项目中,
阅读全文
摘要:Spring容器系列-bean的生命周期 概要 对于Spring Bean的生命周期来说,可以分为四个阶段,其中初始化完成之后,就代表这个Bean可以使用了,四个阶段如下: 实例化 Instantiation : 为Bean分配内存空间 属性赋值 Populate :将当前类依赖的Bean属性,进行
阅读全文
摘要:Spring容器系列-启动原理 Spring 具有非常庞大的体系,但无论多大都是由一个个小的模块组合而来,不管是 SpringMVC 还是 SpringBoot,都是在Spring的基础上延伸而来,因此,看源码要找对方向。 我们知道,在SpringBoot之前,对象的管理和配置都是通过XML的方式来
阅读全文
摘要:Spring基础 - Spring核心之控制反转(IOC) 概要 我们知道,Spring提供的容器又称为IoC容器。其实,IoC(Inversion of control )不是 Spring 提出来的,它们在 Spring 之前其实已经存在了,只不过当时更加偏向于理论。Spring 在技术层次将这
阅读全文
摘要:静态代理和动态代理 一、什么是代理模式? 代理模式(Proxy Pattern)给某一个对象提供一个代理,并由代理对象控制原对象的引用。代理对象在客户端和目标对象之间起到中介作用。 代理模式可以分为静态代理和动态代理两种类型,而动态代理中又分为JDK动态代理和CGLIB代理两种。 如下图: 二、静态
阅读全文
摘要:操作系统线程和Java线程的状态 一、操作系统线程的状态 操作系统的线程主要有以下三个状态 1. 就绪状态(ready):线程正在等待使用 CPU,经调度程序调用之后进入 running 状态。 2. 执行状态(running):线程正在使用 CPU。 3. 等待状态(waiting): 线程经过等
阅读全文
摘要:什么是Java内存模型(JMM)? 概要 Java内存模型(JMM)是Java虚拟机并发知识中很重要的一部分,为了更好的理解它。我们先花费一点时间去了解物理计算机中的并发问题。物理机遇到的并发问题与虚拟机中的情况有很多相似之处,物理机对并发的处理方案对虚拟机的实现也有相当大的参考意义。 一、硬件内存
阅读全文
摘要:配置动态刷新@RefreshScope引起的取值为null 在Spring Cloud Config 动态刷新demo编写中,分为三个步骤: 1)git端配置更改,代码提交 2)手动刷新配置: POST请求: http://localhost:3355/actuator/refresh 3)客户端访
阅读全文
摘要:Java并发编程之CAS原理分析 背景 在高并发场景下,多线程访问共享资源经常会引发并发安全问题,如竞态条件(Race Condition)。JDK5之前通常使用 synchronized 或 Lock 实现同步,但这些互斥锁较为重量级,会带来性能损耗。 对于某些场景,可以利用 JUC 提供的 CA
阅读全文
摘要:散列表 概要 散列表也叫哈希表(hash table),是存储Key-Value映射的集合。对于某一个Key,散列表可以在接近O(1)的时间内进行读写操作。 散列表在本质上也是一个数组,可以根据下标,进行元素的随机访问。 下面这个table就是散列表: 一、散列表的一些基本概念 1. 哈希函数 散列
阅读全文