问题内容: 有效的Java说: 内存泄漏的第三个常见来源是侦听器和其他回调。如果在客户端注册回调但未显式注销的情况下实现API,除非您采取某些措施,否则它们会累积。确保回调被及时垃圾回收的最佳方法是仅存储对其的弱引用,例如,通过仅将它们作为键存储在WeakHashMap中。 我是Java的初学者。有人可以教我如何在回调中创建弱引用,并告诉我它们如何解决内存泄漏问题吗?谢谢。 问题答案: 阅读这篇文
问题内容: 我正在使用derby作为嵌入式数据库。此外,我在单元测试中使用了它的内存数据库选项。 我不知道如何正确关闭(快速查看代码) Derby数据库。我相信我有它适用于标准数据库,但是在内存数据库中尝试类似代码时遇到了不同的异常。 我将省略细节,如果需要其他感觉,我将添加它们。 基本上,我试图以以下两种方式关闭数据库,在这种方式中,内存数据库始终被称为“ eh”: 然后: 前者导致例外,但例外
问题内容: 也许最典型的例子是JDBC关闭方式错误,并且未正确处理可能的异常。我很好奇看到您看到的其他示例-最好与Web应用程序相关。 那么,Java中是否有任何常见的泄漏模式? 问题答案: 根据我的经验,两个关键的“有效泄漏”模式是: 静力学和单例随着时间的推移逐渐增长。这可能包括缓存,实现不当和未使用的连接池,“自启动以来我们见过的每个用户”的字典等 从寿命长的对象到 打算 是寿命短的对象的引
问题内容: 我需要存储大量的日期(可能足够大,以至于需要考虑使用的堆空间量,因此请不要讲授过早的优化),我想知道使用某种原始表示是否有意义java.util.Date(或其他一些现有的Date类)的形式。我知道我可以进行一些性能分析来尝试一下,但是有人知道一个Date对象使用多少字节的内存吗? 问题答案: 我的直觉反应是Date的内存开销非常小。检查源代码,似乎该类仅包含一个实例字段(长为毫秒)。
问题内容: 我正在开发一个宠物的开源项目,该项目实现了一些流密码算法,并且只有在ARM处理器上运行该bug时,我才遇到问题。我什至尝试在qemu下的x86中运行ARM二进制文件,但该错误并未在那里触发。 该错误的具体机制仍然难以捉摸,但是我最好的选择是相信它是由程序中未对齐的内存访问尝试引起的,这是qemu实现的,但被开发板中的真正ARM处理器默默忽略了。 因此,由于该问题很难诊断,所以我想知道是
问题内容: 有没有可以运行命令行并报告峰值RAM使用总量的工具? 我在想类似/ usr / bin / time的东西 问题答案: 这是一种单行代码,不需要任何外部脚本或实用程序,也不需要您通过Valgrind或time之类的另一个程序来启动该过程,因此您可以将其用于已运行的任何过程: (用您感兴趣的过程的PID 代替)
问题内容: 年复一年,我试图了解部分与内存模型和并发交易的Java规范。我不得不承认我失败了。是的,我了解锁和“同步”,wait()和notify()。我可以很好地使用它们,谢谢。对于“ volatile”的作用,我什至不清楚。但是所有这些都不是来自语言规范,而是来自一般经验。 这是我要问的两个示例问题。我对特定答案不太感兴趣,因为我需要了解答案是如何从规范中得出的(或者可能是我得出结论,规范没有
问题内容: 我正在接管以前的开发人员的一些应用程序。当我通过Eclipse运行应用程序时,我看到内存使用率和堆大小增加了很多。经过进一步调查,我发现他们正在循环创建一个对象以及其他东西。 我开始经历并做一些清理。但是,我经历的时间越长,我就会遇到更多的问题,例如“这实际上会做什么?” 例如,他们没有在上述循环之外声明变量,而只是在循环中设置其值…而是在循环中创建了对象。我的意思是: 与 我不正确地
问题内容: Dalvik的内存模型与Java的相同吗?我对引用和非/非原始变量的读写是否是原子的特别感兴趣,但是我也想知道两个平台的内存模型之间是否存在差异。 问题答案: 从4.0(冰淇淋三明治)开始,Dalvik的行为应与JSR-133(Java内存模型)相匹配。 从3.0(Honeycomb)开始,大多数组件都已安装到位,但忽略了一些在实践中很难遇到的小事情(例如,最终确定中的一些边缘案例)。
问题内容: 我在Java中的总的初学者和已经创建了一个简单的Java的Android片断其中一个Runnable 1,5秒钟后,我改变从到。它工作正常,基本上应该防止这种内存泄漏发生吗?我怀疑在发生设备定向时是否绝对没有内存泄漏。我很乐意对此进行检查,但无法在模拟的Android中更改方向。 这是代码: 编辑 它可以防止内存泄漏,但也有一些答案与UI线程阻塞有关。实际上,此代码在主(UI)线程中运
问题内容: 我目前正在学习并发编程考试,不理解为什么该程序的输出为43。为什么以前执行?我还应该解释使用规则之前发生的情况。 如果我了解程序顺序规则(线程中的每个动作发生在该线程中的每个动作发生在程序顺序的后面)必须先执行,以便线程t复制变量为1。 问题答案: 根据JMM: 在启动线程中的任何操作之前,都会在线程上调用start()。 和 如果x和y是同一线程的动作,并且x按程序顺序位于y之前,则
问题内容: 我需要存储大量信息,例如在Java List中存储“名称”。项目的数量可以更改(或者简而言之,我无法预定义大小)。我认为从内存分配的角度来看,LinkedList比ArrayList更好,对于ArrayList,一旦达到最大大小,内存分配将自动加倍,因此总有可能分配比需要什么。 我从这里的其他文章中了解到,存储在LinkedList中的各个元素比ArrayList占用更多的空间,因为L
问题内容: 我想创建一个LinkedHashMap,它将根据可用内存(即,当低于某个阈值时)限制其大小。这将用作缓存的一种形式,可能使用“最近最少使用”作为缓存策略。 不过,我担心的是,allocatedMemory还包括(我认为)垃圾回收的数据,因此将高估已使用的内存量。我担心这可能会带来意想不到的后果。 例如,LinkedHashMap可能会继续删除项目,因为它认为没有足够的可用内存,但是可用
问题内容: 如果我在开发模式下的eclipse中运行GWT应用程序,然后在浏览器中单击一段时间,我总是会在eclipse中收到“内存不足”错误。我的计算机具有16 GB的Ram,并且从未使用超过8GB的内存。 我尝试了几个配置参数。我的“运行”配置中的VM参数包含以下参数:“ -Xms8192m -Xmx8192m” 即使在eclipse.ini中,我也测试了几个配置参数,现在看起来像这样: 但是
问题内容: 如果我有: 和 通常 一个数组 如何同时考虑引用变量来计算实际内存使用量? 问题答案: 如果您想要一个准确的答案,那就不能了。至少不是以任何简单的方式。该主题说明更多。 Bragaadeesh和Bakkal的答案的麻烦在于它们忽略了开销。每个数组还存储诸如它具有的维数,它有多长时间以及垃圾收集器使用的一些东西之类的东西。 对于简单的估算,应该使用其他答案中的计算并加上100-200字节