String type = “ClassNames”;
MyInterface mi = (MyInterface) constructor.newInstance(type);
在我的程序中多次调用上面的代码片段(大约3000个类),这导致堆空间错误。 堆大小达到1024mb。 保持堆大小的任何解决方法? 谢谢!
界面
public interface MyInterface {
public String[] getRowHeader();
public String[] getHeaderTable();
public String[][] getDataForSearch();
public String getInfoText();
}
公共类实施
public TablePanel() {
try {
guiInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
这个guiInit()执行swing组件初始化。
在同一个类中,方法如下所示实现
public String[][] getDataForSearch()
{
return rowNames;
}
答案 0 :(得分:1)
没有人知道你在代码中做了什么,没有人能够帮助你。解决方案取决于你在做什么。
有内存泄漏吗?比如,你仍然持有对不再需要的对象实例的引用,这会阻止GC释放内存吗?
如果你确实需要那么多实例,你可以考虑对你的类进行一些重新设计,以减少内存,例如,使用Fly-weight模式,或尝试重用已经创建的实例,或者使用更多实例节省空间的数据结构等。
另外,请考虑重新设计逻辑,以避免分配那么多对象。例如,如果您的应用程序正在处理输入文件,请避免“读取整个文件并将其全部转换为POJO,然后执行逻辑”。看看你是否可以“部分读取文件并创建相应的POJO,为该部分做逻辑,然后转到下一部分”。