Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java操作在负载下的性能优于数据之间的暂停_Java_Performance - Fatal编程技术网

Java操作在负载下的性能优于数据之间的暂停

Java操作在负载下的性能优于数据之间的暂停,java,performance,Java,Performance,我有一个应用程序,它接收的数据很少被处理。例如,每五分钟发送一条相关消息。然而,一旦消息到达,性能就非常重要 如果我运行一个测试并通过下面的循环推送数据,消息之间的延迟为50毫秒,循环通常需要90到150微秒。如果入站消息之间的延迟增加到5秒,则循环运行需要300到500微秒。增加到20秒或以上会将处理时间增加到500-900微秒 Optional<TriggerText> headlineResult = exclusions

我有一个应用程序,它接收的数据很少被处理。例如,每五分钟发送一条相关消息。然而,一旦消息到达,性能就非常重要

如果我运行一个测试并通过下面的循环推送数据,消息之间的延迟为50毫秒,循环通常需要90到150微秒。如果入站消息之间的延迟增加到5秒,则循环运行需要300到500微秒。增加到20秒或以上会将处理时间增加到500-900微秒

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在目标环境中总是更快
我需要这个循环在消息到达后尽快运行,但相关消息通常相隔几分钟。即使是微秒级,当消息相距很远时,性能也会有3到10倍的变化


有没有办法告诉JVM保持排除列表“热”以便快速检查?或者编译器可以直接内联函数吗?排除项在应用程序启动时加载一次,并且永远不会更改。

您好,您能为您看到的内容创建一个独立的示例吗?您的排除项是静态的还是必须一直计算?我写了一个基于随机字符串(1000)的示例,并测试了另一个随机200个字符的字符串,不管睡眠时间如何,它总是需要1-0毫秒。@pandadb它们会随着时间的推移而变化,但对于给定的应用程序运行来说是静态的。我考虑过做一些代码生成,使它们成为代码中的静态字符串。目前,它们是从数据库初始化的。请记住,0-1毫秒的结果与我看到的结果相同。我看到的变化是微秒级的。嗨,你能为你看到的创建一个独立的例子吗?你的排除是静态的还是必须一直计算它们?我写了一个基于随机字符串(1000)的示例,并测试了另一个随机200个字符的字符串,不管睡眠时间如何,它总是需要1-0毫秒。@pandadb它们会随着时间的推移而变化,但对于给定的应用程序运行来说是静态的。我考虑过做一些代码生成,使它们成为代码中的静态字符串。目前,它们是从数据库初始化的。请记住,0-1毫秒的结果与我看到的结果相同。我看到的变化是微秒级的。