问题内容: 我有一个行为异常的应用程序,似乎在泄漏。经过简要的探查器调查后,大多数内存(80%)由实例保留。我怀疑终结器无法运行。 造成这种情况的常见原因似乎是终结器抛出异常。但是,该类方法的javadoc (例如参见此处)似乎自相矛盾:它指出 如果finalize方法抛出未捕获的异常,则该异常将被忽略,并且该对象的终止将终止。 但后来,它也指出 由finalize方法引发的任何异常都会导致该对象
问题内容: 当我使用JNI方法构建Java对象时,为了将其作为参数传递给我使用JNI调用API进行调用的Java方法,如何管理它的内存? 这是我正在处理的内容: 我有一个C对象,该对象的析构函数要复杂得多。这个C对象将与Java对象相关联,一旦应用程序完成了Java对象,我将不再需要C对象。 我正在这样创建Java对象(为了清楚起见,省略了错误检查): 那么,既然我已经完成了,该怎么办?理想情况下
问题内容: 我不是在谈论String类或哈希码被覆盖的任何其他类。假设如果我只是创建该类的新对象,那么在任何情况下the或true 都将返回该对象的内存地址? 问题答案: 不必要。从文档(重点是我的): 在合理可行的范围内,由Object类定义的hashCode方法确实为不同的对象返回不同的整数。(通常通过将对象的内部地址转换为整数来 实现 , 但是JavaTM编程语言不需要这种实现技术 。)
问题内容: 我了解到,哈希码是一个唯一标识参考号,它是一个十六进制数。 我的疑问是,参考数字代表对象的内存地址吗? 例如: 这段代码会返回我对象的内存地址吗? 问题答案: 哈希码不是唯一的标识。它只是一个数字,可以帮助您区分对象。两个不同的对象可能具有相同的哈希码,这很好。 HashCode特征: 如果obj1和obj2相等,则它们必须具有相同的哈希码。 如果obj1和obj2具有相同的哈希码,则
问题内容: 由于GWT是用javascript编译且代码是用JAVA编写的事实,解决GWT内存泄漏的最佳方法是什么? 问题答案: 我可以推荐2件事: 阅读这篇文章 处理完所有引用后,将其无效。 祝好运!
问题内容: 该MMAP文件说,下面讲的标志MAP_NORESERVE。 不要为该映射保留交换空间。当保留交换空间时,可以保证可以修改映射。如果没有保留交换空间,则在没有物理内存可用的情况下,可能会在写入时获得SIGSEGV。 我真正想要的只是保留虚拟内存地址,而没有分配实际的物理内存。可以使用MAP_NORESERVE的mmap来完成此操作吗?如果我想使用任何物理内存,我将在MAP_NORESER
问题内容: 当我使用固定内存进行CUDA数据传输时,我发现数据传输速度大大提高。在linux上,实现此目标的底层系统调用是mlock。从mlock的手册页中可以看出,锁定该页可防止将其换出: mlock()将页面锁定在地址范围内,该地址范围从addr开始并持续len个字节。当调用成功返回时,保证所有包含指定地址范围一部分的页面都驻留在RAM中; 在测试中,我的系统上有几千个可用内存,因此从不存在内
问题内容: 我怀疑我们的ActiveMQ连接桥中存在严重的内存泄漏- 我们看到的是典型的内存泄漏模式(应用程序加载正常,如果长时间运行或在短时间内一次又一次地重新启动,则会降低速度) 。我查找了发现Java内存泄漏的现代最佳实践,许多开发人员似乎正在放弃传统工具(如jhat / jmap)来代替new(er)。 启动此工具(并花几个小时阅读其教程)后,我便能够为CPU和内存拍摄探查器快照。 在这一
问题内容: 我正在遍历String类API,由于子字符串方法与原始String共享相同的字符数组,因此似乎存在潜在的内存泄漏。 如果原始字符串很大,则子字符串返回的小字符串可以防止原始字符串(由大数组备份)被Java垃圾回收。 任何想法或我读错了API。 问题答案: 还有 就是 对内存泄漏潜在的,如果你把一个相当大的字符串的一个子并不能复印(通常是通过构造函数)。 请注意,自Java 7u6以来,
问题内容: 我对JVM内存管理(至少对于SUN的内存管理)有疑问。 我想知道如何控制JVM将未使用的内存发送回OS(以我的情况为Windows)的事实。 我编写了一个简单的Java程序来说明我的期望。使用- Dcom.sun.management.jmxremote选项运行它,以便例如也可以使用jconsole监视堆。 使用以下程序: 一旦第一个GC完成(预期),内部堆就释放了,但是内存仅从第三个
问题内容: AFAIK,Java中的内存基于堆,动态地将内存从堆分配给对象,并且没有共享内存的概念。 如果没有共享内存的概念,那么Java程序之间的通信应该很耗时。在C中,与其他通信方式相比,通过共享内存进行进程间通信更快。 如我错了请纠正我。这也是2个Java编排互相交谈的最快方法。 问题答案: 由于没有用于创建共享内存段的官方API,因此您需要使用帮助程序库/ DDL和JNI来使用共享内存来使
问题内容: 我是所有内存管理主题的新手,所以有很多我不了解的事情。 我正在尝试将图像缓存在我的应用程序中,但是我在内存消耗方面遇到了麻烦: 所有的Bitmap Chaching代码都可以从此处复制粘贴:http : //developer.android.com/training/displaying- bitmaps/index.html 我调试了代码,并在Eclipse的DDMS视图中检查了堆
问题内容: 如何在内存中(而不是在硬盘上)创建新的(由)? 我正在使用Java语言。我不想将文件保存在硬盘上。 我遇到了一个错误的API()。期待着。我没有文件(只有内容),可以创建临时文件,但这不是一个漂亮的解决方案。我需要验证签名罐子的摘要。 在不创建临时文件的情况下如何获得清单的任何示例将不胜感激。 问题答案: 要在内存中写入流,请使用:
问题内容: 我在centos Box中运行了一个Java程序。我的-Xmx和-Xms设置为4000 Mb。 该程序工作正常。 但是当我执行free -m时,已用内存显示为506 MB。据我了解,XMS内存应为JVM保留。 我也做了jstat -gccapacity $(pidof java),并且更新了NGCMN和NGCMX并具有相同的值?任何支持都会有所帮助。我正在以 java -Xms4100
问题内容: Tomcat 5.5.x和6.0.x Grails 1.6.x Java 1.6.x OS CentOS 5.x(64位) VPS服务器,内存为384M JAVA_OPTS:尝试了许多组合-包括以下内容 出口JAVA_OPTS =’-Xms128M -Xmx512M -XX:MaxPermSize = 1024m’ 导出JAVA_OPTS =’-server -Xms128M -Xmx