![]() |
1
7
尽管控制台显示程序已经完成,但jvm进程仍在运行,直到释放所有资源。同时,您的操作系统没有线程,速度慢而且不稳定,这会导致所有进程的延迟,包括jvm终结。作为自卫,操作系统引发了内核恐慌。这就是你的macos重启的原因。 *操作系统 |
![]() |
2
2
Java是在90的时候构建的,当时只有多核处理器。 当然Java已经进化,就像现代处理器一样。现在我们有8核处理器,有大缓存(例如:12MB)。 尽管并发处理已经有了很大的发展,Java仍然围绕着1-核心处理器模型设计。但是,就历史而言,让我非常简单地解释一下发生了什么。 仅仅通过在Java中创建一个新线程,我们就浪费了大量内存。 每根线都会消耗掉 约512kb-1Mb ,具体取决于您的jvm版本(请参见 how much memory a thread takes in java 和 Java Thread: Retained Memory )记住这一点,当不断创建新线程时,在某个时刻它们将消耗堆的所有内存。 现在,我从来没有单独尝试过,但我假设您的计算机的操作系统由于“内存不足”错误而关闭/重新启动,以此作为对策。(这很像 triple fault ,这导致了 “死亡蓝屏” 在Windows上,计算机需要重新启动以重置CPU的状态) 一种可能的解决方案是手动设置jvm使用的最大堆大小。因此,当您的程序完全使用预先分配的堆时,它不会导致关闭。请参考 this 所以关于怎么做的问题。 |
![]() |
4
-4
很可能是因为您没有给jvm足够的内存,或者您的计算机硬件和macos的组合不允许同时有那么多线程处于活动状态。这个问题不仅限于macos,一些linux发行版,比如bodhi-linux,也有这个限制。不要被“outofmemoryerror”欺骗——这通常意味着jvm无法分配本机线程。 |
|
Forest Lam · 我应该怎么做才能在这里看到分布式驱动器段? 1 年前 |
![]() |
Andrew · 我需要帮助为这个问题编写代码 2 年前 |
![]() |
Gen Tan · 节点-v显示节点的旧版本 2 年前 |
![]() |
xdavidliu · XCode项目对C++标准的选择没有得到尊重 2 年前 |
![]() |
Yannick · Ruby(或FFI?)执行Jekyll命令时出错 2 年前 |
![]() |
FreyGeospatial · 显示Mac终端中隐藏的文件和文件夹 2 年前 |
![]() |
viedev · SwiftUI:macOS上文本字段中文本过长的问题 3 年前 |