在这段代码中:
if (value >= x && value <= y) {
Run Code Online (Sandbox Code Playgroud)
什么时候value >= x和value <= y没有特定模式的情况一样真假,使用&运算符会比使用更快&&吗?
具体来说,我正在考虑如何&&懒惰地评估右侧表达式(即,仅当LHS为真),这意味着条件,而&在此上下文中的Java 保证严格评估两个(布尔)子表达式.值结果是相同的两种方式.
不过,虽然一个>=或<=运营商将使用一个简单的比较指令时,&&必须包括一个分支,该分支是易受分支预测失败 -按本非常著名的问题:为什么快处理有序数组不是一个排序的数组?
因此,强制表达式没有惰性组件肯定会更具确定性,并且不容易受到预测失败的影响.对?
笔记:
if(value >= x && verySlowFunction()).我专注于"足够简单"的RHS表达.if声明).我无法向自己证明这是无关紧要的,而且替代配方可能是更好的例子,比如boolean b = value >= x && value <= y;更新 只是为了解释为什么我感兴趣:我一直在盯着马丁汤普森在他的机械同情博客上撰写的系统,在他来到并谈到 Aeron之后.其中一个关键信息是我们的硬件中包含了所有这些神奇的东西,我们的软件开发人员不幸地无法利用它.别担心,我不打算在我的所有代码上使用///// :-) ...但是这个网站上有很多关于通过删除分支来改进分支预测的问题,并且它发生了对我来说,条件布尔运算符是测试条件的核心.
当然,@ StephenC提出了一个奇妙的观点,即将代码弯曲成奇怪的形状可以使JIT更容易发现常见的优化 - 如果不是现在,那么将来也是如此.并且上面提到的非常着名的问题是特殊的,因为它推动预测复杂性远远超出实际优化. …
java performance processing-efficiency microbenchmark branch-prediction
我检查到该守护进程的JVM治疗线程经常重复的传闻finally在一些特殊的方法块(他们不这样做,好吗?),当我读了这一点,从甲骨文的Java教程:
注意:如果JVM在执行
try或catch代码时退出,则该finally块可能无法执行.同样,如果执行try或catch代码的线程被中断或终止,即使应用程序作为一个整体继续,该finally块也可能不会执行.
(重点是我的.)关于打断的一点引起了我的注意!
我的信念是,如果一个线程在try/catch代码中并且被中断,那么我们要么(或最终进入)一个状态(例如睡眠,等待)我们最终投掷一个InterruptedException,或者我们不是,我们正常或异常退出,但在所有情况下,我们都会遵守该finally条款.
我错过了什么?finally在应用程序继续运行时,是否真的有一种方法可以让线程被中断然后跳过a ?
哪种设计API更好:
Example A:
public class UserService {
public void addUser(final User user);
public void addUserToIndex(final User user, final int index);
public User lookUpUser(final User user);
public User getUserByIndex(final int index );
public void removeUser(final User user);
public List<User> getAllUsers();
}
Example B:
public class UserService {
public void add(final User user);
public void add(final User user, final int index);
public User lookUp(final User user);
public User get(final int index);
public void remove(final User user);
public List<User> getAll();
}
Run Code Online (Sandbox Code Playgroud)
显然这段代码不会运行 - …
int[] array = new int[10]; // Length is fixed when the array is created.
Run Code Online (Sandbox Code Playgroud)
创建数组时,将建立数组的长度.创建后,其长度是固定的.
为什么必须这样?
我写了一个java应用程序,我在Fedora 24下运行了java进程。然后我检查了jconsole,发现它使用了大约5到10兆字节的内存。垃圾收集的效果在图中也可见。
然后我检查了我的系统监视器,发现相同的进程 ID 有超过 100 兆字节的内存使用量。
这是屏幕截图:
请告诉我为什么进程不释放未使用的内存?
有什么办法可以释放吗?
我试图用相同的字符和引号替换行中的最后一个字符 '
这是sed代码
sed "s/\([A-Za-z]\)$/\1'/g" file1.txt > file2.txt
Run Code Online (Sandbox Code Playgroud)
但不起作用.错误在哪里?
所以我有以下C代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
int i = 0, n;
n = 5;
pid_t pid;
printf("i=%d Right before the loop\n", i, getpid(), getppid());
for (i = 0; i < n; i++){
pid = fork();
if (pid <= 0){
printf("something happens in loop #%d. pid = %d\n", i, pid);
break;
}
printf("End of loop #%d\n", i);
}
printf("i=%d My process ID = %d and my parent's ID = %d\n", i, getpid(), getppid());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我只有一个问题:为什么
printf("i=%d …Run Code Online (Sandbox Code Playgroud) 从此链接显示一些Scala示例:http :
//spark.apache.org/docs/latest/mllib-collaborative-filtering.html
map{}和之间有什么区别map()?
val ratings = data.map(_.split(',') match { case Array(user, item, rate) =>
Rating(user.toInt, item.toInt, rate.toDouble)
})
val usersProducts = ratings.map { case Rating(user, product, rate) =>
(user, product)
}
Run Code Online (Sandbox Code Playgroud) java ×5
arrays ×1
c ×1
coding-style ×1
finally ×1
fixed ×1
heap-memory ×1
linux ×1
memory ×1
performance ×1
process ×1
scala ×1
sed ×1
ubuntu ×1