自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 介绍一下MyBatis缓存?

MyBatis的缓存机制是其性能优化的关键,主要包括一级缓存和二级缓存。一级缓存是SqlSession级别的,默认开启,用于在同一个SqlSession中缓存查询结果,减少数据库访问。二级缓存是Mapper级别的,需要手动开启,允许多个SqlSession共享缓存,适用于读多写少的场景。MyBatis的缓存结构基于装饰器模式,支持自定义缓存实现。合理使用缓存可以显著提升性能,但需注意缓存一致性和脏读问题。对于实时性要求高的系统,建议谨慎使用二级缓存。

2025-05-22 22:15:33 989

原创 有JDBC为什么还需要MyBatis?

本文深入分析了JDBC与MyBatis之间的差异与优劣。JDBC作为Java操作数据库的基础API,存在样板代码重复、数据封装繁琐、SQL与Java紧耦合等问题。而MyBatis作为半自动ORM框架,通过SQL与代码解耦、自动参数与结果映射、提供缓存机制等优势,有效解决了JDBC的缺陷。与全自动ORM如Hibernate相比,MyBatis在SQL控制力和复杂查询表达力上更具优势,适合业务复杂、SQL不规则、性能敏感的项目。总结而言,MyBatis是对JDBC的封装优化,提升了开发效率、可维护性和代码质量,

2025-05-22 22:10:36 662

原创 git分支合并merge与rebase的区别?

Git中的merge和rebase是两种整合分支的方式,各有特点。merge会创建一个新的合并提交,保留分支历史,适合团队协作和公共分支合并,但可能导致历史杂乱。rebase则重新应用提交,生成线性、干净的提交记录,适合个人开发分支的清理和提交精简,但会改变commit的hash,不适用于公共分支。选择使用merge还是rebase取决于具体场景:merge适合保留合并上下文和团队协作,而rebase适合保持提交历史整洁和代码review。在公共分支上应避免使用rebase,以免产生冲突或提交丢失。实践建议

2025-05-22 22:08:36 476

原创 多人协作开发为什么尽量避免使用git push -f命令?

在多人协作开发中,应避免使用git push -f(强制推送),因为它可能破坏团队的代码协作基线,导致历史丢失、冲突加剧、代码丢失和不可恢复的历史篡改等问题。git push -f会强制覆盖远程分支的历史,即使远程存在本地没有的提交也会被抹掉。在多人协作下,这尤其危险,因为它会覆盖他人提交、重写历史、破坏CI/CD流程,并导致协作链断裂。推荐使用git push --force-with-lease作为更安全的替代方案,它会在强推前检测远程是否被别人提交过,避免直接覆盖。团队应制定规则,禁止在主分支上使用强

2025-05-22 22:06:18 298

原创 如何解决maven包冲突问题?

在大型Java项目中,Maven包冲突是常见问题,可能导致ClassNotFoundException、NoSuchMethodError等运行时错误。常见表现包括jar包版本重复、使用错误版本、类或方法缺失等。解决步骤包括:1. 使用mvn dependency:tree查找冲突;2. 在dependencyManagement中显式锁定版本;3. 使用<exclusions>排除传递依赖;4. SpringBoot项目使用官方BOM管理依赖;5. 使用mvn dependency:analy

2025-05-22 22:04:39 435

原创 Spring里的Bean是线程安全的吗?

Spring中的Bean默认是单例的,这意味着所有线程共享同一个Bean实例。如果Bean中包含可变状态(如成员变量),并且被多个线程同时访问或修改,就可能出现线程安全问题。例如,一个包含count++操作的Bean在多线程环境下可能导致数据错误。为了确保线程安全,可以采用以下方法:1. 无状态设计:避免使用成员变量,所有状态通过方法参数传递;2. 使用线程安全的成员变量:如AtomicInteger或ThreadLocal;3. 改变作用域:将Bean设置为prototype,每次注入时创建新实例。需要注

2025-05-22 22:00:46 417

原创 Spring里用到哪些设计模式?

Spring框架广泛运用了多种设计模式,以增强其扩展性、灵活性和可维护性。这些设计模式包括创建型、结构型和行为型三大类。创建型模式如单例、工厂和建造者模式,主要用于Bean的管理和实例化。结构型模式如代理、适配器和装饰器模式,用于实现AOP、处理不同类型的Controller以及增强Bean功能。行为型模式如策略、模板方法和观察者模式,用于处理视图解析、数据库操作和事件监听等。这些设计模式的应用不仅简化了开发过程,还提高了代码的可读性和可维护性。通过具体示例,如AOP的代理模式、JdbcTemplate的模

2025-05-22 21:58:51 293

原创 private修饰的方法为什么@Transactional注解不生效?

`@Transactional` 注解修饰 `private` 方法时不生效,是因为 **Spring 的事务管理基于 AOP(面向切面编程)实现,而 private 方法无法被代理拦截**,因此事务不会被应用。---## ✅ 1. Spring @Transactional 的核心机制Spring 的 `@Transactional` 是通过 AOP(默认是基于代理 Proxy 的方式)实现的:* **JDK 动态代理**:只能代理接口中的 `public` 方法。* **CGLIB 动

2025-05-22 21:54:35 313

原创 Spring如何回滚指定异常的事务?

在Spring框架中,事务管理默认仅对运行时异常和Error进行回滚,而对受检异常则不会。为了更精确地控制事务的回滚行为,可以使用@Transactional注解中的rollbackFor和noRollbackFor属性。rollbackFor属性允许指定哪些异常类型会触发事务回滚,而noRollbackFor属性则用于指定哪些异常类型不会触发回滚。这两个属性可以单独使用,也可以结合使用,以适应不同的业务需求。此外,确保异常能够被Spring事务管理器感知是事务回滚的关键,因此应避免在方法内部捕获异常而不抛

2025-05-22 21:53:01 309

原创 什么是Spring事务传播机制?

什么是Spring事务传播机制

2025-05-22 21:47:29 794

原创 Spring如何控制事务?

Spring框架通过声明式事务管理(基于注解或XML)和编程式事务管理(通过编程API)两种方式实现对事务的控制。核心依赖于AOP(面向切面编程)和事务管理器(PlatformTransactionManager)。@Transactional注解是事务控制的主要工具,支持多种属性配置,如传播行为、隔离级别、回滚规则等。事务管理可以通过注解、XML配置或编程式方式实现。Spring通过AOP代理机制在方法调用前后进行事务管理,底层由PlatformTransactionManager负责。使用事务时需注意方

2025-05-22 21:44:40 442

原创 Spring如何控制注入新Bean对象?

在Spring框架中,默认情况下注入的是单例对象(singleton),但有时需要每次注入一个新的Bean对象。以下是几种实现方式: 设置Bean的作用域为prototype:通过@Scope("prototype")注解,Spring每次获取该Bean时都会创建一个新实例。但需注意,Spring容器不会管理其生命周期。 使用ObjectProvider或Provider:通过ObjectProvider或javax.inject.Provider实现延迟注入,每次调用getObject

2025-05-22 21:40:02 198

原创 Spring每次注入新的Bean实例还是同一个实例?

Spring框架中,Bean的作用域(Scope)决定了其实例化行为,默认情况下是单例模式(Singleton),即在整个Spring容器中只创建一个共享实例。Spring提供了多种作用域,包括singleton、prototype、request、session、application和websocket,分别适用于不同的场景。若需每次注入时创建新实例,可通过@Scope("prototype")注解配置为多例模式。然而,当单例Bean依赖多例Bean时,多例Bean不会自动重新创建,

2025-05-22 21:38:07 287

原创 Spring Boot的自动加载机制是怎样?

SpringBoot的自动加载机制通过自动配置(AutoConfiguration)实现,核心在于“约定优于配置”的理念。开发者只需引入相关依赖,SpringBoot便会自动完成配置注册。关键组件包括@SpringBootApplication和@EnableAutoConfiguration注解,后者触发自动配置机制,加载META-INF/spring.factories文件中声明的自动配置类。这些类以xxxAutoConfiguration命名,内部使用条件注解(如@ConditionalOnClass

2025-05-21 22:09:44 466

原创 传递参数的@RequestParam和@RequestBody区别?

在SpringMVC中,@RequestParam和@RequestBody用于处理客户端传递的参数,但它们的应用场景和机制不同。@RequestParam主要用于接收URL查询参数或表单提交的数据,支持多个参数,适用于GET和POST请求。而@RequestBody则用于处理请求体中的JSON或XML数据,通常用于REST风格的接口,只能接收一个对象参数,依赖于HttpMessageConverter进行反序列化。两者可以组合使用,以适应不同的传参需求。简而言之,@RequestParam适合简单参数传递

2025-05-21 22:06:01 405

原创 @Component和@Service和@Controller注解的区别?

Spring框架中的@Component、@Service、@Controller和@Repository注解都用于将类注册为Spring容器中的Bean,它们本质上都继承自@Component,因此在功能上没有区别。然而,这些注解在语义和使用场景上有明确区分:@Component适用于通用组件,@Service用于业务逻辑层,@Controller用于表现层处理HTTP请求,@Repository用于持久层处理数据库访问。使用这些特定语义的注解有助于代码分层清晰、团队协作和统一管理。此外,@RestCon

2025-05-21 22:03:05 204

原创 @Bean注解用途?

@Bean是Spring框架中用于显式声明Bean定义的注解,通常与@Configuration配合使用,将方法的返回值注册为Spring容器中的Bean。它代替了XML中的<bean>标签,支持指定Bean名、作用域和生命周期回调等。@Bean常用于注册第三方库对象或需要复杂构造逻辑的Bean,与@Component相比,@Bean控制粒度更细,适用于方法级别。Spring通过CGLIB动态代理确保@Bean方法返回单例对象。总结来说,@Bean是Spring JavaConfig的核心注解,

2025-05-21 22:00:48 277

原创 @PostContruct和@Destroy注解作用?

@PostConstruct和@PreDestroy是Java标准注解,Spring框架支持这两种注解,用于管理Bean的生命周期。@PostConstruct注解用于在Bean的依赖注入完成后、初始化之前执行特定方法,常用于资源初始化、数据预加载等操作。@PreDestroy注解则在Spring容器销毁Bean之前执行,适用于资源释放、连接关闭等清理工作。这两种注解方法必须是public、无参、void返回值,且不能抛出检查型异常。与InitializingBean和DisposableBean接口相比,

2025-05-21 21:58:01 383

原创 Spring里@Autowired和@Resource和@Qualifier区别?

在Spring框架中,@Autowired、@Resource和@Qualifier是常用的依赖注入注解,它们各有特点和使用场景。@Autowired是Spring提供的注解,默认按类型注入,可以配合@Qualifier按名称指定Bean,支持@Primary和required=false设置。@Resource是Java标准注解,按名称优先注入,不支持@Primary和required=false,适合需要兼容Java标准的场景。@Qualifier通常与@Autowired一起使用,用于按名称指定注入的

2025-05-21 21:56:00 394

原创 Spring里Bean的生命周期有哪些?

在Spring框架中,Bean的生命周期涵盖了从创建、初始化、使用到销毁的整个过程。这一生命周期对于理解Spring容器的行为、扩展点(如AOP、事务、事件)以及Bean管理至关重要。生命周期的主要阶段包括:实例化、属性赋值、Aware接口回调、初始化前处理、初始化、初始化后处理、Bean可用和销毁。每个阶段都有相应的接口或注解支持,如@PostConstruct、InitializingBean、@PreDestroy等,开发者可以通过这些扩展点自定义Bean的行为。此外,BeanPostProcesso

2025-05-21 21:53:19 314

原创 依赖注入和控制反转的区别?

控制反转(IoC)和依赖注入(DI)是Spring框架中的核心概念,它们分别代表设计思想与具体实现。IoC是一种设计思想,旨在将对象的控制权交给框架,从而降低耦合度,解耦对象的创建与使用。DI则是IoC的一种实现方式,通过容器将依赖注入到对象中,而不是由对象自己创建依赖。例如,传统开发中,对象需要自己创建依赖,而在使用IoC和DI时,对象由容器创建和管理,依赖通过注解或构造函数注入。简而言之,IoC是“为什么”要将控制权交给容器,而DI是“怎么做”来实现这一目标。

2025-05-21 21:48:55 310

原创 什么是Spring里的IOC和AOP?

Spring框架的核心基础是IoC(控制反转)和AOP(面向切面编程)。IoC通过将对象的创建和依赖管理交给Spring容器,降低了代码的耦合度,提高了可测试性,并实现了配置与实现的解耦。依赖注入(DI)是IoC的具体实现方式,包括构造方法注入、Setter方法注入和字段注入。AOP则通过代理机制将横切关注点(如日志、事务、安全、缓存)从业务逻辑中分离出来,集中处理,增强了代码的模块化。Spring AOP基于动态代理,通过切面、切点和通知等概念实现横切逻辑的织入。IoC和AOP的结合使得Spring能够构

2025-05-20 21:43:58 499

原创 Spring框架解决什么问题?

Spring框架旨在简化企业级Java开发,通过控制反转(IoC)和面向切面编程(AOP)两大核心机制,解决对象管理、依赖耦合、横切逻辑重复及配置复杂等问题。IoC容器自动管理对象的创建和依赖注入,实现松耦合;AOP机制集中管理日志、事务等横切逻辑,解耦业务代码。Spring还提供声明式事务管理、持久层整合、模块化配置等功能,简化Web开发和分布式系统构建。Spring Boot和Spring Cloud进一步简化配置,支持快速开发和微服务架构。总体而言,Spring通过高内聚、低耦合的设计,提升了Java

2025-05-20 21:40:05 726

原创 介绍下设计模式里的模板方法模式

模板方法模式是一种行为型设计模式,用于在多个子类中共享相同的算法流程,同时允许子类实现特定的步骤。该模式通过定义一个抽象类来固定算法的主要流程,并将可变的部分延迟到子类中实现。这种设计提高了代码的复用性和可扩展性,同时保持了算法的整体结构不变。例如,在制作饮品(如茶和咖啡)时,可以定义一个模板方法来统一烧水、冲泡、倒入杯中等步骤,而具体的冲泡和添加调料步骤则由子类实现。模板方法模式广泛应用于如Spring框架、Servlet生命周期等场景,是面向对象设计中的经典模式之一。

2025-05-20 21:35:54 303

原创 了解设计模式里的策略模式吗?

策略模式是一种行为型设计模式,用于在运行时动态选择算法或行为,使算法的变化独立于使用它的客户端代码。它通过将可变的算法封装成独立的策略类,解决了传统if-else或switch-case结构耦合度高、不易扩展的问题。策略模式的核心组成包括抽象策略类、具体策略类和上下文环境类。上下文类持有一个策略引用,负责调用策略方法。策略模式的优点包括避免大量if-else判断、符合开闭原则、提高灵活性和复用性,以及支持运行时策略切换。在实际开发中,策略模式广泛应用于支付、认证、缓存、排序和促销活动等场景。Spring框架

2025-05-20 21:32:15 237

原创 适配器模式解决什么问题?

适配器模式(Adapter Pattern)是一种设计模式,主要用于解决接口不兼容的问题,使得原本无法协同工作的类能够一起工作。该模式通过“转换接口”来实现这一目标,适用于多种场景,如兼容旧接口或第三方接口、系统扩展时避免大范围重构、以及统一不同类的接口。适配器模式在现实生活中的类比包括插座转换器和手机充电口适配器。在软件开发中,适配器模式可以通过类适配器、对象适配器和接口适配器三种形式实现。JDK中也有适配器模式的应用,如java.util.Arrays#asList()和java.io.InputStr

2025-05-20 21:28:52 537

原创 工厂模式解决什么问题?

工厂模式(Factory Pattern)是一种设计模式,旨在解决对象创建过程中的高耦合性、复杂性和不可扩展性问题。它通过将对象的创建逻辑封装在工厂类中,使得调用者只需依赖抽象接口,而不必关心具体实现类的创建细节。这种模式降低了系统的耦合度,提高了可扩展性和可维护性,同时统一了对象的创建入口,便于控制创建逻辑。在实际开发中,工厂模式适用于多个类实现同一接口、创建逻辑复杂、系统需频繁扩展产品类以及需要控制对象创建(如单例)的场景。通过使用工厂模式,可以避免硬编码创建对象,使得代码更加灵活和易于维护。

2025-05-20 21:25:56 325

原创 什么是设计模式?JDK里用到哪些设计模式?

设计模式是软件开发中用于解决常见问题的标准化解决方案模板,旨在构建高内聚、低耦合、可扩展和可维护的系统。设计模式分为创建型、结构型和行为型三大类,共23种。创建型模式如单例、工厂和建造者,负责对象创建逻辑;结构型模式如适配器、装饰器和代理,解决类或对象之间的组合问题;行为型模式如策略、观察者和迭代器,关注对象之间的通信与职责划分。在JDK和常用框架中,设计模式被广泛应用,例如单例模式在Runtime类中,工厂模式在Calendar类中,策略模式在Comparator接口中,代理模式在Spring AOP中。

2025-05-20 21:23:45 743

原创 封装继承多态什么意思?

面向对象编程(OOP)的三大核心特性是封装、继承和多态,它们在Java编程中起着基础性作用。封装通过将数据和操作数据的方法绑定在一起,并限制外部直接访问,实现了信息隐藏和模块独立性。继承允许一个类继承另一个类的属性和方法,支持代码复用和层次结构的建立。多态则使得同一方法在不同对象上表现出不同行为,增强了程序的扩展性和灵活性。理解并应用这三大特性,有助于编写高内聚、低耦合、可复用的模块化代码,提升软件开发的效率和质量。

2025-05-20 21:18:58 303

原创 面向对象设计的6大原则是什么?

面向对象设计(OOD)中的六大原则(SOLID+迪米特法则)是构建高内聚、低耦合、易维护系统的核心思想。这些原则包括:单一职责原则(SRP),强调一个类只负责一项职责;开闭原则(OCP),提倡软件实体对扩展开放、对修改关闭;里氏替换原则(LSP),确保子类能替换父类而不改变程序行为;接口隔离原则(ISP),主张接口应小而精,避免客户端依赖不必要的方法;依赖倒置原则(DIP),提倡高层模块和低层模块都应依赖抽象;迪米特法则(LoD),要求对象只与直接朋友通信,减少耦合。掌握这些原则能显著提升代码质量和系统可维

2025-05-20 21:15:27 726

原创 什么是OOP面向对象思想?

面向对象编程(OOP)是一种以对象为核心的编程范式,广泛应用于Java、C++、Python等语言。OOP通过模拟现实世界的对象与行为,使程序结构更加模块化、可维护和可复用。其核心特性包括封装、继承和多态。封装通过将数据和行为绑定在一起,隐藏实现细节,提高安全性;继承允许子类复用父类的属性和方法,建立类型体系;多态使对象能够表现出多种形态,增强灵活性。此外,抽象和接口与实现分离进一步提升了OOP的设计能力。相比面向过程编程,OOP更易于维护和扩展,降低了耦合度。Java通过修饰符、继承、多态、抽象类和接口等

2025-05-20 21:06:03 724

原创 JVM常见的参数有哪些?

JVM参数是配置和优化Java虚拟机运行行为的关键工具,主要分为标准参数、非标准参数和高级参数。常用参数包括内存设置(如-Xms、-Xmx)、垃圾回收(如-XX:+UseG1GC)、JIT编译、线程与并发、性能诊断等。生产环境中,推荐使用G1垃圾回收器,并配置堆大小、GC日志输出等参数。辅助工具如jinfo、jcmd、jstat和jmap可帮助监控和调优JVM。通过合理配置JVM参数,可以根据业务需求和运行环境优化Java应用的性能和稳定性。

2025-05-20 21:04:30 378

原创 什么是内存的逃逸分析?

内存逃逸分析是JDK HotSpot编译器在JIT编译阶段进行的一种静态分析技术,旨在判断对象是否可能“逃出”方法或线程的作用域,从而决定是否进行栈上分配、标量替换、同步省略等优化。逃逸分析的结果分为无逃逸、方法逃逸和线程逃逸三种类型,分别对应不同的优化策略。通过逃逸分析,JVM可以实现栈上分配、同步省略和标量替换等优化,提升程序性能。然而,逃逸分析仅作用于JIT编译阶段,且在某些复杂引用场景下可能难以判定,因此其优化效果有限。总体而言,逃逸分析是JVM优化对象分配和同步操作的关键技术,有助于减少GC负担和

2025-05-20 20:58:33 405

原创 高版本JDK JVM的永久区为什么要移动到堆外?

从JDK8开始,JVM移除了永久代(Permanent Generation),引入了元空间(Metaspace),并将其从堆内存移动到堆外内存(本地内存)。这一变化主要解决了永久代存在的多个问题,包括空间固定、易内存溢出、无法自动扩展、跨语言不兼容、GC效率低和元数据混杂等。元空间的引入使得内存管理更加灵活,能够动态扩展,与堆内存隔离,提高GC性能,并增强了可维护性。元空间的变化包括内存位置从堆内移动到本地内存,分配方式从固定大小变为动态分配,配置参数和OOM错误类型也有所不同。典型场景如Spring动态

2025-05-20 20:54:52 402

原创 什么是JVM堆外内存?如何使用?

JVM堆外内存(Off-Heap Memory)是Java程序中通过native方法手动分配的内存区域,不受Java堆限制且生命周期不受GC控制。其主要作用包括减少GC压力、提高IO性能、跨语言共享内存以及避免堆OOM限制。常见的堆外内存使用方式有DirectByteBuffer、sun.misc.Unsafe、Netty的PooledByteBufAllocator和JDK19+的MemorySegment。每种方式各有优缺点,如DirectByteBuffer安全但依赖GC回收,Unsafe性能高但风险

2025-05-20 20:52:39 848

原创 JVM常量池会导致OOM吗?

JVM的常量池(ConstantPool)可能导致OutOfMemoryError(OOM),具体取决于JDK版本、加载到常量池的数据量以及是否存在恶意代码。常量池分为类常量池和运行时常量池,存储字面量、符号引用等信息。在JDK6/7中,常量池位于永久代(PermGen),容易因大量动态创建字符串常量或动态生成类而引发OOM。JDK8及以后版本,常量池移至堆内存,但仍可能因堆内存不足或元空间耗尽而报错。为避免OOM,建议限制常量池数据规模、合理设置JVM参数,并避免滥用类生成工具。通过GC日志分析、jmap

2025-05-20 20:50:16 540

原创 如何解决循环引用问题?

在Java中,循环引用通常不会导致内存泄漏,因为Java的垃圾回收机制使用可达性分析算法,而非引用计数法。只要对象从GCRoots不可达,即使它们互相引用,也会被回收。然而,如果循环引用链中仍有强引用连接到GCRoots,对象将不会被回收,可能导致内存泄漏。为避免这种情况,可以采取以下措施:及时释放无用引用、使用弱引用结构、避免滥用静态集合,以及使用内存分析工具检测泄漏。总之,Java的GC能有效处理循环引用,但开发者仍需注意避免因强引用导致的内存泄漏。

2025-05-19 21:20:30 371

原创 如何判断哪些对象可以回收?

JVM中判断对象是否可被垃圾回收主要依赖于“可达性分析算法”。该算法从一组称为GCRoots的对象出发,通过引用链向下搜索,若对象无法从GCRoots访问到,则判定为不可达,可被回收。GCRoots包括栈帧中的局部变量、方法区中类的静态属性引用的对象、常量池中的引用和JNI中的引用。Java中的引用类型(强引用、软引用、弱引用、虚引用)也影响对象的回收。被判定为不可达的对象会经过两次标记,若重写了finalize()方法,JVM会将其放入F-Queue并执行finalize()方法,若对象在finalize

2025-05-19 21:17:20 323

原创 如何优化GC里的STW?

如何优化GC里的STW?

2025-05-19 21:13:27 897

原创 JVM里G1相比CMS收集器的优势?

G1(Garbage-First)垃圾回收器是CMS(Concurrent Mark-Sweep)的升级版,旨在解决CMS的痛点,特别适用于大内存、低延迟和可预测停顿时间的场景。G1采用分区(Region)模型,将整个堆划分为多个大小相同的Region,支持动态分配为Eden、Survivor、Old和Humongous区,避免了CMS的内存碎片问题。G1支持全堆并发收集,减少Stop-the-world时间,并通过-XX:MaxGCPauseMillis参数实现可预测的停顿时间。此外,G1引入Humong

2025-05-19 21:09:59 863

空空如也

空空如也

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

TA关注的人

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