java容器优化技术分享

spring boot 启动更快速

2018-11-29  本文已影响254人  一个神奇的女码农

1.建立一个spring boot的工程

  这一步就不详细介绍了

2.搬一个控制器

@SpringBootApplication

@RestController

public class DemoApplication {

@GetMapping("/")

public String home() {

return "Hello";

}

public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

}

此时的启动时间是: Started DemoApplication in 3.188 seconds (JVM running for 4.203)

3.加入webflux依赖

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-webflux</artifactId>

        </dependency>

此时的启动时间是: Started DemoApplication in 3.977 seconds (JVM running for 7.735)

好像慢了一点,不太了解webflux是用来干什么的,之前没用到过.查了一下可以在于在固定资源条件下,提高系统吞吐量

4.spring-context-indexer

它似乎创建了组件索引。对大项目有很多组件时有效果

        <dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-context-indexer</artifactId>

<optional>true</optional>

</dependency>

此时的启动时间是:Started DemoApplication in 3.913 seconds (JVM running for 4.903)

看不出来有什么大变化

5. 惰性初始化

代码:

@Configuration

public class LazyInitBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    @Override

    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {

        for (String beanName : configurableListableBeanFactory.getBeanDefinitionNames()) {

            configurableListableBeanFactory.getBeanDefinition(beanName).setLazyInit(true);

        } 

    }

}

此时的启动时间是:Started DemoApplication in 3.371 seconds

仿佛变快了呀

6.NoVerify

-noverify 参数作用: 关闭 Java 字节码的校验功能。当 ClassLoader 加载的Java 字节码时,字节码首先接受校验器(verifier)的校验。校验器负责检查那些指令无法执行的明显的破坏性的操作

此时的启动时间是:Started DemoApplication in 1.175 seconds

实现了质的飞跃啊!

配置方法:settings -> maven -> runner -> vm options ->noverify

7.TieredStopAtLevel

-XX:TieredStopAtLevel=1 :查了一圈不知道用来干什么的!

此时的启动时间是:Started DemoApplication in 1.126 seconds

8.指定 SpringConfigLocation 参数

运行加 -Dspring.config.location=classpath:/application.properties:

此时的启动时间是:Started DemoApplication in 1.138 seconds

9.关闭 JMX

运行加 -Dspring.jmx.enabled=false:

此时的启动时间是:Started DemoApplication in 1.123 seconds

10.取消 Logback

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-webflux</artifactId>

            <exclusions>

                <exclusion>

                    <artifactId>spring-boot-starter-logging</artifactId>

                    <groupId>org.springframework.boot</groupId>

                </exclusion>

            </exclusions>

        </dependency>

此时的启动时间是:Started DemoApplication in 1.103 seconds

离目标越来越近了!

11.取消 Jackson

        <exclusion>

            <artifactId>spring-boot-starter-json</artifactId>

            <groupId>org.springframework.boot</groupId>

        </exclusion>

此时的启动时间是:Started DemoApplication in 1.101 seconds

仿佛没什么用,取消函数库感觉变化不大,就不做别的取消了

12.AppCDS

AppCDS 是JDK 10 以后才有的新特性,我现在用的版本是8,于是我兴冲冲去下了个 jdk 11,发现没有 .exe文件,百度了一圈都是让我找EXE文件进行安装(百度害我),后面发现是免安装的,被自己蠢哭.

所以你去官网下载之后只要配置你本地的JAVA_HOME就好了.

然后发现,速度并没有变快,是我的手法有什么问题吗?

差不多,我能做到的极限好像就是1秒了,但是也比原来快了2秒,也快了不少了

上一篇 下一篇

猜你喜欢

热点阅读