当前位置: 首页 > 面试题库 >

CPU周期和内存中线程的大致“成本”是多少?

茅曾琪
2023-03-14
问题内容

在Java中使用线程的大致“成本”是多少?是否有经验法则/经验值,创建一个线程要花费多少内存?是否可以粗略估计创建一个线程要花费多少个CPU周期?

上下文:在Web应用程序的Servlet中,由于内容的一部分是基于文件,基于数据库以及基于Web服务的,因此我希望并行化内容创建。但这意味着对于(我的serlvet容器中的)每个“
http-request-thread”,我将有2至4个其他线程。请注意,我将ExecutorService在Java 6中使用。

当我在Web服务器上使用数百到数千个Java线程时,应该期待什么?


问题答案:

每个线程都有自己的堆栈,因此会立即对内存产生影响。对于Java 6,默认线程堆栈大小为IIRC,即512k(不同的JVM
/版本可能具有不同的默认值)。使用该-Xss选项可以调整该数字。因此,使用数百个线程将对VM消耗的内存产生影响(除非这些线程正在运行,否则可能在CPU影响不大之前)。

我已经看到客户端遇到与线程/内存相关的问题,因为它不是一个明显的链接。创建100,000个线程(使用执行程序/池等)是微不足道的,并且内存问题似乎并非直接归因于此。

如果要为许多客户端提供服务,则可能需要看一下Java NIO
API,尤其是允许进行异步网络编程的多路复用。这样一来,您只用一个线程即可处理许多客户端,从而减少了对大量线程的需求。



 类似资料:
  • 我写了一个简单的程序,在一个循环中执行一堆NOP指令,令我惊讶的是,它每秒执行大约106000000000条指令,或大约10Ghz,而我的CPU只有2.2GHz。 这怎么可能?CPU是将它们视为单个兆NOP,还是我刚刚发现“指令级并行性”是什么意思? 每秒指令的更好衡量标准是什么?添加指令仅达到414900000/s,是我CPU报告的bogomips的十分之一:4390.03 C代码: 编译的程序

  • 我需要为RESTAPI设计一个非常基本的性能测试。 并发用户数=40,响应时间=500ms以内 通常情况下,无Thread和斜坡上升周期之间的理想比率是多少? 我在某个地方读到过——虚拟用户的到达率应该是每秒25-50个用户。但是我不知道它的真实性。 对于我的情况,我是否应该将爬升周期设为2秒? 提前感谢!!!

  • 问题内容: 在多个帖子中都提到了这一点:不当使用会导致内存泄漏。我正在努力了解使用内存泄漏将如何发生。 我发现的唯一情况如下: Web服务器维护一个线程池(例如,用于servlet)。如果未删除其中的变量,则这些线程可能会导致内存泄漏,因为线程不会死亡。 这种情况下没有提到“ Perm Space”内存泄漏。那是内存泄漏的唯一(主要)用例吗? 问题答案: PermGen的exhaustions 与

  • 问题内容: 我有一个,我想知道它正在使用多少内存。 的是变体是这样,它不是那么容易,因为乘法每一个对象的大小的数组中的元素数目。 问题答案: 您可以使用诸如此类的对象及其对应对象来进行有根据的猜测,但这并不考虑两次调用之间通过GC处理的对象。

  • 问题内容: 假设我的应用程序运行2个线程(例如渲染线程和游戏更新线程)。如果它运行在具有多核CPU的移动设备上(当今通常是这样),我是否可以期望在可能的情况下自动将线程分配给不同的内核? 我知道底层的OS内核(Android linux内核)决定调度。我的问题是我是否需要做 任何其他事情 才能启用多核功能,还是自动而透明的? 问题答案: 您需要做的是允许两个线程尽可能独立地运行。如果您有两个始终在

  • 我的Optaplanner似乎出现了内存泄漏。要复制,只需下载Quarkus示例: 然后通过增加终止时间(例如,将)和取消注释表示的行来更改以启用多线程。 然后,运行手册中的请求: 内存使用量开始稳步增加,同时生成了数百万个PhreakPropagationContext对象。我认为这不是预期的行为。我应该为此制造问题还是遗漏了什么?