简单创建对象的内存分析

主程序:

1	public class Application {
2 public static void main(String[] args) {
3 Animal dog=new Animal();
4 dog.name="小花";
5 dog.age=10;
6 dog.barking("汪汪汪");
7 }
8 }

动物类:

1	public class Animal {
2 String name;
3 int age;
4 void barking(String bark){
5 System.out.println(bark);
6 }
7 }

​ 先看一下代码,简单的创建一个动物类,然后实例化一个dog对象

​ 首先运行程序,jvm虚拟机将运行程序所有的类和方法放到方法区,方法区的东西就像是一个模板,当运行到所需要的类虚拟机会依靠模板在堆中创建具体的对象和方法。

​ 当程序运行到第3行,首先Animal dog 会在栈中产生一个dog引用,他就相当于一个名字,然后 new Animal()会根据方法区的

Animal类在堆中创建一个实例,如第一条线。接着栈中的dog会指向这个实例,如第二条线。

​ 程序接着运行,就会将name,age,dark等值赋给dog实例,这样就创建了一个dog对象。

其中带static关键字的方法属性是跟类一起加载的,所以类中的所有对象都可以直接访问

(纯个人理解,有错误,望指出。)

Java创建对象时的简单内存分析的更多相关文章

  1. java构造器级简单内存分析

    java构造器的使用(基础篇) 构造方法也叫构造器,是创建对象时执行的特殊方法,一般用于初始化新对象的属性. 基本定义语法: 访问控制符 构造方法名([参数列表]){ 方法体 } 注:"访问 ...

  2. Java程序开发中的简单内存分析

    首先说明内存总体分为了4个部分, 包括 1.stack segment (栈区存储基本数据类型的局部变量,对象的引用名) 2.heap segment(堆区,一般用于存储java中new 出来的对象) ...

  3. Java连载29-方法执行内存分析、方法重载

    一.JVM包含三个内存区:栈内存.堆内存.方法区内存 二.注意点 (1)在MyEclipse中字体是红色的是一个类的名字,并且这个类除了我们自定义的类是JavaSE类库中自带的 (2)其实JavaSE ...

  4. Java连载34-对象的内存分析、对象之间建立关系

    一.内存分析 代码:引用可以是局部变量也可以是成员变量 public class Test1{ public static void main(String[] args){ User u = new ...

  5. 1.4(java学习笔记) 面向对象内存分析

      首先介绍几个概念 栈: 1.栈是方法执行的内存模型,每调用一个方法都会创建一个栈帧. 2.jvm为每个线程创建一个栈,存放方法相关信息,栈属于线程私有不共享. 3.栈由系统自动分配,是连续的内存空 ...

  6. 【Java 基础】java 创建对象时重写方法

    TransactionLock mockLock = new TransactionLock() { public boolean lock(String id) { return true; } p ...

  7. Java运行时环境---内存划分

    背景:听说Java运行时环境的内存划分是挺进BAT的必经之路. 内存划分: Java程序内存的划分是交由JVM执行的,而不像C语言那样需要程序员自己买单(C语言需要程序员为每一个new操作去配对del ...

  8. Java创建对象的动作分析

    一.Java创建对象时将对象存放到内存的堆中. 创建对象时先执行类成员的初始化,然后才会调用构造函数初始化对象, package com.test.createsort; public class C ...

  9. Java内存分析简单介绍

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11904422.html Java内存分析简单介绍: 1. # 设置内存溢出时自动生成堆内存快照 ...

随机推荐

  1. 【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)

    一.缓存 当系统的并发量上来了,如果我们频繁地去访问数据库,那么会使数据库的压力不断增大,在高峰时甚至可以出现数据库崩溃的现象.所以一般我们会使用缓存来解决这个数据库并发访问问题,用户访问进来,会先从 ...

  2. centos替换源

    !/bin/sh 本文原内容来自:https://github.com/judasn/Linux-Tutorial/blob/master/CentOS-Extra-Packages.md 可能额外需 ...

  3. D 楼房重建

    时间限制 : - MS   空间限制 : - KB  评测说明 : 1s,256m 问题描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊 ...

  4. 1065 A+B and C (64bit) (20分)(水)

    Given three integers A, B and C in [−], you are supposed to tell whether A+B>C. Input Specificati ...

  5. 安装 elasticsearch For LINUX

    官网下载地址 https://www.elastic.co/cn/downloads/elasticsearch 选择版本为LINUX 当前版本为 es-7.6.2 用tar 命令解压 tar -zx ...

  6. 如何用VmwareWorkstation安装Centos系统

    教你如何安装虚拟机系统 首先你得有虚拟化软件,常用的VmwareWorkstation一般能满足日常需求. 下载地址,请自行搜索. 第一步,新建虚拟机 选择安装系统源 这里有三个选项. 1.第一个是使 ...

  7. Linux系统安装Dos系统(虚拟机里装)

    结合以下两篇优秀的文章就能完成任务. 1.https://www.jb51.net/os/609411.html 2.http://blog.51cto.com/6241809/1687361 所需要 ...

  8. Python安装MySQL数据库模块

    背景 折腾: [记录]使用Python操作MySQL数据库 的过程中,需要去安装MySQLdb. 下载MySQLdb 去官网: http://pypi.python.org/pypi/MySQL-py ...

  9. matplotlib PyQt5 nivigationBar 中pan和zoom功能的探索

    为matplotlib生成的图添加编辑条,我们导入NavigationToolbar2QT from matplotlib.backends.backend_qt5agg import Navigat ...

  10. 聊一聊深拷贝和浅拷贝(JS)

    在 JS 中数据类型分为值类型和引用类型,对于值类型,变量中存放的是具体的值,而对于引用类型,变量中存放的是地址. 对于值类型: const a = 3; let b = a; b = 4; cons ...