16.Java基础_对象内存图】的更多相关文章

单个对象 1.进入main函数,生成main函数的栈空间 2.先在mian函数的栈空间里产生一个Student变量(以后会用来存储Studnet对象的首地址),然后进入Student类,在堆内存创建String和int类型的变量,并赋上初值 3.将在堆内存的对象的首地址赋值给在栈内存的Studnet变量s,即这个对象创建完毕.然后该程序输出了该对象的地址值 4.取值拼接输出,然后再修改值,拼接输出 5.调用Student类的函数,创建study函数的栈空间,然后执行函数代码,执行完之后消除栈空间…
单个数组内存图 new int[3]: 在堆内存里申请一块空间存储int类型的变量(初始化时值都为0) int[] array: 在栈内存申请一块内存存储堆内存里数组的首地址 array[i]: 通过堆内存内地址的首地址再加上偏移量 i 可以读写数组 多个数组内存图 同单个数组 多个数组指向相同内存 多个栈内存数组变量存储同一个堆内存数组的首地址…
对象内存分析,我一直学的比较模糊,今天抽空整理一下,希望能理清. 先说一下,内存分析从何而来,这对于我们这些刚接触java的人来说都比较模糊,就从new关键字说起吧. new关键字表示创建一个对象或者说是实例化对象或者说是申请内存空间,所有程序运行都需要内存来存储数据,这样内存的概念就出来了.举个例子说明:定义一个类Person,属性:char a;int sge;那么创建一个对象申请的内存空间就是所有属性所占字节之和,为6个字节. 详细理一下对象在内存中的结构: Person p=new Pe…
package pack1; public class Student { private String name; private int age; //构造方法 //如果没有任何构造函数,系统会自动给一个无参构造函数 public Student(){ this.name=""; this.age=0; } public Student(String name,int age){ this.name=name; this.age=age; } public void show(){…
面向对象思想概述.开发设计特征 1:面向对象思想 面向对象是基于面向过程的编程思想. 面向过程:强调的是每一个功能的步骤 面向对象:强调的是对象,然后由对象去调用功能 2:面向对象的思想特点 A:是一种更符合我们思想习惯的思想 B:可以将复杂的事情简单化 C:将我们从执行者变成了指挥者 举例: 买电脑: 面向过程:我的了解电脑--了解我自己的需求--找对应的参数信息--去中关村买电脑--讨价还价--买回电脑 面向对象:我知道我要买电脑 -- 班长去给我买 -- 班长就买回来了 洗衣服: 面向过程…
很早之前整理的Java基础的一些知识点,思维导图: 1.'别名现象' 对一个对象赋值另一个对象,会指向新的对象引用,赋值前的对象引用会由于不再被引用而被gc回收: 而基本类型则不同.基本类型存储了实际的值,而并非指向一个对象的引用,为其赋值,是将一个地方的内容复制到了另一个地方. 2.== 与 equals 对于==,如果作用于基本数据类型的变量,则直接比较其存储的 "值"是否相等:如果作用于引用类型的变量,则比较的是所指向的对象的地址: 对于equals方法(注意:equals方法不…
Java 内存分配策略 静态存储区(方法区):主要存放静态数据.全局 static 数据和常量.这块内存在程序编译时就已经分配好,并且在程序整个运行期间都存在. 栈区 :当方法被执行时,方法体内的局部变量(其中包括基础数据类型.对象的引用)都在栈上创建,并在方法执行结束时这些局部变量所持有的内存将会自动被释放.因为栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. 堆区 : 又称动态内存分配,通常就是指在程序运行时直接 new 出来的内存,也就是对象的实例.这部分内存在不使…
1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间. 释放:对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的工作.但同时,它也加重了JVM的工作.因为,GC为了能够正确释放对象,GC必须监控每一个对象的运行状态,包括对象的申请.引用.被引用.赋值等,GC都需要进行监控. 2.什么叫java的内存泄露 在…
首先,内存模型图,如下: 其次,一句话概括各个区域的作用: 1:程序计数器(Program Counter Register),让虚拟机中的字节码解释器通过改变计数器的值来获取下一条代码指令,比如分支.循环.跳转.异常处理.线程恢复等: 2:Java 虚拟机栈(Java Virtual Machine Stacks),栈顶存放当前方法,里面有局部变量表, 3:本地方法栈(Native Method Stacks),本地方法栈则,是为虚拟机使用到的Native 方法服务,作用同虚拟机栈. 4:Ja…
所有人都知道面向对象思想,Java中的对象的创建在内存中是如何创建的,传智播客的视频看了一遍,把一些讲解的比较清晰的内容记录下来,方便记忆的更加深刻,Java中创建对象的过程,首先要理解JVM中栈.堆.方法区的空间,以及在这三个空间内,虚拟机都进行什么操作,这样就会理解起来容易一些,其实Java是在C语言的基础上发展起来的,很多的内容是借鉴C语言的. 以下分别是创建一个对象.两个对象.以及三个对象的内存图解,讲的比较详细,而且比较生动,很好理解: (方法调用是在栈中进行的,当方法调用完成之后,会…