4.3-全栈Java笔记:面向对象的内存分析

面向对象的内存分析

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

老鸟建议:        

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

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

栈的特点如下

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

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

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

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

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

堆的特点如下

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

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

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

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

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

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

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

   内存分析图(4.2章节中示例2)

对象的使用及内存分析

【示例1】编写Person

public class Person{

    String name;

    int age;

    public void setAge(int age){

       this.age=age;

    }

}

【示例2】创建Person类的对象并使用

public static void   main(String [] args){

       //必须使用new关键字创建对象

       Person person=new Person();

       //使用对象(引用).成员变量来引用对象的成员变量

       person.age=24;

       //使用对象(引用).方法(参数列表)来调用对象的方法

       person.setAge(23);

}

【示例3】创建Person类对象的提升

public static void   main(String [] args){

        //创建p1对象

       Person p1=new Person();

       p1.age=24;

       p1.name="张三";

       p1.show();

       //创建p2对象

       Person p2=new Person();

       p2.age=35;

       p2.name="李四";

       p2.show();

}

示例3 运行效果图

 示例3 内存分析图


内存分析图可以得出如下结论:

  · 同一类的每个对象有不同的成员变量存储空间。

  · 同一类的每个对象共享该类的方法。




「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。


笔记包含从浅入深的六大部分:

A-Java入门阶段

B-数据库从入门到精通

C-手刃移动前端和Web前端

D-J2EE从了解到实战

E-Java高级框架精解

F-Linux和Hadoop 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,154评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,943评论 0 62
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 9,151评论 0 11
  • 刚开始踏入憧憬的大学之前,想着自己在大学里要好好学习,拿奖学金;做兼职为家里减轻负担;好好谈一场轰轰烈烈的恋爱,心...
    乐远心阅读 3,345评论 0 0
  • 这里介绍这幅图指中的js文件 这里主要是拿来做一个导入路径时可以找到绝对路径,所以这里做一个别名,首先要两步: 一...
    zero风来阅读 3,853评论 0 0