【java】#9/#10爆内存解决方法
  • 板块P5461 赦免战俘
  • 楼主Hyxx
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/18 15:05
  • 上次更新2024/11/18 18:07:10
查看原帖
【java】#9/#10爆内存解决方法
586383
Hyxx楼主2024/11/18 15:05

在结果正确的情况下,出现了爆内存的情况,可以检查一下自己的输出函数是不是用的printf("%d",n);,可以把这个函数换成print(n+" ");可以大幅节约内存。


简单看了一下printf的源码,大概看来是在调用printf的时候会new一个Formatter对象来进行字符串的格式化,这就会带来很大的内存开销。

    private void implFormat(String format, Object ... args) throws IOException {
        ensureOpen();
        if ((formatter == null) || (formatter.locale() != Locale.getDefault(Locale.Category.FORMAT)))
            formatter = new Formatter((Appendable) this);
        formatter.format(Locale.getDefault(Locale.Category.FORMAT), format, args);
    }

而print函数底层最多只是new了一个char[],内存开销相对是较小的。

浅薄理解,欢迎批评指正!

2024/11/18 15:05
加载中...