美文网首页
4.3-全栈Java笔记:面向对象的内存分析

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

作者: 全栈JAVA笔记 | 来源:发表于2017-06-29 09:59 被阅读93次

面向对象的内存分析

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

老鸟建议:        

本节是为了让初学者更深入了解程序底层执行情况,为了完整的体现内存分析流程,会有些新的名词,比如:线程、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 

相关文章

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

    面向对象的内存分析 为了让大家对于面向对象编程有更深入的了解,我们要对程序的执行过程中,内存到底发生了什么变化,进...

  • Java对象内存分析

    此处对象内存分析只针对Java基本对象,暂不对集合对象进行剖析。 内存 栈内存 堆内存

  • Java(L1)--面向对象

    Java知识点梳理 Chapter 3 面向对象的基本概念 堆内存与栈内存堆内存:存放对象的属性内容,需要new关...

  • Java学习笔记二:内存分析、this、static和参数传值机

    一、面向对象的内存分析 1.内存分配 栈的特点如下: 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧...

  • Java面向对象-堆、栈对象内存解析。

    学生类: 学生测试类: 在JVM内存里面主要分布有以下三个区域: 栈:存放基础数据和自定义对象的引用 堆:主要存储...

  • 堆和栈的区别

    栈内存用于存储基本类型变量和对象的引用;堆内存用来存储java中的对象。栈和堆.png 栈内存属于单个线程,每个线...

  • 深入理解JVM-java内存划分以及对象新建

    1. Java内存区域划分 程序计数器 虚拟机栈 本地方法栈 Java堆 方法区 直接内存 2. 对象 对象的新建...

  • 好好看,好好学

    Java部分 面向对象 java 内存JVM:图文解析 Java内存结构Java虚拟机内存管理——内存空间划分Ja...

  • 堆和栈

    一 java 堆内存和栈内存 java把内存分为两种:一种是堆内存,一种是栈内存 堆: 堆内存主要存储实例化对象,...

  • java面向对象 修饰符 类

    java面向对象: java变量的内存存储模型,存在栈中。 数据存储的五大位置: 1.寄存器(位于处理器内部) 2...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/efcmcxtx.html