说我有这样的代码:
boolean ret = a() && b() && c() && d() && e();
Run Code Online (Sandbox Code Playgroud)
通常只有在所有其他调用a() - d()返回true时才调用e().是否有一些编译器或JVM选项可以禁用短路评估,因此无论其他功能的结果如何,都会始终调用e()?
基本上我正在做大型系统的UAT并且需要测试e(),但是设置环境和场景以确保所有a(),b()等返回true是非常痛苦的...
编辑:好吧,我想使用位AND而不是逻辑可以提供某种解决方法,但理想情况下我正在寻找一个不需要在源代码中进行任何更改的解决方案.两者都是由于正式和技术原因(正如我提到的系统很大,我们有整个过程,在暂存区域和签署之间推广和部署代码).这仅用于测试,生产版本需要启用延迟评估(即使用&&)
验尸报告:
我想通过在eclipse中将其作为Java Application运行来试用JMH的新功能.我导入并构建了jmh-samples项目.编译后的类以/ jmh-samples/target/generated-sources/annotations结尾,/ target /中有几个JAR,并且从命令行运行microbenchmarks.jar像往常一样工作.
但是,当我执行main时,我总是得到
No matching benchmarks. Miss-spelled regexp?
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我使用的是0.3版
我有大量的宏基准测试,它们使用不同的执行引擎(其中一些是多线程的)来测量各种模拟的执行时间。大多数这些作业使用我在抽象基类中指定的 jmh 设置:
@ContextConfiguration(value = AbstractJobExecutorBenchmarker.CONTEXT_LOCATION)
@State(Scope.Benchmark)
@Fork(1)
@BenchmarkMode(Mode.SingleShotTime)
@Warmup(iterations = 1, timeUnit = TimeUnit.MILLISECONDS)
@Measurement(iterations = 5, timeUnit = TimeUnit.MILLISECONDS)
public abstract class AbstractJobExecutorBenchmarker extends AbstractTestNGSpringContextTests
Run Code Online (Sandbox Code Playgroud)
(我还将 -gc -si false 添加到命令行)
当我启动这些基准测试中的任何一个或一些小的子集时,它都可以正常工作。但是,如果我尝试一次性运行所有这些(即没有过滤选项),jmh 成功地完成了其中的几个,然后在一个特定的基准测试后突然冻结......它的头韵已经完成,最终结果被打印出来,但它看起来不像分叉的JVM被杀死并且新的没有启动,似乎整个过程都被卡住了。打印的最后语句示例:
Iteration 3: 03:59:52.059 [pool-8-thread-1] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.059 [pool-8-thread-3] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.060 [pool-8-thread-5] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.060 [pool-8-thread-6] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.061 [pool-8-thread-7] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.061 [pool-8-thread-8] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.061 [pool-8-thread-9] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.061 [pool-8-thread-10] …Run Code Online (Sandbox Code Playgroud) 它让我疯狂,为什么这样至关重要的事情,即在每个常见的免费IDE for Java中提供开箱即用的东西,都不可能使用数百美元的工具在C#中工作......
我将所有环境变量保存在 ~/.profile 文件中,因此当我打开新 shell 时它们会被导出。最近我不得不修改 PATH 部分之一,从 Hadoop 2.6.0 降级到 Hadoop 2.3.0。所以,我的 .profile 看起来像这样(我注释掉了旧的 HADOOP_INSTALL):
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export GRADLE_HOME=/home/kranach/tools/gradle-2.2.1
#export HADOOP_INSTALL=/home/kranach/hadoop-2.6.0
export HADOOP_INSTALL=/home/kranach/hadoop-2.3.0
export M2_HOME=/home/kranach/tools/apache-maven-3.2.5
export PIG_HOME=/home/kranach/tools/pig-0.14.0
#export HIVE_HOME=/home/kranach/tools/apache-hive-0.14.0-bin/
export HIVE_HOME=/home/kranach/tools/hive12
export HBASE_HOME=/home/kranach/tools/hbase-0.98.10-hadoop2
PATH="$PATH:$GRADLE_HOME/bin:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin:$M2_HOME/bin:$PIG_HOME/bin:$HIVE_HOME/bin:$HBASE_HOME/bin"
Run Code Online (Sandbox Code Playgroud)
完成此更改后,我关闭并重新打开终端,但没有任何效果 - PATH 仍然包含 hadoop 2.6.0 条目。我尝试这样做source ~/.profile,但它只将新条目附加到 PATH,而不替换旧条目。我应该怎么做才能使 PATH 的更改可见,而不必关闭所有窗口并重新登录?