class Demo{
static void hang(){ // Freezes/Hangs the program for some seconds.
for(int i=0 ; i<100000 ; i++){
for(int j=0 ; j<10000 ; j++){
for(int k=0 ; k<10000 ; k++){
int b = 5%12000;
}
}
}
}
public static void main(String a[]){
System.out.print("Loading");
hang();
for(int it=0 ; it<5 ; it++)
{
System.out.print(".");
hang();
}
}
}hang()方法的任务是在一定时间内对程序进行挂起/冻结(我知道还有其他冻结程序的方法,但我想使用for循环来显示)。但是当我执行这个时,第一个hang()调用(在System.out.print("Loading")下面)占用一定的时间并造成延迟,第一个调用for循环也是延迟,但是其余的调用( for循环中)没有占用任何时间立即执行,也没有看到延迟。
考虑到所有的hang()调用都被调用了(我已经通过在hang()方法中编写一个print语句来检查这一点)。
考虑一下,每次调用int b = 5%12000都需要时间(通过用if(True)替换它,甚至检查它)
相同的代码在c++中工作,即在每个“”之后显示延迟。
c++中的输出类似于Loading[d].[d].[d].[d].[d].
但在Java中,它就像Loading[d].[d]....
[d]是延迟的
如果我将hang()调用替换为hang()方法中的整个方法代码,则它可以工作。
class Demo{
static void hang(){ // Freezes/Hangs the program for some seconds.
for(int i=0 ; i<100000 ; i++){
for(int j=0 ; j<10000 ; j++){
for(int k=0 ; k<10000 ; k++){
int b = 5%12000;
}
}
}
public static void main(String a[]){
System.out.print("Loading");
hang();
for(int it=0 ; it<5 ; it++)
{
System.out.print(".");
for(int i=0 ; i<100000 ; i++){
for(int j=0 ; j<10000 ; j++){
for(int k=0 ; k<10000 ; k++){
int b = 5%12000;
}
}
}
}
}
}发布于 2021-02-13 01:30:42
一个好的优化器可以发现hang()什么也不做--它没有副作用(除了占用时间),也没有产生任何输出。因此,它优化为“无”。
我怀疑这就是正在发生的事情。
您看到几个“完全”执行的原因是,即时编译器并没有立即在这个例程上松开。
https://stackoverflow.com/questions/66181039
复制相似问题