简体   繁体   English

这些代码会导致Java中的内存泄漏吗?

[英]is these code cause memory leak in java?

    ArrayList<Object> list = new ArrayList<Object>();
    for (int i = 0; i < 10; i++) {
        Object o = new Object();
        list.add(o);
    }
    list = null;

or 要么

    ArrayList<Object> list = new ArrayList<Object>();
    for (int i = 0; i < 10; i++) {
        Object o = new Object();
        list.add(o);
        o = null;
    }

which code block will cause memory leak in java, why? 哪个代码块将导致java中的内存泄漏,为什么?

If neither will cause memory leak, how can I cause a memory leak~ (I want some code) 如果两者都不会导致内存泄漏,那我怎么会导致内存泄漏〜(我想要一些代码)

I do not think that any memory leak is happening in the code given above. 我认为上面给出的代码中没有发生任何内存泄漏。 Even though you are setting s to null "string" object is still referred by the ArrayList items. 即使将s设置为null,“ Array”对象仍然被ArrayList项目引用。 So those string objects still have active references after the loop ends. 因此,这些字符串对象在循环结束后仍具有活动引用。

Memory leaks are still possible in Java through static object reference. 通过静态对象引用,在Java中仍然可能发生内存泄漏。 Please refer the link . 请参考链接

两种情况都不会导致内存泄漏,并且所有对象都将在代码块末尾自动释放。

Neither example has a memory leak. 这两个示例都没有内存泄漏。 In Java it's not worth explicitly setting a variable to null just to help the garbage collector out a bit. 在Java中,仅仅为了帮助垃圾回收器一点点地设置变量为null是不值得的。

Note that there are situations where long-lived references to large objects (say in a cache) do need to be set to null to avoid unconstrained memory growth (leaks). 请注意,在某些情况下, 确实需要将对大型对象的长期引用(例如在高速缓存中)设置为null,以避免不受约束的内存增长(泄漏)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM