小编way*_*yne的帖子

if else 的顺序对性能有影响吗?例如把最有可能的条件放在前面更好

我正在尝试衡量顺序是否会if else影响性能。

\n

例如,如果

\n
if (condition == more likely condition) {}\nelse /** condition == rare condition **/ {}\n
Run Code Online (Sandbox Code Playgroud)\n

\n
if (condition == rare condition) {}\nelse /** condition == more likely condition **/ {}\n
Run Code Online (Sandbox Code Playgroud)\n

我想也许JIT应该能够优化它,无论我把它放在哪个顺序?但找不到任何关于此的文档。

\n

我尝试用以下基准测试自己。基于此,我没有看到强有力的证据表明该顺序很重要。bias=0.9因为如果确实如此,我认为(概率为0.9)时的吞吐量if (zeroOrOne == 1)应该高于bias=0.1else概率为0.9)时的吞吐量。

\n
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 performance jit jvm

6
推荐指数
1
解决办法
210
查看次数

Java 17 记录类上的 UnknownElementException

今天我兴奋地下载了 Java 17 并得到了一个简单的记录类

\n
public record TestCls(Party producer, Party client, Party server) {}\n
Run Code Online (Sandbox Code Playgroud)\n

但是,在执行时mvn compile,它会抛出错误\nFatal error compiling: javax.lang.model.element.UnknownElementException: Unknown element: "com.xxx.TestCls"

\n

我仔细检查了一下java -version,它看起来对我来说是正确的:

\n
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)\n
Run Code Online (Sandbox Code Playgroud)\n

有人知道吗?提前致谢!

\n
\n

补充:\n我的maven版本是3.5.4.
pom 文件中的 maven 设置:

\n
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)\n
Run Code Online (Sandbox Code Playgroud)\n

2021.1.2在 …

java maven java-17

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

`&amp;self.stringVal` 和 `self.stringVal.as_str()` 之间的区别

谁能告诉我返回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)

rust

4
推荐指数
1
解决办法
221
查看次数

Java 流 - 在可为空列表上执行流的优雅方法

这已经困扰我一段时间了。
所以我有一个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),是否有更优雅的方法?

java nullpointerexception java-stream option-type

3
推荐指数
1
解决办法
186
查看次数

&amp;str 和 &amp;String 有什么区别

我正在浏览Microsoft 的 Rust 教程,内容是

\n
\n

实现该copy_and_return函数,以便它返回\n对插入到向量中的值的引用

\n
\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}\n
Run 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)

rust

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

JVM 或 JIT 是否能够减少重复的方法调用?

我有一个函数,用于检查映射是否具有键 ( map.get(key) != null) 的某个值,然后返回该值,否则创建新值。
\n我想知道当给定键的值存在时,是否有任何 JVM 或 JIT 魔法不必执行 2 次映射查找?

\n
Value someValue = map.get(key) != null ? map.get(key) : new Value();\n
Run Code Online (Sandbox Code Playgroud)\n
\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}\n
Run Code Online (Sandbox Code Playgroud)\n

结果:

\n
Benchmark                                  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\n
Run Code Online (Sandbox Code Playgroud)\n

java optimization jit jvm

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