zoukankan      html  css  js  c++  java
  • 面向对象的内存分析

    为了让大家对于面向对象编程有更深入的了解,我们要对程序的执行过程中,内存到底发生了什么变化进行剖析,让大家做到“心中有数”,通过更加形象方式理解程序的执行方式。

    建议:

      1. 本页是为了让初学者更深入了解程序底层执行情况,为了完整的体现内存分析流程,会有些新的名词,比如:线程、Class对象。大家暂时可以不求甚解的了解,后期学了这两个概念再回头来看我们这篇内存分析,肯定收获会更大。

      Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area。

    栈的特点如下:

      1. 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)

      2. JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)

      3. 栈属于线程私有,不能实现线程间的共享!

      4. 栈的存储特性是“先进后出,后进先出”

      5. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!

    堆的特点如下:

      1. 堆用于存储创建好的对象和数组(数组也是对象)

      2. JVM只有一个堆,被所有线程共享

      3. 堆是一个不连续的内存空间,分配灵活,速度慢!

    方法区(又叫静态区)特点如下:

      1. JVM只有一个方法区,被所有线程共享!

      2. 方法区实际也是堆,只是用于存储类、常量相关的信息!

      3. 用来存放程序中永远是不变或唯一的内容。(类信息【Class对象】、静态变量、字符串常量等)

    1.png

    图4-4 示例4-3内存分配图

    neicunfenxi.png

  • 相关阅读:
    Github+Jekyll 搭建个人网站详细教程
    github发布博客
    如何在GitHub部署自己的个人网站
    VS2017git 提交提示错误 Git failed with a fatal error.
    CAD 二次开发----- 块
    Updates were rejected because the remote contains work that you do(gitee报错解决方案)
    关于错误CSC : error CS0006:未能找到元数据文件
    js 四舍五入
    spingboot 邮件模板发送;
    springboot 邮件
  • 原文地址:https://www.cnblogs.com/huaxiansheng/p/15310503.html
Copyright © 2011-2022 走看看