我正在编写一个程序,现在基本上是这样的:在随机时间到达每条道路上的汽车有4路停车。每条道路都服务于FCFS,并且交叉路口管理为循环赛风格,每次有1辆车过境。每辆等车都是一条线。我已经获得线程同步和算法工作没有问题。我无法弄清楚的问题是如何防止错误:OutOfMemoryError:无法创建新的本地线程。我意识到这是由于堆(堆栈?我总是让它们切换)变满。我找不到一种方法来确保执行的线程由垃圾收集器正确管理,并且不会在执行后在内存中徘徊。我试着用软引用来设置我的队列(每条“汽车线程的道路”),并将任何硬引用归于无效。这里的任何人都有这方面的经验!?谢谢!!!java线程内存管理问题
1
A
回答
0
您是否试过使用ThreadPool?
您可以从Java 5开始创建一个ThreadPool,其中您决定了Vm应为您初始化多少个线程算法。线程被创建并重用。
我有一个类似的问题。线程不会被GarbageCollector删除/删除,并以某种方式永远活着。
2
“OutOfMemoryError:无法创建新的本地线程”是否而不是是指堆内存。它不会帮助您清零引用或使用软/弱引用。此外,增加堆的大小只会让事情变得更糟。
Java为线程堆栈使用本地内存。每次启动一个线程时,都会在JVM堆外部分配一个新的堆栈。直到线程终止,堆栈才会被释放。考虑使用较少的并发线程(例如,您可以通过使用ThreadPoolExecutor来控制数量),或者可以减小堆栈大小(使用-Xss {size} k)
另请参阅this post,其中详细说明了许多类型的内存不足错误。
0
这只会发生,如果你有太多的运行线程。 (不只是线程的引用)像@Markus,我建议您切换到像ExecutionService一个线程池,因为它会管理线程的创建和它的作品。
BTW:并发库的历史可以追溯到1998年,但仅包含在Java 5.0中(2005年),所以如果你必须有一个旧版本,你可以使用的或者下行移植原始库。
相关问题
- 1. 内存管理的Java线程
- 2. 内存管理问题
- 3. iPhone - 内存管理问题?
- 4. NSTimer内存管理问题
- 5. 内存管理问题
- 6. NSIndexPath内存管理问题
- 7. EXC_BAD_ACCESS内存管理问题
- 8. 内存管理问题
- 9. EXC_BAD_ACCESS - 内存管理问题
- 10. UIViewController内存管理/问题?
- 11. iPhone - 内存管理问题
- 12. 内存管理问题
- 13. 内存管理问题
- 14. SQLite +内存管理问题
- 15. Android内存管理问题
- 16. iPhone内存管理问题
- 17. 内存管理问题
- 18. 内存管理问题
- 19. 线程管理问题!
- 20. Java线程管理
- 21. 线程的内存问题
- 22. 每线程内存管理在C#
- 23. iOS内存管理/持久性问题
- 24. Objective-C内存管理问题
- 25. iphone内存管理奇怪的问题
- 26. iPhone:内存管理新手问题
- 27. 内存管理问题:释放对象
- 28. ScrollView太慢 - 内存管理问题?
- 29. addAnnotations问题(内存管理也许?)
- 30. Objective-C内存管理问题,NSMutableArray
一些代码显示你如何处理胎面将不胜感激。 – 2010-12-06 07:57:45