【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的性能优化:减少启动时间与内存占用

发布于:2025-04-07 ⋅ 阅读:(29) ⋅ 点赞:(0)

    <前文回顾>

点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link

<今日更新>

一、开篇整活儿

Spring Boot 这玩意儿,用过的都知道,方便是真方便,但有时候启动慢得像蜗牛爬,内存占得跟吃大户似的。咱今儿个就唠唠咋整能让它跑得快点儿,少吃点儿内存。别整那些花里胡哨的,直接上干货,咱不整虚的。

二、启动时间优化

1. 懒加载,别一股脑儿全上

Spring Boot 启动的时候,默认会把所有的 Bean 都加载一遍,这就像你吃饭,一口还没咽下去,下一口又塞进来了,能不噎着吗?所以,咱得学会“懒加载”。

Java Code

@Lazy

@Service

public class MyService {

    // 业务代码

}

用了 @Lazy 注解,Spring 就会等到真正用的时候才加载这个 Bean,启动的时候就能省不少时间。

2. 别啥都往 @ComponentScan 里塞

@ComponentScan 这玩意儿,默认会扫描整个包路径,有时候你根本用不着那么多 Bean,它还非得给你扫一遍。这就像你找对象,非得把全村的人都见一遍,累不累啊?

Java Code

@ComponentScan(basePackages = {"com.example.necessary"})

指定一下必要的包路径,别让它瞎扫。

3. 别让 Spring Boot 自己瞎猜配置

Spring Boot 有个自动配置的功能,虽然方便,但有时候它会给你整一堆你用不着的配置。这就像你去饭店,服务员非得给你推荐一堆你不想吃的菜。

Java Code

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

用 exclude 把不需要的自动配置类排除掉,启动速度能快不少。

三、内存占用优化

1. 别让 JVM 自己瞎折腾

JVM 的内存管理有时候挺不靠谱的,你得自己动手调教调教。比如,设置一下堆内存的大小:

bash Code

java -Xms512m -Xmx1024m -jar myapp.jar

-Xms 是最小堆内存,-Xmx 是最大堆内存。别让 JVM 自己瞎折腾,手动设置一下,内存占用能稳不少。

2. 别让 GC 瞎忙活

垃圾回收(GC)[1] 是 JVM 的一个重要机制,但有时候它会瞎忙活,搞得系统卡顿。你可以选择合适的 GC 算法,比如 G1 GC:

bash Code

java -XX:+UseG1GC -jar myapp.jar

G1 GC 适合大内存应用,能减少 Full GC 的频率,内存占用也能稳当不少。

3. 别让线程池瞎搞

Spring Boot 里用线程池的地方不少,但线程池配置不当,内存占用能蹭蹭往上涨。比如,ThreadPoolTaskExecutor 的配置:

Java Code

@Bean

public ThreadPoolTaskExecutor taskExecutor() {

    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();

    executor.setCorePoolSize(10);

    executor.setMaxPoolSize(20);

    executor.setQueueCapacity(50);

    executor.setThreadNamePrefix("MyExecutor-");

    executor.initialize();

    return executor;

}

设置合适的核心线程数、最大线程数和队列容量,别让线程池瞎搞,内存占用能稳不少。

四、其他骚操作

1. 别让日志瞎打

日志这玩意儿,打多了占内存,打少了又怕出问题找不到原因。所以,得有个度。比如,用 Logback 配置一下日志级别:

XML Code

<logger name="com.example" level="INFO"/>

<root level="WARN">

    <appender-ref ref="STDOUT"/>

</root>

把不必要的日志级别调高,减少日志输出,内存占用能少不少。

2. 别让缓存瞎存

Spring Boot 里用缓存的地方不少,但缓存配置不当,内存占用能蹭蹭往上涨。比如,用 Caffeine 配置一下缓存:

Java Code

@Bean

public CacheManager cacheManager() {

    CaffeineCacheManager cacheManager = new CaffeineCacheManager();

    cacheManager.setCaffeine(Caffeine.newBuilder()

        .expireAfterWrite(10, TimeUnit.MINUTES)

        .maximumSize(100));

    return cacheManager;

}

设置合适的缓存过期时间和最大缓存数量,别让缓存瞎存,内存占用能稳不少。

3. 别让数据库连接池瞎连

数据库连接池配置不当,内存占用能蹭蹭往上涨。比如,用 HikariCP 配置一下连接池:

Yml Code

spring:

  datasource:

    hikari:

      maximum-pool-size: 10

      minimum-idle: 2

      idle-timeout: 30000

      max-lifetime: 1800000

设置合适的连接池大小和超时时间,别让连接池瞎连,内存占用能稳不少。

专有名词解释

  1. 垃圾回收(GC):JVM 中的一种自动内存管理机制,用于回收不再使用的对象,释放内存空间。

写在最后

身为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),已经在找朋友内测了,比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算有用,大家基本都能拿到想要的offer...

我深刻意识到,能自由做自己喜欢的事情是有多么不容易,又是多么有成就感。所以我拉了两三个志同道合的好友,开了一间公司,继续朝着“自由”的目标前进。

当下呢,我们希望有更多的朋友能够参与到产品的测试中来,体验并且给出更好的建议。未来可能会在博客po更多关于我们产品的内容,包括使用场景、说明、课程等,希望能对大家有所帮助。

另外,想整个花活儿,每天花个1-2小时,来帮助我素未谋面的老朋友们看看简历,提提意见啥的,纯属为爱发电。我在线时间不固定,但是不要米,咱就别要自行车儿了呗~如果您有兴趣,可以点击文章底部卡片一起交流(人工回复,比较慢,请担待)。

最后,请大家持续关注我们的博客,未来还有很多栏目,一起发掘~!

(来呀~↓↓↓~老铁)


网站公告

今日签到

点亮在社区的每一天
去签到