首页 > 编程知识 正文

数据库支持多线程并发访问吗,java线程池最大线程数根据什么确定

时间:2023-05-03 22:27:43 阅读:48811 作者:508

原始标题: Java线程占用的内存量

dzone.com/articles/how-much-memory-does-a-Java-thread-take

JVM没有主动根据线程数分配“threads’1mb”。 此错误来自NMT报告。 Java 8“已提交的内存”将自动设置为“已保留的内存”。 请参照

“已提交内存”的大小由堆栈的深度决定。 感谢[Thomas Stuefe][1]的注意。

---

[1] :3359 dzone.com/users/3720329/tstuefe.html

在Java APP应用程序的总内存消耗中,线程使用的内存占了大部分。 根据APP应用程序的具体特点(例如CPU受限或IO受限),可以选择相应的技术来限制新线程的数量。 对于IO受限的APP应用程序,线程可以处理IO操作,如创建线程池,在阻止或等待期间从数据库读取数据或发送HTTP请求。 计算密集型的APP应用程序可以使用类似Netty的HTTP服务,从而减少线程数量并节省内存。 以下是新线程占用的内存量的具体示例。

线程内存包括堆栈帧、局部变量、方法参数等,默认情况下线程大小如下:

```外壳

$ Java-xx :打印标志版本

intxcompilerthreadstacksize=1024 { PD product } { default }

intxthreadstacksize=1024 { PD product } { default }

intxvmthreadstacksize=1024 { PD product } { default }

``````

1. Java 8线程的内存消耗

```外壳

$ Java-xx : unlockdiagnosticvmoptions-xx : nativememorytracking=summary /

- xx :打印机统计-版本

open JDK版本'1.8.0_ 212 '

(openjdkruntimeenvironment (adoptopenjdk ) (build 1.8.0_212-b03 ) ) ) ) ) ) ) )

open JDK 64-bitservervm (adoptopenjdk ) (构建25.212-b03,混合模式) ) ) ) ) ) ) ) ) ) )。

本机内存跟踪:

Total: reserved=6621614KB,committed=545166KB

- Java heap (保留=5079040 kb,提交=317440 kb ) )。

(mmap: reserved=5079040KB,committed=317440KB )

- class (保留=1066074 kb,提交=13786 kb ) )。

(类别# 345 )

(malloc=9306KB # 126 )

(mmap: reserved=1056768KB,committed=4480KB )

- thread (保留=19553 kb,提交=19553 kb ) )。

(thread # 19 )

(堆叠: reserved=19472 kb,committed=19472KB )

(malloc=59KB # 105 )

(arena=22KB # 34 )

``````

保留:操作系统约定的可用内存大小。 尚未分配,无法访问JVM

已提交:已分配给JVM,可以访问

如Thread部分所示,“‘reserved”和“‘committed”大小相同,接近于“线程数”1mb。 因为在这种情况下,JVM从一开始就尽可能地为线程分配内存。

2. Java 11线程的内存消耗

```外壳

$ Java-xx : unlockdiagnosticvmoptions-xx : nativememorytracking=summary /

- xx :打印机统计-版本

openjdkversion ' 11.0.2 ' 2019-01-15

openjdkruntimeenvironmentadoptopenjdk (build 11.0.29 ) ) ) ) ) ) )。

open JDK 64-bitservervmadoptopenjdk (构建11.0.29,混合模式) )。

本机内存跟踪:

Total: reserved=6643041KB,committed=397465KB

- Java heap (保留=5079040 kb,提交=317440 kb ) )。

(mmap: reserved=5079040KB,committed=317440KB )

- class (保留=1056864 kb,提交=4576 kb ) )。

(classes # 426 )

(实例类# 364,阵列类# 62 )

(malloc=96KB # 455 )

(mmap: reserved=1056768KB,committed=4480KB )

(元数据: )

(reserved=8192KB,committed=4096KB )

(used=2849KB )

(free=1247KB )

(waste=0kb=0,00 % )

(Class space: )

(reserved=1048576KB,committed=384KB )

(used=270KB )

(free=114KB )

(waste=0kb=0,00 % )

- thread (保留=15461 kb,提交=613 kb ) )。

(thread # 15 )

(堆叠: reserved=15392 kb,committed=544KB )

(malloc=52KB # 84 )

(arena=18KB # 28 )

``````

上述结果表明,Java 11节省了大量内存,并且在创建线程时不会主动分配“保留内存”。 当然,这只是“Java-version”命令的执行结果。 如果使用Java 11,您会发现内存分配有了明显的改进。 回到搜狐,多看看

责任编辑:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。