图中能够看到的就不赘述了,细说一下各个模块:(1)、程序计数器:在图中可以看到是一个很大的绿块,其实程序计数器本身只是很小的一部分内存,顾名思义,他的功能就是记录程序当前执行到哪一个指令的,图中可以看到程序计数器是非线程共享的,也就是每一个线程都有一个自己的程序计数器,原因是单核情况下多线程是由于切换上线文实现的,也就是在某一时刻实际上只有一个执行在执行,而当前线程结束之后需要回到另外一个线程去,所以这个时候就需要一个程序计数器记录另一个线程执行到哪里了,否则就找不到了。当线程执行的是java方法时,计数器记录的值即为正在执行的jvm中字节码指令的地址,如果线程执行的是native方法(非java方法时),此时计数器的值为空(Undefined)。程序计数器是虚拟机中唯一一块不会OOM的区域。(2)、虚拟机栈:虚拟机栈也是线程独占的内存,不共享,生命周期和线程相同。虚拟机栈是做什么用的呢?在java方法执行过程中所产生的的对象就存储在这个区域中。当一个方法执行时就会创建一个栈帧,用于存放局部变量表,操作数栈,动态链接,方法出口等信息,方法执行的过程就对应着虚拟机栈入栈出栈的过程。虚拟机栈中的局部变量表应该是我们最容易理解也最关键的部分,我们在方法中的创建的每一个变量都在这里面。? ? ? ? ? ? 需要注意的是:局部变量表的大小在编译时就已经确定了,并且不会改变,因为我们编译的时候就能清楚的知道方法中定义的每一个基本数据类型和引用。其中64位的double和long占用两个局部变量空间,其他的数据类型都只占用一个。? ? ? ? ? ? 在虚拟机栈中是会出现两种溢出,一种是栈深超过了指定长度就会报出stack溢出异常,但是的虚拟机栈基本都是定义的可扩展的,所以一般不容易发生前面这种异常,同时也会带来后一种溢出异常,当栈进行扩展时发现无可用的内存进行扩展,就会报内存溢出。

(3)、本地方法栈:本地方法栈和虚拟机栈的功能是一样的,唯一区别是虚拟机栈是为java方法服务,而本地方法栈是为native方法服务。由于java虚拟机规范中对本地方法栈的限制很少,所以各家厂商的实现不尽相同,甚至有把本地方法栈融入到虚拟机栈中的。

异常方面和虚拟机栈一样存在栈溢出和内存溢出两种异常。

(4)、堆:上面说的三块区域属于线程独占内存,而堆则是属于线程共享内存了。java虚拟机规范上描述是:所有的对象实例包括数组的内存都要在堆上分配(随着jit编译器,逃逸分析技术的发展,现在不是那么绝对了),所以很好理解对于大多数应用来说堆是最大的一块内存区域了,对的生命周期是和虚拟机共生共灭的,但是堆上的对象则是会被回收的,堆也是GC回收的主要战场。根据java虚拟机规范定义,堆是可以在不连续的内存空间上的,所以只要逻辑允许,堆是可扩展的。(堆上的各种细分以及垃圾回收机制我们到GC章节单独细说)

堆上会发生内存溢出,当没有内存能够进行生成实例,并且也没有内存可以扩展的时候就会报内存溢出。

(5)、方法区:和堆一样,这部分是线程共享区。同样,顾名思义方法区可以理解为代码逻辑层,或者说叫堆的逻辑层,比如编译后的正在执行的代码,静态变量,加载的那些类的基本信息,以及常量池都在方法区中。方法区和堆一样也需要参与到垃圾回收,主要回收目标是常量池和对类进行卸载。

异常方面和堆一样,当无法满足内存分配需求时就会报内存溢出。

jvm内存模型是我们经常在面试中遇到的问题,但是从实用角度来说,学习jvm内存模型到底有什么用呢?在一个低并发,低内存消耗的系统中这些自然都不用考虑,但是反之则需要认真考虑内存是否够用的问题,是哪部分内存溢出了,溢出原因是什么,是选择添加集群还是可以尝试优化代码?这些判断都需要建立在我们对jvm内存模型掌握的基础之上。

微信扫一扫

java虚拟机内存情况检测,测试啦啦啦啦啦1111相关推荐

  1. java最大内存_JAVA:测试java虚拟机支持的最大内存 Xmx 值?Tomcat 内存溢出?

    如下命令,即可测试:不断调整n的值,windows上32位的1.6x为: 1610m java -Xmx1610M -version java -Xmx1610m -version 网摘的tomcat ...

  2. 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 )

    文章目录 一.Java 虚拟机内存分区 二.垃圾回收机制 三.引用计数器算法 ( 无法解决循环引用问题 ) 一.Java 虚拟机内存分区 Java 虚拟机内存分区 : 所有线程共有的内存区域 : 堆 ...

  3. java 虚拟机_浅谈Java虚拟机内存区

    1. Java 虚拟机内存区概述 我们在编写程序时,经常会遇到OOM(out of Memory)以及内存泄漏等问题.为了避免出现这些问题,我们首先必须对JVM的内存划分有个具体的认识.JVM将内存主 ...

  4. 携程面试官问我怎么划分 Java 虚拟机内存区域,相见恨晚!

    看完记得一键三连哦,微信搜索[沉默王二]关注这个沉默但有点东西的小丑. 今天的标题绝非标题党,看下面这幅截图就明白了,读者真真的留言~ 在谈 JVM 内存区域划分之前,我们先来看一下 Java 程序的 ...

  5. Java 虚拟机内存模型

    一.前言 Java 虚拟机,简称 JVM(Java Virtual Machine),是 Java 语言中最为核心的一个东西,Java 程序运行离不开它,因为它的存在,使得 Java 拥有" ...

  6. Java 虚拟机内存分配机制

    Java 虚拟机内存分配机制 内存区域划分 对于大多数的程序员来说,Java 内存比较流行的说法便是堆和栈,这其实是非常粗略的一种划分,这种划分的"堆"对应内存模型的 Java 堆 ...

  7. 【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存

    文章目录 一.JDK 体系结构 二.Java 源码运行原理 三.Java 虚拟机内存结构 一.JDK 体系结构 JDK 体系结构 : 下图所有的内容都是 JDK 体系中的组成元素 ; Java Lan ...

  8. 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )

    文章目录 一. Java 虚拟机内存模型 二. 程序计数器 ( 线程私有区 ) 三. 虚拟机栈 ( 线程私有区 ) 四. 本地方法栈 ( 线程私有区 ) 五. 方法区 ( 共享数据区 ) 1. 方法区 ...

  9. JAVA环境指定xms512_【JAVA学习】java虚拟机内存配置,-Xss256m -Xms512m -Xmx800m -XX:MaxPermSize=512m...

    转自:https://blog.csdn.net/a503921892/article/details/39048737 配置tomcat服务器内存大小中的Xms.Xmx.PermSize.MaxPe ...

  10. java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案

    java虚拟机内存不足,"Could not create the Java Virtual Machine"问题解决方案 参考文章: (1)java虚拟机内存不足,"C ...

最新文章

  1. 详细说明Spring--AOP
  2. 费马大定理:三百年数学圣杯的角逐
  3. 区块链创业者:谈企业级区块链落地,传统行业的崛起(分享实录)
  4. clion 代码格式化 大括号换行对齐
  5. UE4学习-在虚幻编辑器中打开VS的三种方式
  6. matlab imcrop 对应python函数_Python精讲Numpy基础,大牛笔记详细解释
  7. 做到这几点,让你离高级程序员更近一步!
  8. jupyter新建文件_Jupyter渲染网页的3种方式
  9. [重要] Cocos2dx 3.0 PageView ListView 在Android设备下背景显示为绿色的问题的解决方案
  10. 推荐一个键盘快捷键库Mousetrap
  11. java 调用felix_寻找在动态加载Jar文件中使用Apache Felix并在Java中在运行时实例化类的基本示例...
  12. mysql修复损坏表_在MySQL中,如何修复损坏的表
  13. 压缩算法gorilla paper encoding原理
  14. 【木棍问题——回溯与分支限界算法(使用C语言解决)】
  15. Arthas 快速入门
  16. xstream 数字映射不上去_什么是智慧城市、数字城市、孪生城市、海绵城市、平安城市、天网工程、雪亮工程...
  17. 文档向量表示入坑 (持续 更新中)
  18. [附源码]计算机毕业设计大学生创新项目管理系统Springboot程序
  19. 超详细的Linux安装及配置【fastDFS+nginx】处理海量图片传输与存储【报错解决】
  20. php根据user-agent判断客户端是pc还是wap

热门文章

  1. MiniGUI源码分析——GDI概览及Surface
  2. QQ被盗如何找回好友
  3. python pandas缺失值处理_pandas缺失值的处理
  4. 利用免费cdn加速webpack单页应用
  5. 260. 只出现一次的数字 III【我亦无他唯手熟尔】
  6. 编译原理实验三 TINY语法分析器
  7. [windows系统上运行spark报错Could not locate executable null\bin\winutils.exe in the Hadoop binaries
  8. 解析 embedded.mobileprovision 获取信息
  9. 想学习高速ADC/DAC/SDR项目这个项目你不得不理解
  10. 图片合并pdf,详细方法!