Java虚拟机所管理的内存图:

1程序计数器:

该模块作用是记录线程执行字节码的位置,记录程序执行状态,以便该线程下次获得CPU时继续执行。程序里的每个线程程序计数器相互独立,互不影响,该内存区也称“线程私有”内存。

2、java虚拟机栈:

与程序计数器一样,java虚拟机栈也是“线程私有”,’每个方法执行的时候进入虚拟机栈,会创建一个栈帧,用于存储局部变量表,操作栈,动态链接,方法出口等信息,每一个方法从调用到执行完成,对应着每一个栈帧在虚拟机栈中从入栈到出栈的过程。

其中局部变量表包括java基本数据类型以及对象引用类型(reference)、returnAddress类型,该区域在代码编译时即确定占用内存大小,不会在执行方法中改变。

在虚拟机规范中,该区会产生两种异常,一种是线程请求的栈深度大于虚拟机所允许的深度会抛出StackOverFlowError 异常;当虚拟机动态拓展java虚拟机栈没有足够的内存时,会产生OutOfMemoryError异常

3、本地方法栈

本地方法栈跟java虚拟机栈类似,不过java虚拟机栈是为java方法(java字节码)服务,本地方法栈是为Native方法服务,本地方法栈也会抛出StackOverFlowError以及OutOfMemoryError异常。

4、Java堆

Java堆是java虚拟机占用内存最大一块,所有对象共享该内存区。该区域存放对象,所有实例对象以及数组都在该区域分配内存进行实例化(随着JTI编译器的发展与逃逸分析技术的成熟,该说法不再绝对)

Java堆是垃圾回收的主要区域,该区域实例化时可用是连续的内存区域或者分开的区域,只要逻辑上是连续的即可,如果该区域实例化的时候分配不到内存或成熟OutOfMemoryError异常。

5、方法区

方法区和java堆一样都是共享区域,用于存储虚拟机已经加载的类信息、常量、静态变量以及即时编译器编译的代码数据,虽然java虚拟机规范描述该区为java堆的逻辑部分,但是该区有一个别名“非堆”,应该区分为方法区。

6、运行常量池

运行时常量池是方法区的一部分。Class文件中除了有版本、字段、方法、描述等信息,还有一项常量池,用于存储编译期生成的各种字面量和符号引用。

7、直接内存

JVM 虚拟机 内存说明的更多相关文章

  1. 设置TOMCAT的JVM虚拟机内存大小

    你知道如何设置TOMCAT的JVM虚拟机内存大小吗,这里和大家分享一下,JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序.这个初始内存和最大内存在一定程度都会影响程序的性能. 设置 ...

  2. JVM 虚拟机内存深入探究

    [<深入理解java虚拟机>-整理笔记] by  lijun JVM虚拟机内存逻辑模型: 方法区(全局变量 静态数据 常量等) 线程共享 堆栈区(对象实例 数组数据 new generat ...

  3. java中JVM虚拟机内存模型详细说明

    java中JVM虚拟机内存模型详细说明 2012-12-12 18:36:03|  分类: JAVA |  标签:java  jvm  堆内存  虚拟机  |举报|字号 订阅     JVM的内部结构 ...

  4. jvm 虚拟机内存模型

    来源:https://blog.csdn.net/A_zhenzhen/article/details/77917991?locationNum=8&fps=1    https://blog ...

  5. JVM虚拟机 - 内存

    在JVM虚拟机中,内存部分大致可以分为以下几类: Heap:堆 NonHeap:非堆 CodeCache:缓存编辑后的机器码的内存区域 CompressedClassSpace:类压缩空间 MetaS ...

  6. 面试官:别的我不管,这个JVM虚拟机内存模型你必须知道

    前言 说jvm的内存模型前先了解一下物理计算机的内存处理. 物理计算器上用户磁盘和cpu的交互,由于cpu读写速度速度远远大于磁盘的读写速度速度,所以有了内存(高速缓存区).但是随着cpu的发展,内存 ...

  7. JVM虚拟机内存模型以及GC机制

    JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中 Heap = {Old + NEW = { Eden , from, to } } JVM内存模型中分两大块,一块是 NEW Ge ...

  8. JVM虚拟机内存溢出垃圾收集及类加载机制总结

    1.Java内存区域与内存溢出异常 虚拟机栈:为虚拟机执行Java方法服务 本地方法栈:为虚拟机使用到的native方法服务. Java堆:是Java虚拟机所管理的内存中最大的一块,被所有线程共享的一 ...

  9. 对jvm虚拟机 内存溢出的思考

    java内存溢出:当新产生对象时,新生代空间不够,导致无法申请到足够的空间,报内存溢出 内存泄漏:一些静态集合,静态常量没有被gc清理,越来越多,占用内存,最后导致无法申请到新的空间

随机推荐

  1. day4总结

    函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或 ...

  2. zigbee学习之路(十一):看门狗

    一.前言 今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来. 二.原理与分析 在CPU ...

  3. 2016ACM/ICPC亚洲区沈阳站-重现赛

    C.Recursive sequence 求ans(x),ans(1)=a,ans(2)=b,ans(n)=ans(n-2)*2+ans(n-1)+n^4 如果直接就去解...很难,毕竟不是那种可以直 ...

  4. 用JavaScript实现的选项卡

    Codes wins arguments! <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...

  5. How To Install Java on CentOS and Fedora

    PostedDecember 4, 2014 453.8kviews JAVA CENTOS FEDORA   Introduction This tutorial will show you how ...

  6. ubuntu一些常用的命令

    1.docker里的ubuntu不知道密码,更新密码 sudo passwd 2.解压zip文件 unzip xx.zip 3.安装LAMP (1)sudo apt-get install apach ...

  7. Cheatsheet: 2016 04.01 ~ 04.30

    .NET String format Setting up Ubuntu for .NET Development ASP.​NET Core and Angular2 - Part 1 - Upda ...

  8. SQL-Server使用点滴(一)

    前言 SQL的语法比较简单,学起来相比界面UI控制要简单得多,但是SQL在企业级应用中又是如此的重要,以至于很多开发人员都把重点放在SQL上. SQL并没有面向对象的概念,最复杂的设计也不过是表值函数 ...

  9. 在 ASP.NET MVC 中使用 HTML Helpers 的那些事

    在 ASP.NET MVC 中使用 HTML Helpers 方法,可以返回得到标准的 HTML 标签,就像 <input>.<button> 或者 <img> 等 ...

  10. 关于面试别问及Spring如何回答思路总结!

    首先要知道 Spring两大核心IOC和AOP(Java轻量级业务层框架Spring两大核心IOC和AOP原理) IOC: 1.从Java最基本的创建对象开始 如Interface Driven De ...