【发布时间】:2011-09-03 17:17:33
【问题描述】:
我有一个应用程序执行一组非常连续的离散任务。
我的问题是第一个任务消耗大量内存,尽管消除了对象引用并调用了垃圾收集器,但实际上只有大约一半的内存被释放。这会影响以后的任务。问题还在于我想暂时授予 JVM 一个大堆来有效地管理第一个任务,但我不希望它一直存在,直到 GC 决定释放其余部分是有效的。
我有在线程内执行内存密集型任务的想法;新的子线程使用父 JVM(这并不奇怪),但内存管理似乎没有变化。
Java 如何处理线程内存?有没有一种简单的方法可以为子线程创建一个子堆,可以在线程完成后转储?
作为附录,这是我真正想做的:
- 设置 Neo4j 图形数据库(我正在创建数百万个节点、属性和关系以及大量索引)[内存密集型]
- 对图形数据库执行查询
【问题讨论】:
-
您是否真的在任何时候都耗尽了内存?如果是这样,请增加 VM 的内存。如果没有,不要费心去理解 VM 是如何处理内存的。任何这样做的尝试都只会导致可怕的代码在 VM 更改其处理内存的方式时中断。
-
我确实内存不足;我本可以增加 JVM 内存,但我不希望有那么多内存可供其余代码使用。此外,概念证明的重点是尽可能少地运行它。我发现有很多很好的方法可以直接为 neo4j 配置内存管理(请参阅下面的标记答案)。我同意你的想法,即出于实际目的不用费心去欺骗内存管理和 GC,但探索可能性仍然很有趣;)
标签: java multithreading memory neo4j