我正在尝试衡量顺序是否会if else影响性能。
例如,如果
\nif (condition == more likely condition) {}\nelse /** condition == rare condition **/ {}\nRun Code Online (Sandbox Code Playgroud)\n比
\nif (condition == rare condition) {}\nelse /** condition == more likely condition **/ {}\nRun Code Online (Sandbox Code Playgroud)\n我想也许JIT应该能够优化它,无论我把它放在哪个顺序?但找不到任何关于此的文档。
\n我尝试用以下基准测试自己。基于此,我没有看到强有力的证据表明该顺序很重要。bias=0.9因为如果确实如此,我认为(概率为0.9)时的吞吐量if (zeroOrOne == 1)应该高于bias=0.1(else概率为0.9)时的吞吐量。
public class BranchBench {\n @Param({ "0.02", "0.1", "0.9", "0.98", })\n private double bias;\n\n @Param("10000")\n private int count;\n\n private final List<Byte> randomZeroOnes = new ArrayList<>(count);\n\n @Setup\n public …Run Code Online (Sandbox Code Playgroud) 今天我兴奋地下载了 Java 17 并得到了一个简单的记录类
\npublic record TestCls(Party producer, Party client, Party server) {}\nRun Code Online (Sandbox Code Playgroud)\n但是,在执行时mvn compile,它会抛出错误\nFatal error compiling: javax.lang.model.element.UnknownElementException: Unknown element: "com.xxx.TestCls"
我仔细检查了一下java -version,它看起来对我来说是正确的:
openjdk version "17" 2021-09-14\nOpenJDK Runtime Environment (build 17+35-2724)\nOpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)\nRun Code Online (Sandbox Code Playgroud)\n有人知道吗?提前致谢!
\n补充:\n我的maven版本是3.5.4.
pom 文件中的 maven 设置:
openjdk version "17" 2021-09-14\nOpenJDK Runtime Environment (build 17+35-2724)\nOpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)\nRun Code Online (Sandbox Code Playgroud)\n我2021.1.2在 …
谁能告诉我返回of&str值的两种方法有什么区别?两者都可以编译,但我不确定是否有首选。nameUser
pub struct User {
name: String,
}
impl User {
pub fn name(&self) -> &str {
// way1
&self.name
// way2
// self.name.as_str()
}
}
Run Code Online (Sandbox Code Playgroud) 这已经困扰我一段时间了。
所以我有一个Product类,其中包含一个列表Image(该列表可能为空)。
我想要做
product.getImages().stream().filter(...)
Run Code Online (Sandbox Code Playgroud)
但由于product.getImages()可能为空,我不能直接执行上面的操作,而是必须用它来包装它Optional.ofNullable(...).ifPresent(...)
Optional.ofNullable(product.getImages())
.ifPresent(imgs->imgs.stream().filter(...))
Run Code Online (Sandbox Code Playgroud)
对我来说,即使与以下相比,它看起来也很麻烦:
if(product.getImages() != null){
product.getImages().stream().filter(...)
}
Run Code Online (Sandbox Code Playgroud)
假设我无法更改Product::getImages(使其不返回 null),是否有更优雅的方法?
我正在浏览Microsoft 的 Rust 教程,内容是
\n\n\n实现该
\ncopy_and_return函数,以便它返回\n对插入到向量中的值的引用
这里给出了解决方案,但它与我的不同,它使用 &String 作为返回类型,而我使用 &str。
\n// standard solution\nfn copy_and_return<\'a>(vector: &\'a mut Vec<String>, value: &\'a str) -> &\'a String {\n vector.push(String::from(value));\n vector.get(vector.len() - 1).unwrap()\n}\nRun Code Online (Sandbox Code Playgroud)\n// my solution\nfn copy_and_return<\'a>(vector: &\'a mut Vec<String>, value: &\'a str) -> &\'a str {\n vector.push(String::from(value));\n return value; // simply return value\n}\n\nfn main() {\n let name1 = "Joe";\n let name2 = "Chris";\n let name3 = "Anne";\n\n let mut names = Vec::new();\n\n assert_eq!("Joe", copy_and_return(&mut names, …Run Code Online (Sandbox Code Playgroud) 我有一个函数,用于检查映射是否具有键 ( map.get(key) != null) 的某个值,然后返回该值,否则创建新值。
\n我想知道当给定键的值存在时,是否有任何 JVM 或 JIT 魔法不必执行 2 次映射查找?
Value someValue = map.get(key) != null ? map.get(key) : new Value();\nRun Code Online (Sandbox Code Playgroud)\n根据我的基准测试,似乎无法进行优化,因为它明显比我们有一个局部变量来保存该值要慢:
\n@Benchmark\npublic String duplicateCall() {\n return map.get(1) != null ? map.get(1) : DEFAULT;\n}\n\n@Benchmark\npublic String nonDuplicateCall() {\n final String s = map.get(1);\n return s != null ? s : DEFAULT;\n}\nRun Code Online (Sandbox Code Playgroud)\n结果:
\nBenchmark Mode Cnt Score Error Units\nduplicateCall thrpt 5 634001.515 \xc2\xb1 69181.631 ops/ms\nnonDuplicateCall thrpt 5 869980.580 \xc2\xb1 66572.021 ops/ms\nRun Code Online (Sandbox Code Playgroud)\n java ×4
jit ×2
jvm ×2
rust ×2
java-17 ×1
java-stream ×1
maven ×1
optimization ×1
option-type ×1
performance ×1