(给ImportNew加星标,提高Java技能)
编译:ImportNew/唐尤华
dzone.com/articles/how-much-memory-does-a-java-thread-take
”更新:“
JVM 并没有主动按照线程数量分配 “threads ’ 1MB”,这个错误来自 NMT 报告。Java 8 “committed memory”会自动置为 “reserved memory”。参见
”committed memory“大小由堆栈深度决定,感谢 [Thomas Stuefe][1] 的提醒。
---
[1]:https://dzone.com/users/3720329/tstuefe.html
在 Java 应用总内存消耗中,线程使用的内存占很大一部分。根据应用具体特点,比如 CPU 受限或者 IO 受限,可以选择对应技术限制新建的线程数量。对于 IO 受限应用可以创建线程池,由线程处理 IO 操作,比如在阻塞或等待状态从数据库读取数据、发送 HTTP 请求等。如果是计算密集型应用,可以使用像 Netty 这样的 HTTP 服务器,线程数量少、节省内存。接下来通过具体示例展示一个新线程需要消耗多少内存。
线程内存包括栈帧、局部变量、方法参数等,线程大小默认如下(KB):
```shell
$ java -XX:+PrintFlagsFinal -version | grep ThreadStackSize
intx CompilerThreadStackSize = 1024 {pd product} {default}
intx ThreadStackSize = 1024 {pd product