You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java绘制X形斜线代码CPU占用高及Windows编译失败问题咨询

Java代码问题解析:CPU占用、输出异常与编译失败

Hey there! Let's tackle your three Java issues one by one—they're all common pitfalls, so don't worry!

1. 为什么i5 CPU占用高达28%?

你的代码嵌套了两层循环,外层跑20000次,内层每次要执行i次System.out.print(" "),总共有将近2亿次的控制台输出操作!控制台IO本身是比较消耗资源的:每次调用print都要触发内核态与用户态的切换,操作系统还要处理字符渲染、缓冲区刷新等工作,这么高频的操作必然会让CPU持续忙碌。

优化方案:用StringBuilder预先构建每一行的内容,一次性输出所有行,大幅减少IO次数:

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 20000; i++) {
            sb.append(" ".repeat(i)); // Java 11+可用,低版本可通过循环append空格实现
            sb.append("X\n");
        }
        System.out.print(sb);
    }
}

这样IO操作从2亿次降到1次,CPU占用会立刻明显降低。

2. 运行后期X间距变大的奇怪现象

这个问题大概率是控制台渲染跟不上输出节奏导致的视觉误差。当你每秒输出成千上万行时,控制台窗口的渲染线程会被大量IO请求挤占,可能出现行渲染不连贯、行高被拉伸或者滚动延迟的情况,让你误以为X的间距变大了。

解决方法:采用上面的StringBuilder批量输出方案,一次性把所有内容输出,控制台可以平稳渲染,就不会出现这种视觉差异了。另外也可以检查下控制台的设置,比如是否开启了自动换行、字体大小有没有被系统自动调整。

3. Windows下编译失败,但在线编译正常的原因

你代码里的&lt;和&gt;是HTML实体符号(用来表示<和>),在线编译平台会自动把这些HTML实体转换成正常的Java语法符号,但Windows本地的javac编译器不认识这些实体,会报“无效字符”的编译错误。

修复方法:把代码里所有的&lt;替换成<,&gt;替换成>,比如:
原代码片段:

for (int i=0; i&lt;20000; i++) { for (int j=0; j&lt;i; j++) { ... } }

改成:

for (int i=0; i<20000; i++) { for (int j=0; j<i; j++) { ... } }

再用javac编译就没问题了。

内容的提问来源于stack exchange,提问作者Basafish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:24:31