Java操作在负载下的性能优于数据之间的暂停
我有一个应用程序,它接收的数据很少被处理。例如,每五分钟发送一条相关消息。然而,一旦消息到达,性能就非常重要 如果我运行一个测试并通过下面的循环推送数据,消息之间的延迟为50毫秒,循环通常需要90到150微秒。如果入站消息之间的延迟增加到5秒,则循环运行需要300到500微秒。增加到20秒或以上会将处理时间增加到500-900微秒Java操作在负载下的性能优于数据之间的暂停,java,performance,Java,Performance,我有一个应用程序,它接收的数据很少被处理。例如,每五分钟发送一条相关消息。然而,一旦消息到达,性能就非常重要 如果我运行一个测试并通过下面的循环推送数据,消息之间的延迟为50毫秒,循环通常需要90到150微秒。如果入站消息之间的延迟增加到5秒,则循环运行需要300到500微秒。增加到20秒或以上会将处理时间增加到500-900微秒 Optional<TriggerText> headlineResult = exclusions
Optional<TriggerText> headlineResult = exclusions
.parallelStream()
.filter(exclusion -> keywordCheckString.indexOf(exclusion.pureTextValue)!=-1)
.findFirst();
if(headlineResult.isPresent()){
item.setMatchedExclusion(headlineResult.get().textValue);
exclude = true;
}
Optional headlineResult=排除
.parallelStream()
.filter(排除->关键字checkstring.indexOf(排除.pureTextValue)!=-1)
.findFirst();
if(headlineResult.isPresent()){
item.setMatchedExclusion(headlineResult.get().textValue);
排除=真;
}
- 关键字检查总是一个相对较小的字符串。少于200个字符
- 排除有大约1000个条目
- TriggerText只是字符串的包装器,pureTextValue是一个短字符串。一般少于30个字符
- 基于测试,parallelStream在目标环境中总是更快
有没有办法告诉JVM保持排除列表“热”以便快速检查?或者编译器可以直接内联函数吗?排除项在应用程序启动时加载一次,并且永远不会更改。您好,您能为您看到的内容创建一个独立的示例吗?您的排除项是静态的还是必须一直计算?我写了一个基于随机字符串(1000)的示例,并测试了另一个随机200个字符的字符串,不管睡眠时间如何,它总是需要1-0毫秒。@pandadb它们会随着时间的推移而变化,但对于给定的应用程序运行来说是静态的。我考虑过做一些代码生成,使它们成为代码中的静态字符串。目前,它们是从数据库初始化的。请记住,0-1毫秒的结果与我看到的结果相同。我看到的变化是微秒级的。嗨,你能为你看到的创建一个独立的例子吗?你的排除是静态的还是必须一直计算它们?我写了一个基于随机字符串(1000)的示例,并测试了另一个随机200个字符的字符串,不管睡眠时间如何,它总是需要1-0毫秒。@pandadb它们会随着时间的推移而变化,但对于给定的应用程序运行来说是静态的。我考虑过做一些代码生成,使它们成为代码中的静态字符串。目前,它们是从数据库初始化的。请记住,0-1毫秒的结果与我看到的结果相同。我看到的变化是微秒级的。