日期:2014-05-20  浏览次数:20620 次

关于java的内存管理
我以前心里有一个这样的想法,那就是假如一个方法是要被循环(可能是无限循环)调用的,那么这种做法将是愚蠢的:那就是在该方法中写new ,因为这样的话因为是很多次循环,如果这样不停的new 的话,那内存一定会被吃光的。可是我刚才式了一下这个程序:
Java code

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test {
    public static void main(String args[]) {
        int count = 100000 * 100000000;
        for (int i = 0; i < count; i++) {
            new test();
            System.out.println(i);
        }
    }

    private static String translate(String original) {
        StringBuffer newStr = new StringBuffer("");
        Pattern p = Pattern.compile("[A-Za-z0-9\\s]");
        char[] chars = new char[1];
        Matcher m;
        for (int i = 0; i < original.length(); i++) {
            chars[0] = original.charAt(i);
            m = p.matcher(new String(chars));
            if (!m.matches())
                newStr.append(" ").append(original.charAt(i)).append(" ");
            else
                newStr.append(original.charAt(i));
        }
        return newStr.toString();
    }

}


为什么内存没有爆掉?

------解决方案--------------------
new test();执行完之后新创建的对象就是垃圾了,可以gc掉。再者,循环次数很多,到达一定程度之后jit可以把这句没有意义的话优化掉,根本不分配对象。