要从任何课程中读取和写入的矩阵

时间:2015-02-05 08:54:58

标签: java matrix

我正在运行一个包含60多个课程的Java程序。最重要的项目是matrix[210][20],可以从几个不同的类中读取和写入 此时,矩阵作为参数传递给需要访问它的类。据我所知,我相信这会导致这个矩阵的内存空间翻倍 现在我需要再添加3个更大的矩阵([1390][20]),所以我不敢遇到麻烦(此刻的内存使用率已经达到+/- 50%!)。
我确信应该有一个更好的方法来处理这个问题,我环顾四周尝试但总是卡住并且无法正确处理。
请指教!

2 个答案:

答案 0 :(得分:1)

在Java中,方法参数(至少是对象)通过引用传递,因此您的设计模式不一定会导致资源泄漏。不过,您可以使用静态字段来存储变量并编写静态访问器:

public final class Matrix {

    private static final Object[][] matrix = new Object[1390][20];

    static {
        // fill matrix if necessary
    }

    public static Object[][] getMatrix() {
        return matrix;
    }

}

然后在代码中使用Matrix.getMatrix()。请记住,如果从不同的线程访问矩阵,这可能会导致问题。

答案 1 :(得分:1)

Veronique,我认为在看矩阵时,你看错了地方。

我提到的double矩阵不应占用过多的空间。

即使它是一个物体矩阵,你仍然可以更好地观察物体本身,而不是矩阵,并且可能使用类似flyweight pattern的东西。

此时我认为最好的办法是实际检查程序运行时发生的事情,而不是根据自己的分析进行猜测。

为此,您应该使用像jvisualvm这样的工具进行调查,这样可以非常快速地暴露出如此大小的内存消耗热点。

FYI java中内存泄漏的常见原因是对Collections中闲置的旧对象的引用,例如MapList,所以我建议您检查一下。另外,看看你是否正在创建矩阵对象的重复实例(实际上在几千个副本之后很快会耗尽你的内存:)。