加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

为什么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的堆空间.
之后,我将调用startGC(),它应释放在堆中分配的内存,因为所有向量对象都是函数的本地对象,但它没有发生.

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来编译应用程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读