文档章节

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
367
0
JVM系列一:JVM内存组成及分配

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

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

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

Choice_JJ
2017/07/13
140
0
Java虚拟机基础——4内存回收机制

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

隔壁老李头
2018/10/03
0
0
认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别

Eclipse崩溃,错误提示: MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommended that you exit and restart M......

囧南风囧
2012/07/02
618
0

没有更多内容

加载失败,请刷新页面

加载更多

面向海量数据的极致成本优化-云HBase的一体化冷热分离

前言 随着业务的持续发展,业务数据库存储量会持续增长。通常数据量过亿时,就需要考虑做分库分表,或者选择扩展能力更好的NOSQL/NewSQL数据库,如HBase就可以单表支持PB级数据,足够满足大多...

阿里云官方博客
28分钟前
3
0
最新最全国内外架构开源技术干货资料

大家好,废话不多说,整理了精心收集了各类资源。 声明,如侵犯个人利益,请联系小编,会立即删除相关资料。 领取方式在文末 求转发列表 好了,由于资源太多啦,就不一一列举了。 大家按照下...

泥瓦匠BYSocket
31分钟前
6
0
springmvc jsp访问不了css

在jsp中引入css,一直报404错误,直接访问css,也无法访问 将css文件移出WEB-INF,因为处于安全性考虑,这个目录禁止外部访问。 当引用css时,可以直接用绝对路径${pageContext.request.conte...

沉迷于编程的小菜菜
33分钟前
4
0
android 系统版本 9.1网络请求遇到坑

网络请求异常: E/http: CLEARTEXT communication to plat.xunlinkeji.cn not permitted by network security policy 在res下新建一个xml目录 创建名为network_security_config.xml 文件 ,该......

MrLins
50分钟前
5
0
Istio 1.3 发布,HTTP 遥测不再需要 Mixer

> 原文链接:Istio 1.3 发布,HTTP 遥测不再需要 Mixer Istio 是 Google、IBM 和 Lyft 联合开源的服务网格(Service Mesh)框架,旨在解决大量微服务的发现、连接、管理、监控以及安全等问题...

米开朗基杨
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部