可以说我写了一个无限的写循环,但是里面没有语句?它会不会产生任何问题,例如内存将满等,或者JVM会在一段时间后停止响应?
答案 0 :(得分:1)
你为什么要那样做?
要回答,它不会消耗无休止的内存,但是如果根本没有任何指令,使用Cpu可能会很痛苦。
至少,您应该帮助CPU抢占,以允许线程产生:
Thread.yield();
您可以在Java Api Javadoc中阅读此内容:
向调度程序的提示,即当前线程愿意放弃对处理器的当前使用。调度程序可以随意忽略此提示。
Yield是一种启发式尝试,旨在提高线程之间的相对进程,否则将过度利用CPU。它的使用应与详细的性能分析和基准测试结合使用,以确保它实际上具有所需的效果。
很少使用此方法。它对于调试或测试目的可能是有用的,因为它可能有助于重现由于竞争条件而产生的错误。在设计并发控制结构(例如java.util.concurrent.locks包中的结构)时,它也可能很有用。
答案 1 :(得分:0)
无限循环可能并可能导致100%CPU核心利用率。根据您的“写循环”的意思,类似的技术称为Busy Waiting or Spinning。
作为时间延迟技术的旋转通常会产生无法预测甚至不一致的结果,除非实施代码来确定处理器可以执行“不执行任何操作”循环的速度,或者循环代码明确检查实时时钟
答案 2 :(得分:0)
您肯定会让一个硬件线程忙。它不会创建任何对象,因此内存并不是直接的问题。
但是,上下文很重要。