我有一个后台服务正在运行,它正在将数据同步到我的服务器。
泄漏发生在以下代码中:
DBCommunicator dataObj = (DBCommunicator) Class.forName(task.getDbObject()).getDeclaredConstructor(cArg).newInstance(context, DBCommunicator.normalDBSettings);
DBCommunicator oldData = (DBCommunicator) dataObj.getClass().getDeclaredConstructor(cArg).newInstance(context, DBCommunicator.sendNotiDBSettings);
DBCommunicator newData = (DBCommunicator) dataObj.getClass().getDeclaredConstructor(cArg).newInstance(context, DBCommunicator.sendNotiDBSettings);
if (dateFrom == null) {
dateFrom = "";
}
url = CommonFunctions.getWebserviceUrl(context) +
task.getUrl() + "&from=" + URLEncoder.encode(dateFrom, "UTF-8") + "&to=" +
URLEncoder.encode(dateUntil, "UTF-8");
GetJSONFromUrl manager = new GetJSONFromUrl();
ArrayList<?> jsonObject = manager.getJSONfromURL(url);
//ArrayList<?> jsonObject = null;
if (jsonObject == null) {
throw new Exception("JsonObject is null");
}
HashMap<String, String> values;
for (int i = 0; i < jsonObject.size(); i++) {
values = (HashMap<String, String>) jsonObject.get(i);
try {
if (values.get("Id") == null) {
throw new Exception("Parameter Id nicht gesetzt");
}
oldData.getSingleDataForField("Id", values.get("Id"));
if (values.get("Geloescht") != null && values.get("Geloescht").equals("1")) {
oldData.deleteData(true);
} else {
newData.setDataFromRecord(values);
if (!oldData.equals(newData)) {
oldData.deleteData(true);
newData.insertData();
}
}
values = null;
} catch (DBDataNotExists e) {
if (!(values.get("Geloescht") != null && values.get("Geloescht").equals("1"))) {
oldData.setDataFromRecord(values);
oldData.insertData();
}
e = null;
}
values = null;
}
dataObj.clean();
dataObj.doAfterSync();
dataObj = null;
oldData.clean();
oldData = null;
newData.clean();
newData = null;
manager = null;
jsonObject = null;
dataObj = null;
内存分析器显示:
stockserv.datasyncer.jobexecutor@0x135f6550上的线程保留了总大小为18.603.056(37,90%)字节的局部变量。内存累积在“”加载的“java.lang.Object[]”的一个实例中。
JobExecutor->Arraylist->Object[21079]->java.util.HashMap
我不知道这么多的HashMap或Arraylist是从哪里来的。
我的JSON对象ArrayList刚刚迭代过,我将其设置为NULL。
也许有人能给我一个提示从哪里开始找?
问题内容: 我认为我的android应用正在泄漏内存。我不是绝对确定这是问题所在。 应用程序打开时经常崩溃,并且logcat尝试加载位图图像时会显示“内存不足”异常。 崩溃后,我重新打开了该应用程序,它运行正常。Logcat会显示许多“ gc”,并且JIT表会不时地向上调整大小,而不会向下调整,直到应用程序因内存不足错误而崩溃。 这听起来像是内存泄漏吗?如果是这样,我该如何定位和关闭泄漏点。 这是
问题内容: 您如何找到Java中的内存泄漏(例如使用JHat)?我试图在JHat中加载堆转储,以进行基本了解。但是,我不明白我应该如何找到根引用(ref)或任何被称为根引用的东西。基本上,我可以说哈希表条目有几百兆字节([java.util.HashMap $ Entry或类似的东西),但是地图到处都是……使用某种方法可以搜索大型地图,还是找到大对象树的一般根? [编辑]好的,到目前为止,我已经阅
我担心从泄漏金丝雀回来的信息。它显示了在UI上声明的所有变量,如片段中的材料按钮、材料卡片视图、文本视图、图像视图等,都导致了内存泄漏。我不知道为什么会这样。
我正在Android应用程序中使用一些本机库,我想在某个时间点从内存中卸载它们。当装入本机库的类的类装入器被垃圾回收时,库被卸载。灵感:本土卸载。 如果ClassLoader用于加载某些类(可能导致内存泄漏),则不会收集垃圾。 本机库只能在应用程序中的一个ClassLoader中加载。如果仍然有旧的ClassLoader挂在内存中的某个地方,并且一个新的ClassLoader试图在某个时间点加载相
我正在使用libgdx制作一个实时壁纸应用程序,根据时间改变资产。对于e、 g从早上6点到下午6点,我有“早上图形”,之后我有“晚上图形”,从下午6点到早上6点。 我构建资产的方式如下 我有12个AtlasRegion类型的静态数组,1个静态纹理区域变量和1个静态纹理变量。 我有两个静态函数load晨()和loadEnight()用于加载资产。 在funcions中,我加载如下 对于所有数组,如果
我在继续我的游戏超过8次后,我得到了OutOfMemory错误,因为堆逐渐填充。在使用MAT分析我的游戏堆时,我知道以下2个原因: 关键词Android.Graphics.Bitmap Byte[] 关键词java.lang.Object[]Android.content.res.resources 请提出解决方案