我在做一个监控项目;我们有监控软件工作,并从服务器上回收指标。一切都很好,但是我们需要一些关于JVM内存使用细节的信息。我们有一些具有不同内存类型的列。我们需要知道这些是什么:
我们有所有这些列的最大值(HeapMax、NonHeapMax、UsageMax、PeakMax和CollMax),也有used(HeapUsed、NonHeapUsed、UsageUsed、PeakUsed和CollUsed)
提前谢谢你。
来自java文档链接:
MemoryUsage对象表示内存使用情况的快照。MemoryUsage类的实例通常由用于获取Java虚拟机单个内存池或整个Java虚拟机的堆或非堆内存的内存使用信息的方法构造。
MemoryUsage对象包含四个值:
如果定义了max,则使用和提交的内存量将始终小于或等于max。
如果内存分配试图增加所使用的内存,使得used>committed,即使使用<=max仍然为true(例如,当系统的虚拟内存不足时),则内存分配可能会失败。
看看这个链接,了解与内存有关的各种API。
我们Java开发人员有时会使用来确保我们为每个特定于线程的堆栈提供了1MB的空间。现在,我经常感到困惑,JVM从哪里借用了1MB,从堆或系统内存中借用,或者Java为线程分配任何特定的内存。你能帮我理解一下吗? 此外,我们是否有一个可视化(插件)运行时工具,可以以可理解的方式显示堆和堆栈的内容? 提前感谢。
主要内容:1.运行时数据区,3.Java堆,4.方法区(Method Area)1.运行时数据区 运行时数据区 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域。每个区域都有各自的作用。 分析 JVM 内存结构,主要就是分析 JVM 运行时数据存储区域。JVM 的运行时数据区主要包括:堆、栈、方法区、程序计数器等。而 JVM 的优化问题主要在线程共享的数据区中:堆、方法区。 1. 程序计数器 程序计数器(Program Counter
我的问题是,谁分配和管理这些内存段?操作系统不知道java程序正在运行,并认为它是JVM的一部分,作为计算机上的常规程序运行,JIT编译、java堆栈的使用,这些操作需要运行时内存分配,我不明白的是JVM如何将其内存划分为这些内存段。这肯定不是由操作系统来完成的,这些内存段(例如java堆栈)必须是连续的才能工作,所以如果JVM程序只是使用malloc命令来接收堆内存的最大大小并将这些内存划分为多
我使用tomcat7和jvm内存选项设置为 使用这些设置,服务器无法启动,出现错误 即使我将NewSize增加到512或1024,它也是一样的,只有当我删除Newsize选项时才有效。Foor堆大小为2048MB,这些大小有效吗?
我有一个非常消耗内存的程序,想使用-Xmx2048m为java jvm分配更多的最大内存。但在启动时,我得到一个“无法为对象堆保留足够的空间”错误。 当尝试多个值并发现我的最大值是时,它就开始了。但我喜欢分配2GB。在使用-Xmx1560m启动java进程后,我有6GB的物理内存,Taskmanager显示3400MB可用。 有人知道我为什么不能分配2GB吗?
问题内容: 我们在 Tomcat 服务器上部署了一个Web应用程序。我们运行某些计划的作业,然后堆内存达到峰值并稳定下来,一切似乎都很好。但是,系统管理员抱怨内存使用率(Linux上的“ top”)随着计划的作业的增加而不断增加。堆内存和CPU内存之间有什么关联?可以通过任何JVM设置来控制它吗?我使用 JConsole 监视系统。 我通过JConsole强制进行垃圾收集,并且堆使用率下降了,但是