在结果正确的情况下,出现了爆内存的情况,可以检查一下自己的输出函数是不是用的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[],内存开销相对是较小的。
浅薄理解,欢迎批评指正!