文档章节

Java 基础 -1 - 内存管理之内存分配

wow863597
 wow863597
发布于 2016/05/07 17:08
字数 810
阅读 12
收藏 0

1.基础 

内存区 :  栈内存   (局部变量 ),堆内存(对象) ,方法区 (贮存方法)。

局部变量 (随方法结束消亡): 形参 ,  方法内局部变量 ,代码块中局部变量   。

成员变量 :   类变量 (静态变量 )  ,实例变量 ; 类变量初始化在实例变量之前 。(即使 写在实例变量之后 )。

关于static 只能修饰 类里面定义的成员: 成员变量, 方法 ,内部类,内部枚举类, 代码块   。

代码块理解成几个成员变量放在一起,成员变量语句也可理解成,单句的代码块。因此代码块与成员变量具有相同优先级。

2.内存分配过程:

遵循以下三点 :

①对于同一个jvm 来说每个类只对应 一个Class 对象, 也就是 类加载一次 (开辟一段内存空间), 但是每次创建一次实例对象就对应一个 Java对象 ,也就是实例化多次 (在堆内存 开辟多个对象内存空间) ,并且每次实例化的对象中都不包含类成员。每个类在程序运行过程中第一次调用时 会加载一次,即产生一个class 对象。 

②每当程序调用 构造方法 创建对象时 ,会对变量进行初始化 即开辟内存空间 。初始化顺序为 如下:(该类已经被加载过,即静态块已经被初始化):先对非静态初始化快进行初始化,之后对构造器初始化 。

③含有继承关系的内存分配:每当程序调用子类的属性或者方法时 ,程序会先从其最高父类 进行初始化,根据先初始化 非静态方法 再初始化构造器 的顺序  进行初始化  。依次 初始化 最高父类 ,父类 , 一直到调用方法的子类。 

若父类有多个构造方法,调用哪个构造方法遵循以下:SUPER () 显式调用 则根据形参参数判断 ,this()调用子类重载构造, 不写 默认 调用父类无参构造,若父类无无参构造 则视为编译错误。

④:初始化块执行初始化 与 定义实例变量执行初始化 因为是平等的 所以同时被提到 构造方法中进行初始化 (开辟内存空间),赋值顺序依照 程序中书写顺序。

⑤:对于以上初始化顺序,若程序第一次调用该类,则优先初始化 静态块,调用构造方法 。之后再按照 ② ,③中顺序进行初始化 。

3. 其他:

类变量可以通过类访问 也可以通过 实例访问 ,本质都是通过类访问 ,都是访问的同一个类变量,假如通过实例访问 进而改变类变量的值,那么 再通过其他实例调用类变量值都改变。

向上造型时 ,父类引用调用子类重写方法 ,视为调用的子类的方法。调用 与父类同名属性则视为调用父类属性。

© 著作权归作者所有

共有 人打赏支持
wow863597
粉丝 3
博文 38
码字总数 23132
作品 0
济南
程序员
私信 提问
mina中的allocate和directAllocate区别

allocate和directAllocate 区别在于内存的类型,allocate分配的内存在jvm管理范围内,directAllocate分配的内存则不是由jvm管理,可以理解成是类似C++那种分配的内存,大一定会说那由directA...

JavaGG
2009/07/08
362
0
JVM系列一:JVM内存组成及分配

java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”...

Yohance
2014/04/22
0
0
会对应一个栈帧在虚拟机栈中入栈到出栈的过程。

对于从事C、C++的开发人员而言,在内存管理领域,他们具有绝对的“权利”——拥有每个对象的控制权,并担负着每个对象生命周期的维护责任。而对于Java开发人员而言,在虚拟机自动内存管理机制...

Choice_JJ
2017/07/13
20
0
《深入理解Java虚拟机》之Java虚拟机内存结构(1)

这个是很重要的一个基础认识。 java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下: 其中方法区和堆是由所有线程共享的数据区。 Java虚拟机栈,本地方法栈和程...

lixiyuan
2014/04/10
0
1
Java虚拟机基础——4内存回收机制

Java虚拟机整体篇幅如下: Java虚拟机基础——1Java的内存模型 Java虚拟机基础——2JVM运行时数据区 Java虚拟机基础——3类加载机制 Java虚拟机基础——4内存回收机制 本篇文章的内容如下: ...

隔壁老李头
2018/10/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面向对象继承

第1章 面向对象 1.1 知识回顾 1.Java中的数据类型 2.引用数据类型String中的方法 3.IO流_读写文件 1.2 面向对象概念回顾 什么叫面向对象编程?有人是这么理解的 也有人说不对,面向对象编程是你...

stars永恒
28分钟前
0
0
Java-深入HashMap原理及内部存储结构

本文将通过如下简单的代码来分析HashMap的内部数据结构的变化过程。 public static void main(String[] args) { Map<String, String> map = new HashMap<>(); for (int i = 0; i ......

小刀爱编程
43分钟前
1
0
高并发和分布式中的幂等处理

概念 抽象概念 幂等(idempotent,idempotentce)是一个数学与计算机概念,常见于抽象代数中。 在计算机概念中,就是针对一个操作,不管做多少次,产生效果或返回的结果都是一样的。 场景距...

细节探索者
44分钟前
0
0
2019年1月份最新阿里内推Java后端面试题

阿里一面题目: osi七层网络模型,五层网络模型,每次层分别有哪些协议死锁产生的条件, 以及如何避免死锁,银行家算法,产生死锁后如何解决如何判断链表有环虚拟机类加载机制,双亲委派模型...

别打我会飞
今天
2
0
MIT 6.828 main.c文件分析

#include <inc/x86.h>#include <inc/elf.h> /*这是一个简单粗略的boot loader,它唯一的工作就是从硬盘的第一个扇区启动格式为ELF的内核镜像硬盘布局这个程序(包括boot.S和mai...

FeanLau
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部