当前位置: 首页 > 知识库问答 >
问题:

内存泄漏,Android的spring

邓才
2023-03-14

我有一个潜在的内存泄漏在我的代码,我正在试图找到一个解决方案。我使用的是Android框架的spring。更具体的是

  RestTemplate.exchange();

为了使一个即时装订。然而,当我进行内存html" target="_blank">分析时,我得到了以下结论:

由“Dalvik.System.PathClassLoader@0x43692B80”加载的1.628个“com.products.product”实例占用1.363.064(22,20%)字节。这些实例是从“java.lang.Object[]”的一个实例引用的,由“”加载。支配树如下所示:

类com.products.productlist@0x436D7EA8系统类1.628 8 130.240 8

mFilteredProducts java.util.ArrayList@0x43A4EAB0 1.628 24 130.240 6.552

数组java.lang.Object[1628]@0x43BDC888 1.628 6.528 130.240 6.528

[274]com.products.product@0x4398B038 1 80 80 760

[1175]com.products.product@0x43B26868 1 80 80 808

........

上面这棵是支配树。然而,我想知道是否有一个安全的方法来激活垃圾收集器。是

  System.gc();

安全?但是,有没有一种方法可以停止服用这种内存泄漏?类com.products.product只是一个简单的POJO,它将JSON字段绑定到相应的属性。通常,用于绑定JSON的POJO如下所示:

@JsonIgnoreProperties(ignoreUnknown = true) //must be there all times most likely
public class MyPojo {

@JsonProperty("Products")
private ArrayList<Product> products;

public ArrayList<Product> getProducts() {
    return products;
}

public void setProducts(ArrayList<Product> products) {
    this.products = products;
}
}

com.products.product:

@JsonIgnoreProperties(ignoreUnknown = true) //must be there all times most likely
public class Products {

 @JsonProperty
 private String prodnum;
 @JsonProperty
 private String brand;
 @JsonProperty
 private String name;

       //get/set
}

共有2个答案

佴德曜
2023-03-14

system.gc()是安全的,正如@wajda已经说过的

今天我在桌面应用程序中遇到了类似的问题,问题是我没有在使用后关闭PreparedStatement和ResultSet对象。在大约600个查询之后,我填充了256MB的分配空间。在使用JVisualVM(您应该在您的JDK中拥有它)并分析了什么是堆积如山之后,我看到char数组占用了80%的空间,而且它们都是空的。

尝试在每次使用后关闭所有JSON对象,看看是否有帮助。

干杯

沈枫涟
2023-03-14

调用system.gc()是安全的。但它并不一定会触发实际的垃圾收集。调用此方法只是建议JVM尽一切努力执行垃圾回收。但Java没有办法强迫它。

关于内存泄漏的事。看看ProductList,为什么它包含所有这些对象。如果ProductList仍然从应用程序中的任何地方引用,那么将不会发布所有这些产品。

 类似资料:
  • 问题内容: 我认为我的android应用正在泄漏内存。我不是绝对确定这是问题所在。 应用程序打开时经常崩溃,并且logcat尝试加载位图图像时会显示“内存不足”异常。 崩溃后,我重新打开了该应用程序,它运行正常。Logcat会显示许多“ gc”,并且JIT表会不时地向上调整大小,而不会向下调整,直到应用程序因内存不足错误而崩溃。 这听起来像是内存泄漏吗?如果是这样,我该如何定位和关闭泄漏点。 这是

  • 我担心从泄漏金丝雀回来的信息。它显示了在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 请提出解决方案

  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收 我会从 java 内存泄漏的基础知识开始,并通过具体例子来说明 Android 引起内存泄漏的各种原因,以及如何利用工具来分析应用内存泄漏,最后再做总结。 篇幅有些长,大家可以分几节来看! Java