一,Spring Boot 扫包优化
@SpringBootApplication 注解自动获取应用的配置信息,会给应用带来一些副作用。由自动配置( auto-configuration )和 组件扫描 ( component scanning )组成,这跟使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解的作用是一样的。这样做给开发带来方便的同时,也会有三方面的影响:
“”
1、会导致项目启动时间变长。当启动一个大的应用程序, 或将做大量的集成测试启动应用程序时,影响会特别明显。
2、会加载一些不需要的多余的实例(beans)。
3、会增加 CPU 消耗。
针对以上三个情况,我们可以移除 @SpringBootApplication 然后使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 注解来扫描特定的包
//@SpringBootApplication
@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = {"com.crisp.controller","com.crisp.service"})
@MapperScan("com.crisp.mapper")
public class Mybatis05Application {
public static void main(String[] args) {
SpringApplication.run(Mybatis05Application.class, args);
}
}
二,JVM 参数调优
调优策略:初始化堆内存与最大堆相同,减少垃圾回收次数
两种方法:内部启动和外部启动
1. 内部启动
实例参数 - XX:+PrintGCDetails -Xmx32M -Xms1M
打印 GC 日志,设置最大堆内存 32M,初始堆内存 1M
-Xms : 设置 Java 堆栈的初始化大小
-Xmx : 设置最大的 java 堆大小
测试:
第一步,在项目运行,编辑结构中配置参数
第二步,运行项目,查看回收次数
![](https://i-blog.csdnimg.cn/blog_migrate/d0f0aa81fac07b0f06c3afe4e95138db.png)
这样配置后,GC 回收次数非常多。
更改堆大小后,-XX:+PrintGCDetails -Xmx256M -Xms256M ,GC 回收次数减少
![](https://i-blog.csdnimg.cn/blog_migrate/89b4852818bc122446eea992ffe68607.png)
外部启动
第一步,通过 maven 项目打 jar 包
配置 pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<useUniqueVersions>false</useUniqueVersions>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.crisp.Mybatis05Application</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
mainClass 为入口类
第二步,在 Maven Project 目录下,点击 package
![](https://i-blog.csdnimg.cn/blog_migrate/d25890645c7b651848db10847daf072a.png)
生成 jar 默认在 target 文件夹下
![](https://i-blog.csdnimg.cn/blog_migrate/896521e552ed8fb41cd2c73d23f99e59.png)
第三步,执行外部启动命令
java -server -Xms32m -Xmx32m -jar mybatis05-0.0.1-SNAPSHOT.jar
![](https://i-blog.csdnimg.cn/blog_migrate/fec0d1079c9d5f8a413e3e49a944062f.png)
第四步,通过 jconsole.exe 查看内存
可以看到内存走向,有一个拐点,说明 GC 在做回收。
作者:翼云先森
来源链接:
https://www.jianshu.com/p/bf092200b7e0