JVM memory consist of heap , non-head and other
heap: which is the storage for java objects and array
堆存储对象和数组
non-heap: which is used by java to store loaded classs and other metadata
非堆存储class和meta信息
other: JVM code itself, JVM internal strcutures, loaded profiler agent code and data, etc
heap is the runtime data area from which memory for all class instances and array allocated. It created at the JVM start-up.
the heap size may be configured with the following VM options
-Xms: to set the initial java heap size 初始化大小
-Xmx: to set the maximum java heap size 最大值
By default, the maximum size is 64Mb
heap memory for objects is reclaimed by an automatic management system which is known as Garbage Collector. The heap may be a fixed of szie or expanded and shrunk, depending on the GC's strategy
head中的对象被GC回收
heap: 分为3个区
eden: new object
survivor(2): after GC operation still survivor
old generation: long lifecycle
eden和2个survivor组成新生代。
young generation consist of eden, and 2 survivor, have one survivor is always empty.
when young generation is full, then trigger minor collection(YGC), the survivor objects will move to tenured generation. Last when tenured generation is full, the cause magor collection(Full GC), it will collect all heap, incude young generation. permanent generation is stable, store classLoader info.
当新生代满了,则执行YGC把survivor里面的对象移到old中。如果old满了,则执行full GC,对整个堆进行回收。permanet一般不变。
non-heap
store the per-class structure, such as runtime constant pool, field and method data, and the code for method and contructors, as well as interned String
非堆存放class结构信息,常量池,字段方法等信息。
configure
-XX:PermSize 初始化大小
-XX:MaxPermSize(default 64Mb) 最大值
non-heap:分为2个区
permanent generation: store class, method and field
code cache: compile and store native code and do optimize
JVM运行时数据的区域:
PC寄存器
JVM支持多个线程,每个线程都有自己的pc寄存器,如果线程执行的方法不是本地方法,则pc寄存器存储当前线程执行方法的地址,若为Native,则未定义。
JVM方法栈
线程私有,描述java方法调用是的内存模型。每个方法被执行的时候都会创建帧栈,用于存储局部变量,操作栈,动态链接,方法出口等信息。有时候会粗分栈,堆,栈就是指这里的栈。而在线程中有个工作内存和主内存,这个jvm栈是线程私有,所以这里的工作内存指这里。
本地方法栈:为虚拟机使用到的Native方法服务
JVM堆:存放对象实例和数组
方法区(非堆):存放class的结构信息,包括常量池,字段描述,方法描述。这里的GC主要对常量池的回收和类的卸载。
java内存溢出问题:
java.lang.OutOfMemoryError:java heap space. JVM heap溢出
调节-Xmx大小
java.lang.OutOfMemoryError:PermGen space.
调节-XX:MaxPermSize大小
java.lang.StackOverflowError:栈溢出
调节-Xss大小
查看线程
jvisualVM
查看内存运行情况
jconsole
查询jvm进程id
jps
分享到:
相关推荐
jvm memory
"JVM Memory View"工具,版本号为0.93.162,就是针对这一需求而设计的JVM调试内存查看器,专为Android Studio用户提供了一个直观、高效的内存分析解决方案。 一、JVM内存概述 Java虚拟机内存主要分为以下几个区域...
很久之前就一直在学习JVM,但是一直也没有好好的总结,最近终于有了空闲,将之前学习的内容整理成了一个PPT。PPT也可以在这里下载: https://github.com/hitynsun/docs/tree/master/JVM 也希望大神们可以批评指正...
JVM(Java虚拟机)是Java平台的核心组件,提供了一个抽象的计算环境,使得Java程序能够在不同的操作系统上运行,实现平台独立性。JVM将Java程序编译成特定的二进制格式——类文件格式,使得Java虚拟机本身对Java编程...
jmap - JVM Memory Map Tool **用途**:生成虚拟机的内存映像文件,用于分析内存泄露等问题。 **命令格式**: ``` jmap [option] pid ``` **执行示例**: ``` jmap -dump:format=b,file=/tmp/dump3700.hprof ...
### 基于jfreeChart的动态图表:JVMMemory示例详解 #### 概述 本篇文章将详细介绍一个基于jfreeChart库实现的动态图表示例——`JVMMemory`,该示例展示了如何实时地监控并绘制JVM当前的内存使用情况。通过这个例子...
- **概述**:`jmap`(JVM Memory Map)主要用于获取dump文件(堆转储快照文件),同时也可以获取目标Java进程的内存相关信息,如Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。 - **基本用法**: - `...
jmap是JVM Memory Map的缩写,用于生成堆dump。jmap可以生成堆的快照,并将其保存到文件中,以便后续分析。 jmap的命令格式为: ``` jmap [options] ``` 例如: ``` $ jmap -dump:format=b,file=dump.hprof 1234 `...
在Jconsole框架顶部编写的应用程序可以用作Applet,App,JWS等,并带有http通讯API来监视防火墙后面的远程应用程序。
《深入解析MemoryAnalyzer:JVM堆内存分析利器》 在Java开发中,内存管理是至关重要的环节,良好的内存管理能够优化应用性能,防止内存泄漏,提升系统稳定性。MemoryAnalyzer(MAT)是一款强大的JVM堆内存分析工具...
《深入理解MemoryAnalyzer:JVM内存分析利器》 在Java应用程序的开发和优化过程中,内存管理是一项至关重要的任务。MemoryAnalyzer(MAT)是一款强大的JVM内存分析工具,它能够帮助开发者深入洞察应用的内存占用...
Java内存模型(JVM Memory Model)是Java编程语言中用于定义如何在多线程环境下共享变量的规则。在这个模型中,内存屏障(Memory Barrier)和重排序(Reordering)是两个关键概念,它们对并发编程的正确性和性能有着...
5. **监控设置**:在测试过程中,使用`jmap -histo`命令定期获取服务器的内存快照,并监控Linux Memory和JVM Memory的变化趋势。 #### 分析步骤 1. **执行测试**:启动JMeter进行压力测试,持续运行至少7天,观察...
公式(MaxProcessMemory - JVMMemory - ReservedOsMemory)/ (ThreadStackSize)可用于估算系统能够支持的最大线程数。 对于那些使用大量动态加载类的应用,如Hibernate和Spring框架,可能会遇到 PermGen space ...
1. **Java内存模型**:Java内存模型(JVM Memory Model)定义了如何在JVM中存储、分配和访问数据。它主要分为堆内存、栈内存、方法区、本地方法栈和程序计数器五大部分。 2. **堆内存**:Java对象主要存储在堆内存...
《JVM性能调优:深入理解JVM内存模型与优化》 在Java开发中,JVM(Java Virtual Machine)性能调优是提升应用程序效率的关键环节。JVM内存模型的理解和优化,对于解决性能瓶颈、避免内存泄漏以及提高系统稳定性至关...
out.println("Java 虚拟机中的内存总量(当前 JVM 占用的内存总数)totalMemory(): " + total + "MB "); out.println("Java 虚拟机中的空闲内存量(当前 JVM 空闲内存)freeMemory(): " + free + "MB "); out...
JVM Memory Model.vsd可能是一个Visio绘制的关于JVM内存模型的图表文件,它可能详细展示了各内存区域的划分、数据流动路径以及它们之间的关系,帮助理解JMM的工作原理。 理解JMM对于编写高性能、线程安全的Java程序...
Java内存模型(JVM Memory Model,简称JMM)是Java平台中的核心概念,它定义了程序中各个变量的访问规则,以及多线程环境下的内存交互行为。在深入理解Java内存模型时,我们需要关注以下几个关键点: 1. **内存区域...
- **Memory Analyzer**:用于分析Java堆转储的分析工具。 #### 11. 案例分析 通过具体案例,如系统频繁FullGC、String.intern的使用等,可以更加深入理解JVM的运行机制和性能调优方法。 #### 结语 以上是对《JVM必...