![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 86
黑风风
这个作者很懒,什么都没留下…
展开
-
常用的JVM参数介绍
Java虚拟机(JVM)参数在调优和配置Java应用程序的运行环境中起着至关重要的作用。合理配置JVM参数可以提高应用程序的性能和稳定性。本文将介绍一些常用的JVM参数及其作用。原创 2024-08-08 08:00:00 · 731 阅读 · 0 评论 -
SpringBoot 过滤器和拦截器的区别
Spring拦截器(Interceptor)和过滤器(Filter)是Spring框架中用于处理请求的两种机制,虽然它们都可以在请求处理的不同阶段进行拦截和处理,但它们的工作原理和应用场景有所不同。以下是它们的主要区别:原创 2024-06-23 08:15:00 · 765 阅读 · 0 评论 -
什么是循环依赖?
循环依赖(Circular Dependency),也称为循环引用,是指两个或多个Bean之间相互依赖,形成一个环状依赖链。例如,Bean A依赖于Bean B,而Bean B又依赖于Bean A,这就形成了一个简单的循环依赖。原创 2024-06-23 08:00:00 · 768 阅读 · 0 评论 -
了解Spring的BeanPostProcessor
Spring框架提供了一种机制,允许在Spring容器实例化Bean之前和之后进行自定义的修改。这个机制就是`BeanPostProcessor`接口。`BeanPostProcessor`是Spring的核心接口之一,用于在Spring容器创建和初始化Bean的过程中进行干预和自定义处理。原创 2024-06-22 08:15:00 · 936 阅读 · 0 评论 -
Spring Bean 生命周期详解
在 Spring 框架中,Bean 的生命周期由 Spring 容器全权管理。了解和掌握 Bean 的生命周期对于使用 Spring 开发稳定且高效的应用程序至关重要。本文将详细介绍 Spring Bean 生命周期的五个主要阶段:实例化、属性注入、初始化、使用和销毁,并涵盖各个阶段的关键步骤和扩展点。原创 2024-06-22 08:00:00 · 1445 阅读 · 0 评论 -
理解Spring Bean的作用域
在Spring框架中,Bean的作用域决定了Bean的生命周期及其可见性。Spring提供了几种不同的Bean作用域,以便开发人员根据特定的应用程序需求来管理Bean的创建和使用。本文将详细介绍Spring Bean的各种作用域,包括它们的特点和适用场景。原创 2024-06-21 08:15:00 · 1085 阅读 · 0 评论 -
synchronized(this) 写法的利弊分析
`synchronized` 关键字用于同步代码块,以确保在同一时间只有一个线程可以执行该代码块。`synchronized(this)` 是一种特殊的用法,它使用当前对象实例 (`this`) 作为锁。原创 2024-06-21 08:00:00 · 358 阅读 · 0 评论 -
了解Java并发同步框架:AQS(AbstractQueuedSynchronizer)
AQS(AbstractQueuedSynchronizer)是Java并发编程中一个重要的同步框架,提供了一个实现锁和其他同步器的基础。它通过FIFO队列来管理线程的争用,为开发者提供了便捷且高效的工具来实现自己的同步器,如ReentrantLock, CountDownLatch等。原创 2024-06-20 08:15:00 · 790 阅读 · 0 评论 -
了解ForkJoin框架
Fork/Join框架是Java 7引入的一种并行处理框架,用于有效地利用多处理器系统的计算资源。该框架通过将大任务拆分成多个子任务,并行处理这些子任务,最终将子任务的结果合并,以提高程序的执行效率。本文将介绍Fork/Join框架的基本概念、工作原理及其应用场景。原创 2024-06-20 08:00:00 · 498 阅读 · 0 评论 -
了解Java的CAS操作
CAS(Compare-And-Swap)是一种原子操作,用于实现无锁(lock-free)并发编程。它的主要作用是在多线程环境下保证数据的一致性。CAS操作比较某个内存位置的当前值是否与预期值相等,如果相等,则更新为新值,否则不做任何操作。原创 2024-06-19 08:15:00 · 534 阅读 · 0 评论 -
深入了解Java的CopyOnWriteArrayList类
在Java的并发编程中,`CopyOnWriteArrayList`类是一个特殊的列表实现,旨在提供一种线程安全的读操作无锁并发访问。这种实现的基础理念是在写操作时创建一个新的数组副本,从而使得读操作不会被写操作阻塞或影响。本文将详细探讨`CopyOnWriteArrayList`的工作原理、使用场景以及其优缺点。原创 2024-06-18 09:24:26 · 483 阅读 · 0 评论 -
Java阻塞队列:DelayQueue
在Java的并发编程中,阻塞队列是一种非常有用的数据结构,它不仅提供了线程安全的队列操作,还在必要时会自动阻塞获取操作,直到队列变得不为空。本文将重点介绍一种特殊的阻塞队列——`DelayQueue`,它在处理带有延迟时间的元素方面非常有用。原创 2024-06-18 09:22:49 · 340 阅读 · 0 评论 -
Java阻塞队列:PriorityBlockingQueue
在Java的并发编程中,阻塞队列是一种非常重要的数据结构。它不仅能在多线程环境下安全地进行数据交换,还能在需要时自动阻塞或唤醒线程。本文将详细介绍阻塞队列中的一种重要实现——`PriorityBlockingQueue`。原创 2024-06-17 09:13:52 · 559 阅读 · 0 评论 -
了解Java的LinkedBlockingQueue
`LinkedBlockingQueue`是一个基于链接节点的有界阻塞队列。它实现了`BlockingQueue`接口,可以在多线程环境中安全地进行插入、移除和检查操作。`LinkedBlockingQueue`的容量可以在创建时指定,如果未指定,则默认容量为Integer的最大值。原创 2024-06-17 09:13:08 · 1037 阅读 · 0 评论 -
Java阻塞队列:ArrayBlockingQueue
`ArrayBlockingQueue`是Java中的一个阻塞队列(Blocking Queue)实现,它是线程安全的,并且基于数组实现。`ArrayBlockingQueue`常用于生产者-消费者模型,在这种模型中,生产者线程负责将元素放入队列,而消费者线程负责从队列中取出元素。原创 2024-06-16 11:49:48 · 410 阅读 · 0 评论 -
Java线程池的抛弃策略
Java线程池是Java并发编程中非常重要的一个组件。它通过重用已创建的线程来减少线程创建和销毁的开销,从而提高应用程序的性能和响应速度。然而,当线程池中的任务数量超过其处理能力时,就需要一种机制来处理新提交的任务,这就是线程池的抛弃策略。原创 2024-06-16 11:14:37 · 612 阅读 · 0 评论 -
深入理解ReentrantLock
在Java并发编程中,锁(Lock)是控制多个线程对共享资源访问的重要工具。虽然`Synchronized`关键字是实现锁的常用方式,但它在功能上比较有限。`ReentrantLock`是`java.util.concurrent.locks`包中提供的一个更加灵活和强大的锁实现,它是一个可重入的互斥锁,它允许线程在获取锁之后再次获取该锁而不被阻塞。简单来说,如果一个线程已经持有了一个锁,再次请求获取该锁时,它可以成功获取而不会被阻塞。原创 2024-06-15 12:03:21 · 417 阅读 · 0 评论 -
深入学习Java `synchronized` 关键字
`synchronized`关键字通过确保在同一时间只有一个线程可以执行某个代码块,从而防止多个线程同时访问共享资源时发生数据不一致的问题。原创 2024-06-15 12:02:40 · 402 阅读 · 0 评论 -
学习Java中的Future类
在Java中,异步编程是一种常见且强大的编程模式,它允许程序在等待一个任务完成的同时继续执行其他任务。`Future`类是Java中的一种机制,用于表示异步计算的结果。在这篇文章中,我们将深入探讨Java中的`Future`类,了解它的使用方法及其在并发编程中的重要性。原创 2024-06-14 08:00:00 · 411 阅读 · 0 评论 -
学习理解 CompletableFuture
`CompletableFuture` 是 Java 8 引入的一个强大的工具,它使得编写异步和并行代码变得更加容易。`CompletableFuture` 是 `java.util.concurrent` 包的一部分,是 `Future` 的扩展,它不仅允许你手动完成计算,还提供了一套丰富的 API 来支持异步编程。与传统的 `Future` 不同,`CompletableFuture` 提供了非阻塞的方式来获取结果,并且可以链式调用和组合多个异步任务。原创 2024-06-14 08:30:00 · 1850 阅读 · 0 评论 -
JVM性能优化案例:减少对象频繁创建
某金融应用系统在处理大量并发交易时,响应时间过长,并且有时出现内存溢出(OutOfMemoryError)的问题。经过分析,发现问题主要出在频繁的对象创建和较差的内存管理上。原创 2024-06-13 10:17:59 · 684 阅读 · 0 评论 -
JVM性能优化案例:优化垃圾回收器的年轻代和老年代占比
从GC日志中可以看到,年轻代GC的频率较高,而老年代GC的频率较低。这表明当前配置下年轻代内存空间可能较小,导致频繁的年轻代GC。这种频繁的GC会影响系统的吞吐量和响应时间。我们有一款在线交易系统,要求低延迟和高吞吐量。系统运行在Ubuntu服务器上,使用OpenJDK 11,并启用了G1垃圾回收器。通过增加年轻代内存空间,可以减少年轻代GC的频率,从而提升系统性能。合理设置GC暂停时间目标,确保系统在低延迟和高吞吐量之间取得平衡。利用多核CPU资源,增加GC并发线程数,加快GC过程。原创 2024-06-13 10:17:16 · 654 阅读 · 0 评论 -
JVM产生FullGC的原因有哪些?
在Java虚拟机(JVM)中,垃圾回收(Garbage Collection,简称GC)是一个非常重要的机制。GC的目的是自动管理内存,回收不再使用的对象,防止内存泄漏。在JVM中,Full GC是一种比较昂贵的操作,它会暂停应用程序的执行(Stop-the-World),对所有的堆内存进行垃圾回收。因此,了解产生Full GC的原因,对于优化Java应用的性能至关重要。本文将详细探讨JVM产生Full GC的几种主要原因。原创 2024-06-12 12:43:17 · 1019 阅读 · 0 评论 -
双亲委派模型是什么,为什么要使用双亲委派模型
在Java中,类加载器(ClassLoader)是负责将类文件加载到JVM中的关键组件。为了确保类加载过程的安全性和稳定性,Java引入了一种叫做双亲委派模型(Parent Delegation Model)的机制。这篇文章将介绍什么是双亲委派模型,以及为什么要使用这种模型。原创 2024-06-12 12:42:07 · 1621 阅读 · 0 评论 -
JVM 类加载器的工作原理
Java 虚拟机(JVM)的类加载器是 JVM 体系结构中的一个重要组件,它负责动态加载 Java 类到内存中。类加载器的工作原理涉及几个关键步骤和概念。本文将详细介绍 JVM 类加载器的工作原理。原创 2024-06-11 15:09:40 · 1160 阅读 · 0 评论 -
介绍JVM的JIT编译器
Java虚拟机(JVM)是Java编程语言的基础,它使Java程序能够在各种平台上运行。为了实现这一目标,JVM将Java字节码转换为机器代码。JIT编译器(Just-In-Time Compiler,即时编译器)是JVM中的一个重要组件,它在程序运行时将字节码动态编译为本地机器代码,从而提高程序的执行效率。原创 2024-06-11 10:35:26 · 460 阅读 · 0 评论 -
理解 Java 中的 `final` 关键字
`final` 关键字是 Java 编程语言中一个重要的修饰符,它可以应用于类、方法和变量。理解 `final` 的用法和作用对于编写稳健和高效的 Java 代码至关重要。在本文中,我们将深入探讨 `final` 关键字的各种用法及其意义。原创 2024-06-10 10:41:38 · 512 阅读 · 0 评论 -
理解JVM内存模型与Java内存模型(JMM)
在Java程序的运行过程中,内存管理和线程的同步是两个重要的概念。本文将深入探讨JVM内存模型(Java Virtual Machine Memory Model)和JMM(Java Memory Model),以及它们之间的联系和区别。原创 2024-06-08 13:32:41 · 821 阅读 · 0 评论 -
了解Java内存模型(Java Memory Model, JMM)
Java内存模型(Java Memory Model, JMM)是Java语言规范中规定的一组规则,定义了多线程程序中变量(包括实例字段、静态字段和数组元素)的访问方式。JMM的设计目标是保证线程之间的内存可见性和操作的有序性,从而帮助开发者编写并发安全的程序。本文将详细介绍Java内存模型的各个方面。原创 2024-06-08 11:28:37 · 865 阅读 · 0 评论 -
了解JVM中的Server和Client参数
Java虚拟机(Java Virtual Machine,JVM)作为Java程序运行的核心,提供了多种参数来优化和调整程序的性能和行为。其中,`-server`和`-client`是两个重要的参数,分别用于配置JVM在服务器模式和客户端模式下的运行。原创 2024-06-08 11:11:45 · 1049 阅读 · 0 评论 -
Java中的接口与抽象类:区别与联系
在Java中,`interface`(接口)和`abstract class`(抽象类)是两种重要的抽象类型,用于定义对象的抽象行为和结构。虽然Java 8之后接口引入了默认方法和静态方法,使得接口功能更加强大,但它们之间仍然存在显著的区别。本文将详细探讨两者的区别及其各自的用途。原创 2024-06-05 09:04:33 · 1267 阅读 · 0 评论 -
Java的自动装箱和自动拆箱
在Java开发中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是指基本数据类型与其对应的包装类之间的自动转换。这些特性可以使代码更加简洁和易读,但在实际项目中也带来了某些潜在的问题。本文将详细介绍自动装箱和拆箱的概念,并探讨在Spring Boot项目开发和Bean转换中的应用与注意事项。原创 2024-06-04 12:48:27 · 1024 阅读 · 0 评论 -
详解Java可重入锁ReentrantLock
Java的`ReentrantLock`是一个高级的线程同步工具,提供了比传统的`synchronized`方法和语句更灵活、更丰富的线程同步机制。这个锁属于可重入锁(也称为递归锁),意味着同一个线程可以多次获取同一个锁而不会产生死锁。下面详细解释和说明`ReentrantLock`的特性和用法原创 2023-12-28 15:23:12 · 1227 阅读 · 0 评论 -
volatile关键字详解
Java中的volatile关键字是一个用于确保变量在多线程环境下的可见性和部分有序性的修饰符。当一个字段被声明为volatile时,它具有以下特性:可见性:在多线程环境中,一个线程修改了一个volatile变量的值,这个新值对其他线程来说是立即可见的。这意味着当一个线程更新了一个volatile变量,其他线程读取这个变量时会看到最新的值。有序性:volatile关键字可以防止指令重排序优化。在多线程环境中,为了提高性能,编译器和处理器常常会对指令顺序进行重排序。原创 2023-12-27 16:58:55 · 767 阅读 · 0 评论 -
Spring Boot中的FailureAnalyzer
在这篇博客文章中,我们将探讨Spring Boot中的一个有趣特性——FailureAnalyzer。这个特性能够帮助我们在应用启动失败时,快速定位问题并进行修复。我们将通过一个简单的示例来了解如何使用FailureAnalyzer。原创 2023-04-27 11:37:59 · 319 阅读 · 0 评论 -
Spring对于循环依赖是如何解决的
随着项目的不断扩大,依赖关系的复杂度也在不断增加。在这种情况下,循环依赖问题就显得尤为突出。Spring框架作为一种广泛使用的Java企业级应用开发框架,为开发者提供了一套优雅的解决方案来应对循环依赖。在本篇文章中,我们将探讨Spring是如何解决循环依赖的。原创 2023-04-06 11:35:24 · 223 阅读 · 0 评论 -
JVM对synchronized做了哪些优化
学习总结学习了JVM对synchronized的优化有哪些了解了frp的其他用法明日安排继续阅读《JAVA并发编程的艺术》这本书笔记内容偏向锁、轻量级锁、重量级锁Java SE 1.6为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”。锁一共有4种状态,级别从低到高依次是:无锁状态,偏向锁状态,轻量级锁和重量级锁状态。HotSpot的作者经过研究发现,大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。偏原创 2021-04-28 18:08:39 · 278 阅读 · 0 评论 -
StringBuffer和StringBuilder的性能对比
StringBuffer 和 StringBuilder的比较相同点 继承层次相同底层都是用字符数组实现,字符串都是可变的;都是将大部分操作委托给父类;初始容量都是16和扩容机制都是”旧容量*2+2”不同点 StringBuffer是线程安全的,StringBuilder不是线程安全的。StringBuffer从JDK1.0就有了,StringBuilder是JDK5.0增加的St原创 2017-10-20 15:42:43 · 4751 阅读 · 1 评论