软件构造第八章(未完待续)

每个线程都有其自己的栈,管理其局部数据,各栈之间彼此不可见

所有局部的基本数据类型都在栈上创建(All local variables of primitive types (boolean, byte, short,char, int, ...) are fully stored on the thread stack and are thusnot visible to other threads)

多线程之间传递数据是通过复制而非引用

所有new创建的对象的内存都在堆上面分配(The heap contains all objects created in Java application,regardless of what thread created the object)

It does not matter if an object was created and assigned to a local variable,or created as a member variable of another object, the object is still storedon the heap. 即使是局部变量的object,也是在堆上创创建


堆上创建的对象可被所有线程共享引用,访问对象就可以访问对象内的成员变量。如果两个线程调用同一个对象上的某个方法,它们分别保留该方法的局部变量的拷贝。

基于堆和栈的内存管理都是动态内存分配,在运行时动态的分配内存,创建新的内存对象

malloc()分配完内存空间,之后一定要及时的释放掉(例如free掉),否则会造成内存泄漏。free()释放的是指针指向的内存!注意!释放的是内存,不是指针!指针并没有被释放,指针仍然指向原来的存储空间。指针是一个变量,只有程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在!只不过现在指针指向的内容的垃圾,是未定义的,所以说是垃圾。因此,释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。

浅拷贝:使用一个一致的实例的成员变量为新创建的成员变量逐个复制,只复制对象本身,但不复制对象对外的引用

深拷贝:类的拷贝方法不仅要复制对象的所有非引用成员变量值(简单数据类型),还要为引用类型(对象)的成员变量创建新的实例,并且初始化为原对象的值




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值