gpt4 book ai didi

spring-boot - 带有bootRun且未优化启动的Spring Boot应用程序(kotlin,gradle)中的性能低下= false

转载 作者:行者123 更新时间:2023-12-02 13:44:51 25 4
gpt4 key购买 nike

当我在junit test中运行函数时,我的时间比使用bootRun快约1000倍。
当我设置build.gradle.kts

tasks.getByName<org.springframework.boot.gradle.tasks.run.BootRun>("bootRun") {
isOptimizedLaunch = false
}

时间等于然后试运行。
为什么会发生?我如何优化bootJar? bootJar没有参数isOptimizedLaunch

功能实例
package com.example.demo

import java.util.concurrent.TimeUnit

class LongFun {
fun main() {
val startTime = System.nanoTime()

for (i1 in 0..10000) {
longFun(1000)
}

val endTime = System.nanoTime()

val durationInNano = endTime - startTime //Total execution time in nano seconds

var durationInMillis = TimeUnit.NANOSECONDS.toMillis(durationInNano)
println("time=$durationInMillis")
}

fun longFun(n: Int) {
for (i2 in 0..n) {
for (i3 in 0..n) {
var a = 1
}
}
}
}

我用 https://start.spring.io/(gradle,kotlin)编写的完整代码,没有任何改变

更新1。这是一个简单的示例,实际上我的应用程序中使用optaplanner时存在相同的问题,它也有许多计算。

UPDATE2。与Maven我有同样糟糕的结果
  • 测试中-2ms
  • 与isOptimizedLaunch = false关联-2ms
  • 在没有isOptimizedLaunch = false的情况下-5245ms
  • 在行家中-5146ms
  • 最佳答案

    据我所知,optimizedLaunch属性仅将以下两个参数添加到JVM启动命令中,而没有其他内容:

  • -XX:TieredStopAtLevel=1
  • -Xverify:none

  • 如果您使用的是Java 13或更高版本,则不使用后者。

    这些参数用于使JVM更快地启动以进行开发和测试。这是以限制JVM在运行时优化自身的能力为代价的。禁用运行时优化时看到如此低的性能并不罕见。

    但是,如果禁用optimzedLaunch来区分运行时性能的优先级,则还应该看到JVM上的启动时间增加了。在我的一个Spring Boot项目中,启动时间从〜7s缩短到13s。因此,在实际项目中,在开发阶段,您必须决定要优化它以便快速启动或快速运行。

    当您要在生产环境中运行应用程序时,很可能会使用 bootJar(或 dist)任务创建的jar文件。在这里,您负责提供JVM参数。如果不提供任何内容,则将获得JVM的默认行为,即使用分层编译(对应于 optimzedLaunch=false)。

    关于spring-boot - 带有bootRun且未优化启动的Spring Boot应用程序(kotlin,gradle)中的性能低下= false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59784758/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com