同样的for循环语句,在spring环境中执行和不在spring环境中执行,耗时不同。
@RestController
@RequestMapping("api/")
public class ApiV2Controller {
@RequestMapping(value = "upload")
public void upload() throws IOException {
for (int i = 0; i < 10; i++) {
long l = System.currentTimeMillis();
encode();
System.out.println("controller耗时:" + (System.currentTimeMillis() - l));
}
}
public static void main(String[] args) throws IOException {
for (int i = 0; i < 10; i++) {
long l = System.currentTimeMillis();
encode();
System.out.println("main耗时:" + (System.currentTimeMillis() - l));
}
}
private static void encode() throws IOException {
File file = new File("C:\\Users\\admin\\Desktop\\demo.bin");
byte[] fileBytes = Files.readAllBytes(file.toPath());
int index = 0;
byte[] key = "onekey;".getBytes(StandardCharsets.UTF_8);
int keylen = key.length;
int length = fileBytes.length;
for (int i = 0; i < length; i++) {
if (index >= keylen) {
index = 0;
}
int diff = fileBytes[i] - key[index];
if (diff < -128) {
diff += 256;
}
fileBytes[i] = (byte) diff;
index++;
}
}
代码的for循环是一个常用的用key加密文件的方法
在spring中执行耗时
controller耗时:399
controller耗时:368
controller耗时:367
controller耗时:366
controller耗时:368
controller耗时:367
controller耗时:367
controller耗时:367
controller耗时:367
controller耗时:367
使用普通的main方法耗时
main耗时:137
main耗时:118
main耗时:114
main耗时:114
main耗时:114
main耗时:116
main耗时:117
main耗时:118
main耗时:111
main耗时:113
spring中执行耗时会多2-3倍,文件大小为64Mb
很疑惑,不知道为什么会这样
求解答
在Spring环境中,特别是当你通过Spring MVC的@RestController
和@RequestMapping
处理HTTP请求时,相比直接在main
方法中执行相同的逻辑,存在几个潜在的原因导致执行时间显著增加:
main
方法中是不存在的。main
方法中,JVM可能会更快地达到最佳性能状态(即JIT编译优化),因为main
方法通常是一次性执行的。而在Web应用中,JVM需要持续运行并处理多个请求,这可能导致性能表现不同。针对你的情况,虽然你的测试代码是在控制器中执行,但性能差异很可能是由于Spring MVC处理HTTP请求时的额外开销,以及可能存在的JVM性能优化差异。
为了更准确地评估性能,你可以考虑:
System.nanoTime()
)。encode
方法的执行时间,排除Spring MVC框架的干扰。问题内容: 我使用java for循环进行了一些运行时测试,并发现了一种奇怪的行为。对于我的代码,我需要原始类型(例如int,double等)的包装对象来模拟io和输出参数,但这不是重点。只是看我的代码。具有字段访问权限的对象如何比原始类型更快? 优先类型的循环: 结果: MicroTime原语(最大值:= 10000.0):110 MicroTime原语(最大值:= 100000.0):1081
当代码在运行时,它所在的执行环境非常重要。 执行上下文 在 JavaScript 中,执行上下文与执行环境关系密切,它与函数和变量的声明息息相关,通常认为有两种执行上下文: 全局上下文——代码首次执行的默认环境; 函数上下文——当代码执行进入函数体中。 让我们来看一段包含这几种执行上下文的代码: // 全局上下文var hello = 'Hello!';function introduce()
服务发布 服务发布过程涉及到三个类 RegistryConfig ,ServerConfig ,ProviderConfig 。 1. RegistryConfig RegistryConfig registryConfig = new RegistryConfig() .setProtocol("zookeeper") .setAddress("1
} 链接:https://www.hackerrank.com/challenges/java-string-compare/problem
本文向大家介绍axios为什么能在浏览器中环境运行又能在node中环境运行?相关面试题,主要包含被问及axios为什么能在浏览器中环境运行又能在node中环境运行?时的应答技巧和注意事项,需要的朋友参考一下 源码中defaults.js文件里有getDefaultAdapter这个方法,用来判断环境。如果是浏览器就实例new XMLHttpRequest()来发送请求响应服务,node环境就引用h
我对python中双for循环的使用感到困惑,这是我的代码: 输出如下: 它只对外循环的第一个值执行内循环,为什么会发生这种情况?我怎样才能让它在第一个和第二个变量的所有组合上循环?