java线程内存管理问题

标签 java multithreading memory-management

我现在正在开发一个程序,其本质是这样的:有一个 4 路停靠点,汽车随机到达每条路。每条道路均采用 FCFS 服务,交叉路口采用循环方式管理,每次 1 辆车通过。每辆等待的汽车都是一个线程。我已经让线程同步和算法工作没有问题。我不太明白的问题是如何防止错误:OutOfMemoryError:无法创建新的 native 线程。我意识到这是由于堆(堆栈?我总是让它们切换)变满。我无法找到一种方法来确保已执行的线程由垃圾收集器正确管理,并且在执行后不会在内存中徘徊。我尝试使用软引用设置我的队列(带有汽车线程的每条“道路”),并清空任何硬引用,但无济于事。这里有人有这方面的经验吗!谢谢!!!

最佳答案

“OutOfMemoryError:无法创建新的 native 线程”不是指的是堆内存。它不会帮助您清空引用或使用软/弱引用。此外,增加堆大小只会让事情变得更糟。

Java 使用 native 内存作为线程堆栈。每次启动一个线程时,都会在 JVM 堆之外分配一个新的堆栈。直到线程终止时才会释放堆栈。考虑使用较少的并发线程(例如,您可以使用 ThreadPoolExecutor 来控制数量),或者减少堆栈大小(使用 -Xss{size}k)

另请参阅this post ,其中详细介绍了多种类型的内存不足错误。

关于java线程内存管理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4364270/

相关文章:

c - 多次调用的函数每次的栈帧是否不同?

c++ - 学习 C++ 和 SDL- 以下是否会产生内存泄漏?

java - Spring R2DBC:如果id为零,则保存新实体

java - fragment 设计 : Adapting to multiple screen layouts by showing/hiding fragments within a single Activity?

java - 如何从休息服务验证用户

C# 修改 parallel.foreach 中的 DataRow 数组引用,为什么代码运行正确?

java - 服务器在Java中同时处理来自多个客户端的 "n"请求

ruby-on-rails - Chrome 扩展 session 管理 : How to authorize user account on rails 3 back-end via plugin

java - Yasson 未正确转换子类

multithreading - Node 线程是否是模拟循环的错误位置?