一、对于Java程序员来说,在虚拟机的自动内存管理机制下,我们不需要为每一个new操作去写匹配的delete/free操作

  但是当我们对于内存的管理了解有能够帮助我们理解Java虚拟机的垃圾回收机制、多线程操作、以及内存操作。

二、Java虚拟机在执行java程序的过程中 ,会把他管理的内存划分为若干数据区,从创建和销毁时间来看可以划分为两大类

  1、随Java虚拟机的启动而存在

  2、依赖用户线程的启动和结束而建立和创建

三、具体内存模型

  

 四、内存模块具体讲解

    (一)、程序计数器(线程私有)

      1、程序计数器:是一块比较小的内存空间,可以看作是当前线程所执行字节码的行号指示器

       字节码解释器在工作是,通过改变程序技术器的值来选择下一条需要执行的字节码指令:分支、循环、跳转、异常处理、线程恢复等工作都需要该字节码解释器

      2、Java虚拟机的多线程执行是通过线程轮流切换,分配处理器执行时间的方式实现的,每个线程都需要独立的程序计数器,因此各个线程之间程序计数器互不影响

      3、如果线程执行的是一个java方法,这个计数器记录正在执行的虚拟机字节码指令地址,如果是Native方法,计数器的值为空

    (二)、Java虚拟机栈:(线程私有)

      1、虚拟机栈:描述了java方法在运行的内存模型:每个方法在执行时就会创建栈帧(一种数据结构),用于方法的局部变量表,操作数栈、动态链接、

       方法出口等信息,每个方法执行从执行到结束的过程对应着栈帧在虚拟机栈中入栈和出栈的过程。

      2、人们经常说的堆栈,其中栈就是指虚拟机栈

      3、局部变量表存放了编译器所知道的各种基本数据类型(int、long、double...)对象引用和returnAddress类型(指向一条字节码指令的地址)

      4、局部变量表需要的内存在编译时期分配

    (三)、本地方法栈:(由虚拟机调用)

      1、本地方法栈:与虚拟机栈的作用相似,Native方法运行的内存模型.

      2、本地方法栈中方法使用的语言和数据结构都没有强制规定。

    (四)、方法区(线程共享)

      1、方法区:各个线程共享的内存区域,用于保存已被Java虚拟机加载的类信息、常理、静态常量、即时编译后的代码

      2、方法去的别名非堆(Non-Heap)

      3、运行常理池是方法区的一部分

     (五)堆(线程共享)

      1、在虚拟机启动时创建,用于存放对象实例,Java虚拟机规范中描述:所以的对象实例已经数组都在堆上分配(JIT编译器的发展是该规则有一点变化)

      2、JAVA垃圾收集器管理的主要区域,因此称为GC堆

JAVA虚拟机内存模型的更多相关文章

  1. Java虚拟机内存模型及垃圾回收监控调优

    Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...

  2. Java虚拟机--内存模型与线程

    Java虚拟机--内存模型与线程 高速缓存:处理器要与内存交互,如读取.存储运算结果,而计算机的存储设备和处理器的运算速度差异巨大,所以加入一层读写速度和处理器接近的高速缓存来作为内存和处理器之间的缓 ...

  3. Java虚拟机 - 内存模型

    本文主要介绍Java虚拟机的内存分布以及对象的创建过程. 一.Java虚拟机的内存分布 文章开始前读者需要了解Java虚拟机的运行时数据区是怎样划分的.如下图所示: 1.程序计数器(Program C ...

  4. 深入理解Java虚拟机内存模型

    前言 本文中部分内容引用至<深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)>第12章,如果有兴趣可自行深入阅读,文末放有书籍PDF版本连接. 一.物理机中的并发 物理机遇到的并 ...

  5. 面试常问的Java虚拟机内存模型,看这篇就够了!

    一.虚拟机 同样的java代码在不同平台生成的机器码肯定是不一样的,因为不同的操作系统底层的硬件指令集是不同的. 同一个java代码在windows上生成的机器码可能是0101.......,在lin ...

  6. java 虚拟机内存模型

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:[http://www.cnblogs.com/smyhvae/p/4748392.html] 文章来源:[http://www.cnblog ...

  7. Java虚拟机03(Java虚拟机内存模型)

    根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 其实最需要Java程序员关注的是堆,栈,还有方法区,因为啊: 如果代码又问题的话,可能回出现栈溢出 然后说 ...

  8. 作业1:java虚拟机内存模型图示

    看了很多篇文章,整理成一幅图,但仍然有许多不解的地方,以后再接着完善,哪位大神看到不正确的地方,请指出,谢谢.

  9. 栈帧 2.6. Frames 虚拟机内存模型

    https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-2.html#jvms-2.6 小结: 1. https://docs.oracle. ...

随机推荐

  1. hdu 1524 A Chess Game 博弈

    题目链接 给出一个有向无环图, 上面放有一些棋子, 两个人轮流移动棋子, 当一个人无法移动时, 算输. 求出每一个点的sg值, 异或就可以.出度为0的点sg值为0. #include<bits/ ...

  2. JS 节流阀

    JS 节流阀 参考 https://github.com/hahnzhu/read-code-per-day/issues/5 节流阀 节流阀的基本原理 事件函数的执行都记下当前时间, 只有当前时间与 ...

  3. java基础-修饰符

    下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?(B) A:private  B:无修饰符  C:public  D:procted 名称  说明  备注  public  可以被 ...

  4. 一段关于 Unix、Linux 和 Windows 的暗黑史

    “SCO 在言语上变得越来越好斗,而且还拒绝展示有关诉讼的任何证据,一切都似乎在表明,SCO只不过是在那里拉虎皮做大旗地狂言乱语.但是,微软 决不会轻易放弃这么可以一个利用这些狂言乱语的好机会.”20 ...

  5. linux shell编程总结

    linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...

  6. Windows Azure 虚拟网络中虚拟机的网络隔离选项

     最近我们发布了一份<Windows网络安全白皮书>(单击此处下载),文中深入说明了客户可以如何利用该平台的本地功能,为他们的信息资产提供最好的保护. 由首席顾问Walter Myer ...

  7. contextServlet

    一:读取配置文件中的参数信息 1.新建servlet文件ContextServlet1,代码为: import java.io.IOException; import java.util.Enumer ...

  8. Matlab中的取整-floor,ceil,fix,round

    FLOOR Round towards minus infinity. FLOOR(X) rounds the elements of X to the nearest integers toward ...

  9. Unity3d 通过协程来实现文件的全部加载后执行

    相信大家会经常遇到在游戏中需要WWW从本地或者服务器上获取数据,而我们通常容易会犯下面这种个错误:当数据较少或者网速较好时程序运行正常.而当数据较大或者网速不好时程序会出错误.比如卡住. 所以我们要使 ...

  10. cpu卡,sam卡原理

    第一部分 CPU基础知识一.为什么用CPU卡IC卡从接口方式上分,可以分为接触式IC卡.非接触式IC卡及复合卡.从器件技术上分,可分为非加密存储卡.加密存储卡及CPU卡.非加密卡没有安全性,可以任意改 ...