问题标签 [java-memory-leaks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
179 浏览

memory-leaks - 使用 JavaFX-3D 创建动画时内存泄漏

我构建了一个 JavaFX(8) 3D 应用程序,它从某个文件中读取数据并将其呈现在某个场景中。

为了渲染一个对象,我使用:

当我注释掉这一行时,为了禁用渲染,我根本没有内存泄漏。

但是当这条线运行时,应用程序会消耗越来越多的内存。我每秒有 30 帧,每秒内存消耗增加约 50MB。

这当然是,尽管在我使用的帧之间:

我分配给的 3D 对象graphicsContainer是本地的,不会保存在任何静态/全局范围内。它们仅保存为 的子级graphicsContainer,在每一帧上都会被清理。

尽管我每次删除graphicsContainer.

知道如何让 JavaFX 3D 引擎释放过去的 3D 对象和渲染吗?

0 投票
1 回答
2878 浏览

java-8 - 内存不足:Java 8 的元空间

我的产品有 256 MB 的 RAM。我已经将java 6升级到java 8。然后我开始面临与java 8相关的内存问题。随着Java 8的使用内存消耗在增加使用相同的代码,java 6的内存消耗是稳定的 我已经探索了很多关于元空间,java8并在元空间参数下方找到。

我尝试了以下组合并出现内存不足错误

1.MaxMetaspaceSize 50M MaxMetaspaceFreeRatio 60M MinMetaspaceFreeRatio 50M

2.MaxMetaspaceSize 30M

3.MaxMetaspaceSize 40M

4.MaxMetaspaceSize 50M

5.MaxMetaspaceSize 80M

但 2 到 3 小时后,出现内存不足元空间错误。

有人能解释一下元空间选项 MaxMetaspaceSize,MaxMetaspaceFreeRatio ,MinMetaspaceFreeRatio 是什么吗?

我如何确定合适的尺寸是多少?这些值的正确组合是什么,以避免生产中的内存不足实例并减少内存消耗?

0 投票
1 回答
302 浏览

groovy - GroovyCategorySupport 和“系统”内存泄漏

当我运行以下 JUnit 测试时,java 进程的内存不断增加。几个小时后,它使用了 2go 以上。但是,当我查看 jvisualvm 时,堆和 permgen 大小是稳定的,我看不到任何泄漏。测试运行-Xmx32m

我已经用 Groovy 2.4.7、Windows 和 JRE1.7_80、MacOS 和 JRE1.7_60 对其进行了测试。我无法使用 MacOS 和 JRE 1.8.0_91 重现此错误

我想这与 JRE1.7 中的一个错误有关,我正在寻找一种方法来缓解这个问题:

  • 我的测试可能是错的?如何在不泄漏堆空间或 permgen 空间的情况下泄漏“系统”内存?
  • 它是 Groovy 和 JRE 1.7 之间的“已知”错误或不兼容吗?
  • 如何使用 1.7 jre 的 groovy 类别而不会遭受这种内存泄漏?

编辑

我可以通过调用来重现这个错误VMPluginFactory.getPlugin().invalidateCallSites(),它用这个“纯java”单元测试翻译:

其实只要new SwitchPoint()够用。

0 投票
1 回答
1263 浏览

java - JFrame 永远不会被垃圾回收

我有一个需要打开多个 JFrame 的应用程序(它是一个日志查看器,有时您需要在单独的窗口中查看一堆日志进行比较)。

似乎 JVM(OS X 上的 Java 8 更新 101)持有对 JFrame 的强引用,这会阻止它被垃圾收集,并最终导致抛出 OutOfMemoryError。

要查看问题,请以 200 兆字节的最大堆大小运行此问题。每次打开一个窗口,都会消耗 50 兆字节的 RAM。打开三个窗口(使用 150 兆字节的 RAM)。然后关闭三个窗口(调用 dispose),这应该释放内存。然后尝试打开第四个窗口。抛出 OutOfMemoryError 并且第四个窗口没有打开。

我已经看到其他答案指出内存将在必要时自动释放以避免用完,但这似乎并没有发生。

0 投票
1 回答
1075 浏览

javafx - JavaFX、TreeTableView、RowFactory 和内存泄漏

我正在使用 JavaFX TreeTableView 来显示销售订单。父行包含“主”记录,子行包含有关订单的信息,包括订购的每个产品的行项目。我正在使用 RowFactory 根据其当前状态突出显示表中的行。RowFactory 的代码以以下代码开头:

如您所见,每次调用行工厂时,Callback 都会返回一个新的 TreeTableRow。根据 JavaFX 8.0 文档,系统负责管理行的创建,并在适当的时候重用它们。System.out.println 调用记录了该方法被调用的次数。多次上下滚动表格,以及更新销售数据库导致的数据刷新,导致该方法在较短的时间内被调用数万次。随着最终用户广泛使用 TreeTableView,我在程序中的内存使用量继续增长。

分析应用程序表明 HashTable 和 PsuedoClass(我相信 css 的东西)以及诸如 byte[] 和 char[] 和 int[] 之类的东西正在使用非常大量的内存。我尝试了堆大小和垃圾收集器的不同组合,但最终结果总是相同的,因为应用程序最终会耗尽堆空间。

搜索答案表明有些人遇到了这个问题,我发现如果我不做任何行突出显示,从而不调用行工厂,程序在管理内存方面要好得多。任何人都对可能导致此问题的原因或可能的解决方案有任何见解?

0 投票
2 回答
427 浏览

android - Android:内存泄漏

我在我的使用下面的代码activity class

在我的onCreate使用中:

但它会引发如下错误:

我需要使用它,static因为我将在我的Service class.

我的CloseActivies.class

0 投票
2 回答
4774 浏览

java - 使用球衣的 JAX RS 的内存问题

我们目前在生产服务器上遇到了一些麻烦,因为它消耗了太多内存。其中一个泄漏可能来自球衣客户。我发现了以下两个其他问题以及如何:

  1. 如何正确共享 JAX-RS 2.0 客户端
  2. 关闭 JAX RS 客户端/响应
  3. https://blogs.oracle.com/japod/entry/how_to_use_jersey_client

我从中得到什么,我应该重用客户端,还可能重用 WebTargets?还建议关闭响应,但是如何使用 .request() 执行此操作?

代码示例,每小时用不同的路径调用大约 1000 次:

所以我的问题是如何正确使用 API 来防止上述示例的泄漏?

0 投票
0 回答
462 浏览

java - 调整 JVM 参数以避免 java.lang.OutOfMemoryError: PermGen space

我经常收到错误“ java.lang.OutOfMemoryError: PermGen space ”(每周 1-2 次),我无法定位问题。

线程转储显示没有阻塞进程。发生此错误时无法进行堆转储(即使参数Heap dump on OOME: enabled)。重新启动 JVM 时我尝试了很多选项,但没有任何帮助。也许有人知道从 Java VisualVM 看到这个屏幕截图会有什么问题?

雄猫 6,Java 1.6。

概述JVM参数: 在此处输入图像描述

监视器: 在此处输入图像描述

监视器(PermGen):在此处输入图像描述

0 投票
0 回答
375 浏览

java - 切换 gif 时应用程序被杀死

我正在编写一个 android 应用程序,当用户单击 gif 图像时,我想在其中切换两个 gif 图像。

我已经编写了以下代码来在 gif 之间切换。

“setGifImageResource”的代码是

OnDraw 方法如下

问题是当我长时间在 gif 之间切换时。应用程序崩溃,但日志中没有致命错误。只有我可以看到以下日志。

08-22 13:47:25.091 3704 3922 I WindowManager: WIN DEATH: Window{f737847d0 u0 com.jijith.gifanimation/com.jijith.gifanimation.MainActivity} 08-22 13:47:25.091 3704 3922 D WindowManager: disposeInputChannel mInputChannel: f737847 com.jijith.gifanimation/com.jijith.gifanimation.MainActivity(服务器)08-22 13:47:25.091 3704 3878 W Looper:忽略 fd 407 上不再注册的意外 epoll 事件 0x19。08-22 13:47:25.092 3704 4951 I ActivityManager: 进程 com.jijith.gifanimation (pid 27542) 已死亡 (2665,191)

08-22 13:47:25.093 3704 3878 D InputDispatcher:等待应用程序准备好输入:27542。原因:等待,因为触摸窗口的输入通道未向输入调度程序注册。该窗口可能正在被移除。08-22 13:47:25.093 3704 3878 D InputDispatcher: 找不到连接 ~ name='f737847 com.jijith.gifanimation/com.jijith.gifanimation.MainActivity (server)', fd='407', p='0x7d35b68420 '

08-22 13:47:25.098 3704 4951 W ActivityManager:强制删除 ActivityRecord{74e4a0ad0 u0 com.jijith.gifanimation/.MainActivity t195}:应用程序死亡,没有保存状态

08-22 13:47:25.220 3704 4951 I WindowManager_SurfaceController: com.android.server.wm.WindowStateAnimator.destroySurface:2905 com 调用的破坏表面 Surface(name=com.jijith.gifanimation/com.jijith.gifanimation.MainActivity)。 android.server.wm.WindowStateAnimator.destroySurfaceLocked:1119 com.android.server.wm.WindowState.removeLocked:1860 com.android.server.wm.WindowManagerService.removeWindowInnerLocked:2928 com.android.server.wm.WindowManagerService.removeWindowLocked:2873 com.android.server.wm.WindowManagerService.removeWindowLocked:2683 com.android.server.wm.AppWindowToken.removeAllWindows:608 com.android.server.wm.AppWindowToken.removeAppFromTaskLocked:37

0 投票
0 回答
148 浏览

android - Google 搜索小部件泄漏了侧系统服务器中的内存。如何从平台端(从框架端)解决此内存泄漏

当我们在主屏幕上使用 Google 搜索小部件时,我观察到系统服务器内部的内存泄漏。每次点击主页按钮时,Google 小部件都会更新,并持有com.android.server.appwidget.AppWidgetServiceImpl类的多个引用

查看以下来自内存分析工具的分析报告。

由“ dalvik.system.PathClassLoader @ 0x12c1d220 ”加载的“ com.android.server.appwidget.AppWidgetServiceImpl ”的一个实例占用了47,168,416(65.38%)字节。内存在“ dalvik.system.PathClassLoader@0x12c1d220 ”加载的“ com.android.server.appwidget.AppWidgetServiceImpl ”的一个实例中累积。

堆转储分析 MAT 屏幕截图

重现问题的步骤:

  1. 恢复出厂数据。
  2. 使用 Google 登录帐户完成设置向导。
  3. 不要断开互联网连接。
  4. 从最近的选项卡中清除所有应用程序。
  5. 按HOME键>>等待1秒>>按最近的应用程序键>>等待1秒>>按HOME键等待1秒。
  6. 重复步骤 5 多次(100 次)并使用以下命令观察系统服务器堆内存

adb shell dumpsys meminfo

我观察到“Dalvik Heap”中“Heap Size”和“Heap Alloc”列的增加

在之前和之后找到以下堆大小。

system_server 内存信息详细信息

如果我禁用了谷歌搜索应用程序,则不会观察到系统服务器内存泄漏。

我是内存泄漏问题调试的新手。帮助得出结论,谁在吃侧系统服务器中的堆大小,为什么?

谢谢