gpt4 book ai didi

Java线程内存爆炸

转载 作者:行者123 更新时间:2023-12-03 12:57:33 25 4
gpt4 key购买 nike

我对并发编程还很陌生,我正在学习它。

我正在 Java JDK 7(Fork Join API)中实现快速排序以对对象列表 (100K) 进行排序。

在不使用并发的情况下使用这段递归代码时,我没有观察到内存爆炸,一切都很好。

我刚刚添加了代码以在多核上使用它(通过扩展类 RecursiveAction),然后内存使用率跳得很高,直到达到极限。通过做一些分析,我观察到线程的高创建率,我认为这是可以预料的。但是,java 线程本身需要更多的内存还是我在这里遗漏了什么?

Quicksort 必须需要很多线程,但不会比常规对象多。

我是否应该在达到阈值时停止创建 RecursiveAction 线程,然后切换到顺序代码段(不再有线程)?

非常感谢。

最佳答案

默认情况下,Java 线程通常仅占用 256k/512k(取决于操作系统、jdk 版本...)的堆栈空间。

对于 CPU 密集型进程(例如执行快速排序),如果运行的线程多于处理器/内核,那么您将浪费大量资源和速度,因此尽量不要运行多于内核的线程。

关于Java线程内存爆炸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3251035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com