小编Kra*_*ach的帖子

有没有办法在Java中禁用短路评估?

说我有这样的代码:

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运行e()-_-

java boolean-logic semantics

11
推荐指数
3
解决办法
2471
查看次数

从日食中的主要运行JMH时"没有匹配的基准"

我想通过在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版

java eclipse benchmarking jmh

10
推荐指数
1
解决办法
6516
查看次数

JMH 在基准测试之间挂起(无法杀死分叉的 JVM?)

我有大量的宏基准测试,它们使用不同的执行引擎(其中一些是多线程的)来测量各种模拟的执行时间。大多数这些作业使用我在抽象基类中指定的 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)

java jvm jmh

5
推荐指数
1
解决办法
1746
查看次数

尽管存在pdb文件,Resharper仍无法导航到外部源

  • 我的解决方案使用我的其他解决方案生成的.dll类
  • .dll在同一台机器上以调试模式生成的地方,存在pdb文件
  • 在调试工作期间浸入那些外部源,所以我假设pdb文件是正确的
  • pdp文件与.dlls位于同一目录中
  • 在R#设置中,我选择了"导航到源"和"使用调试信息进行导航检查"
  • VS2012 Pro和R#8.02 Full

它让我疯狂,为什么这样至关重要的事情,即在每个常见的免费IDE for Java中提供开箱即用的东西,都不可能使用数百美元的工具在C#中工作......

c# resharper visual-studio pdb-files visual-studio-2012

5
推荐指数
1
解决办法
1496
查看次数

如何在不退出系统的情况下在linux mint中重新加载PATH

我将所有环境变量保存在 ~/.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 的更改可见,而不必关闭所有窗口并重新登录?

linux linux-mint

5
推荐指数
1
解决办法
2万
查看次数