堆内存使用情况作为Java程序运行

我有一个简单的代码用于Java中的多线程回显服务器(它将返回的任何内容返回给客户端)。 我正在分析各种资源,包括非堆内存使用情况。 我知道JVM的非堆内存也是在JVM启动时创建的,但是,它存储每类结构并包含调用堆栈,由本机代码分配的内存,例如用于离堆缓存,Metaspace以及内存由JIT编译器使用(编译的本机代码)。 但我有两个主要问题:

1)随着时间的推移,非堆内存使用率会稍微增加。 这个增长很小,但是这会导致内存使用量的轻微增加?

2)虽然非堆内存使用率与通信客户端数量增加几乎相同,但如果我们放大很多,同样我们注意到随着客户端数量的增加,会有小幅增加。 主要原因是什么? 我猜测这可能是由于新线程需要更多的空间,但这些线程做些什么来造成这种微小的增加?

3)我们注意到与上面的堆内存相同的区别。 但是,差别更大。 这是什么原因? 我的猜测是增加了存储消息所需的缓冲区大小。

在这里输入图像描述


你说你的服务器是多线程的 - 我假设你为每个接受的套接字连接创建一个新的线程。

在JVM中,每个线程都会消耗一些名为“堆栈”的内存,并存储所有活动的执行帧。 64位JVM上的默认堆栈大小为1024K。 我认为在这个非堆内存的图表中,您可以看到为套接字线程分配的堆栈

链接地址: http://www.djcxy.com/p/19845.html

上一篇: heap memory usage as a Java program runs

下一篇: Big difference between JVM process size and Memory Heap size