我正在运行一个包含60多个课程的Java程序。最重要的项目是matrix[210][20]
,可以从几个不同的类中读取和写入
此时,矩阵作为参数传递给需要访问它的类。据我所知,我相信这会导致这个矩阵的内存空间翻倍
现在我需要再添加3个更大的矩阵([1390][20]
),所以我不敢遇到麻烦(此刻的内存使用率已经达到+/- 50%!)。
我确信应该有一个更好的方法来处理这个问题,我环顾四周尝试但总是卡住并且无法正确处理。
请指教!
答案 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
中闲置的旧对象的引用,例如Map
和List
,所以我建议您检查一下。另外,看看你是否正在创建矩阵对象的重复实例(实际上在几千个副本之后很快会耗尽你的内存:)。