对象及其内存管理 笔记

1:java程序变量分为局部变量和成员变量

局部变量:形参

方法内的局部变量

代码块内的局部变量

局部变量的作用时间很短暂,它们都被存储在栈内存中。

另外,jvm对类中的类变量(有static修饰的变量)在创建类的时候只分配一块内存空间。并且类变量随着类的初始化而初始化

而实例变量是随着对象的初始化而初始化。

而在初始化一个对象之前,先初始化该对象所属的类,因此,类变量的初始化时机总是在实例变量初始化之前。:

2:实例变量的初始化时机

每次创建java对象时都需要为实例变量分配内存空间,并对实例变量执行初始化

程序一般可在三个地方对实例变量执行初始化

A:定义实例变量时

B:非静态初始化快中

C:通过构造器

AB比C更早执行,AB执行顺序与他们在源代码中的排序顺序相同

经过编译器处理之后,三种对应的赋值语句都被合并到构造器中,在合并的过程中,定义变量语句转换得到赋值语句,初始化块里的语句转换得到赋值语句,总是位于构造器的所有语句之前,合并后,两种赋值语句的顺序保持为他们在源代码中的顺序

3:类变量的初始化时机

jvm对java的一个类只初始化一次,初始化类的时候为类变量分配一次内存空间。

一般在两个地方对类变量执行初始化

A:定义类变量时

B:静态初始化块中对类变量指定初始值

这两种方式的执行顺序与他们在源代码中的排列顺序相同。

时间: 2024-12-20 04:54:23

对象及其内存管理 笔记的相关文章

39-oc集合中对象的内存管理

集合中对象的内存管理 集合的内存管理原则是什么 当把一个对象添加到集合中时,这个对象会做了一次retain操作,计数器会+1 当一个集合被销毁时,会对集合里面的所有对象做一次release操作,计数器会-1 当一个对象从集合中移除时,会对这个对象做一次release操作,计数器会-1 集合方法的普遍规律是什么 如果方法名是add\insert开头,那么被添加的对象,计数器会+1 如果方法名是remove\delete开头,那么被移除的对象,计数器-1

黑马程序员---OC基础6【内存管理】【手动内存管理】【单、多个对象的内存管理】【*@property参数】【@class的使用】【NSString类的内存管理】【autorelease使用】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [内存管理] 1.内存管理概念 由于移动设备内存及其有限,所以每个app所占的内存也是有限的 需要回收一些不使用的空间 2.OC内存管理的范围 管理任何继承NSOject的对象,对其他的基本数据类型无效 主要管理堆区中的对象的内存管理   3.内存管理的原理 1)对象所有权概念 任何对象都可以能拥有一个或多个所有者,只要一个对象至少还拥有一个所有者,他就会继续存在 cocoasu所有权策略 任何自

小白学开发(iOS)OC_ 单个对象的内存管理(2015-08-02)

// //  main.m //  单个对象的内存管理 // //  Created by admin on 15/8/3. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> #import "Person.h" void test(); void test5(Person * p); int main(int argc, const char *

小白学开发(iOS)OC_多个对象的内存管理(2015-08-03)

// //  main.m //  多个对象的内存管理 // //  Created by admin on 15/8/5. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> //  人拥有一辆汽车 #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepo

block没那么难(三):block和对象的内存管理

本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> 在上一篇文章中,我们讲了很多关于 block 和基础变量的内存管理,接着我们聊聊 block 和对象的内存管理,如 block 经常会碰到的循环引用问题等等. 获取对象 照例先来段代码轻松下,瞧瞧 block 是怎么获取外部对象的 /********************** capturing objects **************

黑马程序员-oc对象的内存管理

oc没有java的垃圾回收机制,所以对象的内存释放很重要,基本数据类型,我们不用理会,编译器会处理: oc的每个对象内部都由一个计数器,用来记录当前有几个指针在指向该对象:当计数器为0时该对象会从内存中释放: 相关方法和概念: 1:retain:对象方法,调用该对象方法,计数器+1,有返回值,返回对象本身: 2:release:没有返回值,计数器-1: 3:retainCount:获取当前计数器的值: 4:dealloc:当对象被回收时,就会调用该方法,覆盖该方法时一定要调用[super dea

多个对象的内存管理分析

// //  main.m //  03-多个对象的内存管理分析 // //  Created by apple on 14-3-17. // // #import <Foundation/Foundation.h> //人拥有一辆汽车 #import "Person.h" //1.野指针问题 //2.内存泄漏问题 int main(int argc, const char * argv[]) { @autoreleasepool { // 1 Person * p = [

oc56--ARC多个对象的内存管理

// main.m // ARC中多个对象的内存管理:ARC的内存管理就是MRC的内存管理(一个对象释放的时候,必然会把它里面的对象释放),只不过一个是Xcode加的代码,一个是我们自己加的代码: // // ARC单个对象的内存管理:不使用的时候就置为nil,该对象没有引用就会立即释放. // MRC的时候,set一个对象的时候就把这个对象retain一次,当这个对象释放的时候就把它的对象属性release一次. // #import <Foundation/Foundation.h> #i

内存管理笔记

目前实现智能管理内存的技术,一是引用计数,一是垃圾回收. 引用计数:是一种很有效的机制,通过给没个对象维护一个引用计数器,记录该对象当前呗引用的次数.当对象增加一次引用时,计数器加1:而对象失去一次引用时,计数器减1:当引用计数为0时,标志着该对象的生命周期结束,自动触发对象的回收释放.引用计数的重要规则是每个程序片段必须负责任地维护引用计数,在需要维持对象生存的程序段的开始和结束分别增加或减少一次引用计数,这样就能实现十分灵活的智能内存管理. 垃圾回收:它通过引用一种自动的内存回收器,试图将程