文档章节

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
济南
程序员
《深入理解Java虚拟机》之Java虚拟机内存结构(1)

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

lixiyuan
2014/04/10
0
1
eclipse.ini/myeclipse.ini中配置参数 -Xms,-Xmx,-PerSize

今天下午查了一些关于优化MyEclipse速度的文章,受益匪浅。不过知其然也要知其所以然。比如说在提到通过修改myeclipse.ini文件中参数-Xms,-Xmx,-PerSize的值时,这几个参数具体是指什么?在...

Lofo
2013/11/12
0
0
JVM系列一:JVM内存组成及分配

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

Yohance
2014/04/22
0
0
阿里架构师眼里JVM可以说的那些事

前言 对于C语言开发的程序员来说,在内存管理方面,必须负责每一个对象的生命周期,从有到无。 对于Java程序员你来说,在虚拟机内存管理的帮助下,不需要为每个new对象都匹配free操作,内存泄...

07/09
0
0
Java虚拟机内存管理(一)—内存划分

Java 与 C++ 之间有一堵由内存动态分配和垃圾收集技术所围成的 “高墙”,墙外面的人想进去,墙里面的人却想出来。——《深入理解Java虚拟机:JVM高级特性与最佳时实践(第二版)》周志明 Ja...

Wizey
08/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
28
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
26
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
33
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
20
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部