为什么Java System.gc()没有按预期工作?
发布时间:2020-12-15 05:09:04 所属栏目:Java 来源:网络整理
导读:我有两个函数,一个是insert(),另一个是startGC(). 我将首先调用insert()方法,这将占用大约300MB的堆空间. 之后,我将调用startGC(),它应释放在堆中分配的内存,因为所有向量对象都是函数的本地对象,但它没有发生. private void insert() { Vector v=new Vector
我有两个函数,一个是insert(),另一个是startGC().
我将首先调用insert()方法,这将占用大约300MB的堆空间. private void insert() { Vector v=new Vector(); Vector v1=new Vector(); Vector v2=new Vector(); String str="Hello"; for (long i = 0L; i < 999999L; i++) { v.add(str + i); v1.add(str + i); v2.add(str + i); } v=null; v1=null; v2=null; } private void startGC() { System.gc(); } 我的问题: 1)为什么垃圾收集在这个例子中不起作用. 2)如何使JVM垃圾收集所有未使用的内存块. 任何代码示例都实现相同. 解决方法
如前所述,您只能建议GC删除您的对象.您可能要做的唯一事情是设置heapmax(例如:-Xmx512m).您可以通过这种方式影响gc的运行. 这可能是Java最大的缺点之一.如果你真的需要堆,你必须使用像cpp这样的语言,它们不会使用vm来编译应用程序.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |