直到昨天,我认为JVM在内部完成了所有的线程化,为每个线程分配了一些保留的内存并处理线程转换并在其自身的逻辑中执行
然而,昨天我有一个Java程序死了,因为它命中了linux ulimit,/ proc //状态显示java app分配了1023个线程。这不是我期望让我理解JVM的。
鉴于此信息,JVM似乎可能为其创建的每个JVM线程使用Linux线程,这是正确的吗?我希望java规范没有说明如何处理线程,这只是我正在使用的JVM实现的设计选择,但我仍然很好奇这是如何在我的内部得到启发JVM。
JVm是否仅使用Linux线程进行内存隔离,还是使用其他功能,特别是它是否让linux处理跨线程的中断和时间划分?
关于GC如何收集linux proc线程有什么棘手我应该知道如果我要调整我的java配置以试图阻止达到我的proc限制(它相信它们是已死但尚未收集的帖子。)