我是这个主题的新手,所以,如果我的问题很明显,请原谅-
每当我们启动Java应用程序时,就会创建一个新的JVM实例。JVM本身是一个运行在OS上的进程,和其他进程一样,它也有自己的内存需求。
我知道堆和非堆内存结构,以及如何配置和操作它们。我要找的是jvm进程本身的内存细节,整个内存是如何划分的,即jvm自己的内存需求+堆+非堆+本机堆栈
有多少段?
OS分配给JVM多少内存,以及JVM如何进一步使用这些内存?
在运行应用程序时,是否有任何命令或实用程序来检查这些细节?
我在谷歌上搜索了很多,但没有找到任何关于这个方向的具体内容,几乎所有的文章都解释了堆和非堆内存结构(eden/old/meta等)。我还访问了以下链接-
JVM内存类型
java内存池是如何划分的?
JVM内存段分配
https://blog.codecentric.de/en/2010/01/-java-memory-architecture-1-act/
Linux进程上的JVM内存映射
了解JVM内存分配和java内存不足:堆空间
似乎我被困在这里了,任何关于这个主题的指针都很好,这样我就可以开始朝这个方向看了。
如果您正在寻找命令行实用程序,请从jps
开始,它只打印所有正在运行的java进程的PID。然后选择您想要发现的一个,并使用jmap
及其PID。
JDK还附带了可视化工具。旧的JConsoke
和更新更好的VisualVM
。
问题内容: 我们在 Tomcat 服务器上部署了一个Web应用程序。我们运行某些计划的作业,然后堆内存达到峰值并稳定下来,一切似乎都很好。但是,系统管理员抱怨内存使用率(Linux上的“ top”)随着计划的作业的增加而不断增加。堆内存和CPU内存之间有什么关联?可以通过任何JVM设置来控制它吗?我使用 JConsole 监视系统。 我通过JConsole强制进行垃圾收集,并且堆使用率下降了,但是
问题内容: 我想开始我与JVM OPTS应用:。当应用程序启动时,我通过键入来检查内存使用情况,发现vmsize超过600512 kB!比我的设置大得多。我想知道如何限制进程的jvm内存使用量。 问题答案: 您无法控制要控制的内容 ,只能控制Java Heap,它不能控制JVM 对 本机内存 的使用,JVM的使用根据实现而完全不同。 从下面的文章中感谢内存(了解JVM如何在Windows和Linu
问题内容: jvm进程的内存使用量一直在增加,并且从未减少。我通过在linux服务器上执行top进行检查。该应用程序正在将作业调度到群集(使用Quartz + SunJava DRMAA API) Java堆空间在应用程序生命周期内保持在限制之内,但是jvm进程显示内存使用率稳定增长且从未下降。 这是内存泄漏吗?如果是这样,为什么堆空间在限制之内。有人可以解释一下。 更新: 当我通过jconsol
我在理解JVM进程如何分配自己的内存方面有一点差距。据我所知 其中堆外由线程堆栈、直接缓冲区、映射文件(库和JAR)和JVM代码本身组成; 目前,我正在尝试分析我的Java应用程序(Spring Boot Infinispan),RSS779M(它在docker容器中运行,所以pid 1是可以的): 换句话说,我想解释799M-(374M 89M)=316M堆外内存。 这些线程中的每一个都消耗1M
关于Java应用程序使用的驻留内存,我有两个问题。 一些背景细节: 我用-xms2560m-xmx2560m设置了一个java应用程序。 java应用程序在容器中运行。k8s允许容器最多消耗4GB. 堆:应用程序的工作方式似乎是使用所有内存,然后释放,然后使用等等。 这张快照说明了这一点。Y列是空闲堆内存。(由应用程序通过)提取) 我还可以使用HotSpotDiagnosticMXBean来确认它
我有一个很小的java控制台应用程序,我想在内存使用方面进行优化。它是在Xmx设置为仅64MB的情况下运行的。根据不同的监视工具(htop、ps、pmap、Dynatrace)显示进程的总体内存使用量超过250MB。我主要在Ubuntu18上运行它(也在其他操作系统上测试)。 我使用了-xx:nativeMemoryTracking,java param和jcmd的本地内存跟踪,以找出为什么在堆之