JVM内存简单分析

  • 一、方法区(method)
  • 二、堆栈(stack)
    • 2.1基本变量的存储
    • 2.2对象引用的存储
  • 三、堆(heap)

我见青山多妩媚,料青山见我应如是。

辛弃疾《贺新郎·甚矣吾衰矣》

JVM内存可分为三个区:方法区(method)、栈(stack)、堆(heap)。

一、方法区(method)

方法区又叫静态区,方法区中的数据被所有线程所共享,类信息、常量、静态变量都存储在方法区中。

二、堆栈(stack)

通常叫做栈,是线程私有的一块内存区域,JVM会自动管理栈。存放在栈中的数据大小以及生存期必须是确定的,而且存放于栈中的数据可以共享。栈用于存放基本变量的数据以及对象的引用。

2.1基本变量的存储

Java中,共有八种基本类型,即:int,short,long,byte,float,double,boolean,char(不包括String!)。这8种类型存放在栈中,存放时存放的不是变量名,而是“字面值”。比如,有如下定义:

int i = 0;

这里0便是一个字面值,而i是一个指向int类型的引用。由于字面值的大小可知(由于平台无关项,Java中基本类型的大小固定),生存期可知(字面值定义于某个程序块之中,程序块退出字面值消失),故为了追求速度,字面值存储于栈中。
另外,由于栈中的数据可以共享,对于以下语句:

int i = 1;
int j = 1;

编译器首先处理int i = 1;首先在栈中定义一个变量为i的引用,然后查找栈中有没有字面值为1的地址,没找到就在栈中开辟一个地址存放字面值1,然后将i指向该地址。接下来处理int j = 1;由于栈中已经有了1这个字面值,因此将j指向该地址便可。如下图所示:

2.2对象引用的存储

栈中还存放局部对象的引用,该引用并不是对象本身,而是对象在堆中的地址。若对象引用没有指向具体的对象,则对象引用是null。
另外,在Java中,数组是一种引用类型,所以数组引用也存储在栈中。

三、堆(heap)

堆是一块被所有线程共享的内存区域,堆可以动态地分配内存大小,生存期也不需要事先确定,JVM会自动管理堆。堆用于存放所有的对象实例(包括new出来的对象)。
由于数组是一种引用类型,所以数组元素也存储在堆中。

10.JVM内存简单分析相关推荐

  1. 如何使用MAT进行JVM内存泄露分析

    转载自  如何使用MAT进行JVM内存泄露分析 在<Java Agent的隔离实现以及卸载时一些坑>中,卸载Agent之后,使用 jmap-histo:live pid命令验证执行FGC, ...

  2. java hprof 分析_[转]Sun JDK自带JVM内存使用分析工具HProf

    Sun JDK自带JVM内存使用分析工具HProf 2008-10-14 11:27 Sun JDK自带JVM内存使用分析工具HProf       使用Sun JDK自带JVM内存使用分析工具HPr ...

  3. WinImage 8.10注册算法简单分析

    标 题: [原创]WinImage 8.10注册算法简单分析 作 者: herx 时 间: 2007-10-15,18:47 链 接: http://bbs.pediy.com/showthread. ...

  4. java实现初始化三角形数组_Java 数组、多维数组,动态、静态初始化,数组JVM内存模型分析...

    Java 数组.多维数组,动态.静态初始化,数组JVM内存模型分析 什么是数组 所谓数组,是具有相同数据类型的若干变量或者数据按照一定排序规则组合起来的一种数据存储格式.数组中的数据称为数组元素,我们 ...

  5. Linux与jvm内存关系分析

    原文出处: 美团技术团队 引言 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约8 ...

  6. 转自美团技术博客的jvm内存泄露分析

    Linux与JVM的内存关系分析 引言 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使 ...

  7. JVM内存溢出分析-实战JVM(二)

    为什么80%的码农都做不了架构师?>>>    JVM规范规定,除了程序计数器,虚拟机其他内存区域均会发生内存溢出的可能,OutOfMemoryError(OOM) 原文地址:htt ...

  8. JVM内存模型分析(一个程序运行的例子)

    (.class字节码)类加载到内存之后,内存模型:(ps:.class文件可以通过javap 指令反编译成一个可读文件) 1.java栈,本地方法栈,程序计数器(每个线程私有) 看如下程序: 以该程序 ...

  9. jvm内存溢出分析实践案例:javax.crypto.JceSecurity大量BouncyCastleProvider实例无法被回收

    MAT分析结果: 模拟运行14分钟,循环进行8000多次加解密的对比:

最新文章

  1. mac apache 和 nginx ssl 配置自签名的SSL
  2. optee3.14中MMU页表查询的所需配置--深入解读
  3. 最终篇!AAAI 2022值得读的NLP论文盘点
  4. mysql+create+table+index_mysql------基础及常见SQL技巧
  5. android和网络连接相关的类URL,URLConnection,HttpURLConnection,HttpClient
  6. 几步教你用 Python 制作一个 RPA 机器人!
  7. google地球无法连接_WiFi无法连接?解决macOS Big Sur/Mojave/ Catalina上的Wi-Fi问题
  8. python读音播报-基于python GUI开发的点名小程序(语音播报)
  9. 优化理论03----优化导论和无约束问题的最优条件、优化问题的类型、局部、全局和严格优化、梯度和Hessian 黑塞矩阵和方向导数、无约束问题的最优条件
  10. C++网络编程实例之多个客户端交互(多线程)
  11. go语言环境搭建以及监测命令
  12. linux grep查找指定文件或目录下文件的字符
  13. 结构风险最小和VC维理论的解释
  14. 微机课设 | 基于STC15单片机的简易数字密码锁设计
  15. python对经济统计学有什么用_经济统计学是一个怎样的学科?就业方向主要是什么?...
  16. js 函数传参改变div属性
  17. 深信服技术认证之容灾与备份(二)
  18. 人工智能产业链的三个核心,底层硬件、通用AI技术及平台、应用领域相关公司盘点
  19. Java IO流--数据读写(字符/字节流/二进制文件)
  20. Openoffice转换excel为pdf格式问题处理

热门文章

  1. 解决yolov5不能使用 tensorboard --logdir=runs/train的问题
  2. HTML5和CSS3开发第一章课后作业
  3. 追女孩儿,从入门到精通大法
  4. 世界上最经典的感情短语
  5. 成长心态:本我,自我,超我
  6. android 手机找回,找回Android手机的 Wi-Fi功能
  7. 瑞典品牌Peak Performance正式进入中国;雅萌新一代ACE Pro射频美容仪上市 | 知消...
  8. 【思维导图绘制工具】万彩脑图大师教程 | 插入剪切画到思维导图中
  9. python基本原理-Python理论基础知识复习
  10. “鞋之城”微信小程序的设计与开发