这会导致任何内存泄漏吗?

时间:2015-07-15 20:27:17

标签: java android

我对java世界相当新,并且想知道以下是否会导致我周围的任何内存泄漏重新分配到null。只是想确保这不会导致任何内存泄漏,因为那些是坏的

import android.graphics.Point;
import android.util.Log;
import android.view.MotionEvent;

public class TouchHandler {
    public TouchHandler() {

    }

    static Point down;
    static Point up;
    static boolean isUp = false;
    static boolean isDown = false;

    public static void processEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                Log.i("betterinf", "ACTION DOWN");
                down = new Point();
                down.x = (int) event.getX();
                down.y = (int) event.getY();
                isDown = true;

                break;

            case MotionEvent.ACTION_UP:
                Log.i("betterinf", "ACTION UP");
                down = new Point();
                up.x = (int) event.getX();
                up.y = (int) event.getY();
                isUp = true;

                break;

            case MotionEvent.ACTION_MOVE:

                break;
        }
    }

    public static void Update(Long deltaTime) {
        if (isDown && isUp) {
            //event has happened
            isDown = false;
            isUp = false;
            down = null;
            up = null;

            Point vel = new Point();
            vel.x = down.x - up.x;
            vel.y = down.y - up.y;
            GM.getBallManager().newPlayerBall(down, vel);
        }

    }

}

4 个答案:

答案 0 :(得分:2)

此示例中的垃圾收集器将适当地处理不再使用的任何已分配内存。所以,这不会给你一个内存泄漏。重要的是要注意你仍然可以创建内存泄漏,我建议你查看如何在将来避免它们。

答案 1 :(得分:1)

Java是一种垃圾收集语言,你不会得到内存泄漏。但是,据说你可以泄漏本机资源,所以在完成它们时总是关闭文件,套接字,数据库游标等。

答案 2 :(得分:1)

不要担心,garbage collector会处理这个问题!

我认为只要提及垃圾收集器然后bla bla bla就不会在最大程度上帮助你。

由于Java具有GB,因此在Java中创建 true 内存泄漏并不容易! SO中有很多问题,如:Creating a memory leak with Java。您也可以阅读this文章,其中描述了内存泄漏的好例子。

以下内容可能会在java中发生内存泄漏:

  • 如果文件处理程序的数量超过(例如,多次打开文件输入/输出流而不关闭它)

  • 如果任何静态字段包含对象引用。

  • 锁定内存的任何Native方法都不在JVM垃圾收集器的范围内。这样会导致内存泄漏。

答案 3 :(得分:0)

Java有垃圾收集器。实际上,我在你的代码中看到了一个错误:

 case MotionEvent.ACTION_UP:
            Log.i("betterinf", "ACTION UP");
            down = new Point();
            up.x = (int) event.getX();
            up.y = (int) event.getY();
            isUp = true;

            break;

修改

 down = new Point();

 up = new Point();