• java内存管理分为两个方面:内存分配和内存回收。这里的内存分配特指创建java对象时JVM为该对象在对内存中所分配的内存空间。内存回收指的是当该java对象失去引用,变成垃圾时,JVM的垃圾回收机制自动清理该对象,并回收该对象所占用的内存。由于JVM内置了垃圾回收机制会收失去引用的java对象所占用的内存,所以很多java开发者认为java不存在内存泄漏,资源泄露的问题。实际上是一种错觉,java程序依然会有内存泄漏。
 
 
  • 由于JVM的垃圾回收机制由一条后台线程完成,本身也是非常消耗性能的,因此如果肆无忌惮的创建对象,让系统分配内存,拿这些分配的内存酱油垃圾回收机制进行回收,这样做有两个坏处:
    • 不断分配内存使得系统中可用内存减少,从而降低程序运行性能
    • 大量已经分配内存的会收拾的垃圾回收的负担加重,降低程序运行性能
 
 
 
  • 代码:
                         
          运行结果:
               

            分析:
                   类变量初始化分成两个阶段:
                         1.系统为price的两个变量分配内存空间;
                         2.按初始化代码的排列顺序对类变量执行初始化
 
 
 
 package section2;
class Base{
private int i =2;
public Base(){
this.display();
}
public void display(){
System.out.println(i);
}
}
class Derived extends Base{
private int i =22;
public Derived(){
i =222;
}
public void display(){
System.out.println(this.i);
}
}
public class Test {
public static void main(String[] args) {
new Derived(); //此时执行先执行了父类的构造方法,输出的i是本类的,
// 此时i还未初始化,所以为0,等输出后i才被赋值为222 }
}
输出0;
 
  • 对于父类定义的public成员变量,系统将其保留在父类中,并不会将他转移到其子类中,所以父类和子类可以同时拥有同名的实例变量

    

    

      因为继承成员变量和继承方法之间存在这样的差别,所以对于一个应用类型的变量而言,当通过该变量访问他所引用的对象的方法时,该实例变量的值取决于声明该变量的对象类型,当通过该变量来调用它所引用的对象的方法时,该方法行为取决于他所实际引用的对象的类型。
     父 ,子类对象在内存中存储的结论:当程序创建一个子类对象时,系统不仅会为该类中定义的实例变量分配内存,也会为父类中定义的所有实例变量分配内存,即使子类定义了与父类中同名的实例变量(但父类的成员变量不属于子类,如果父类的变量为共有的可以通过子类.变量名修改父类的变量。而不是说明子类拥有了父类的变量)。也就是说,当系统创建一个java对象的时候,如果该java类有两个父类(一个直接父类A,一个间接父类B),假设A类中定义了2个实例变量,B类中定义了3个实例变量,当前类中定义了2个实例变量,那这个对象将会保存2+3+2个实例变量。(注意保存不代表拥有)
 
    • 定义final变量时,只有在定义时指定初始值,系统才会执行”宏替换“ 。
    • 如果程序需要在局部内部类(只有局部内部类才可以访问局部变量:即放在方法里定义的内部类)中使用局部变量,那么这个局部变量必须使用final修饰符修饰。因为:对于普通局部变量而言,他的作用于就是停留在该方法内,当方法执行结束,该局部变量也随之消失;但内部类则可能产生隐式的”闭包“,闭包将使得局部变量脱离它所在的方法继续存在。

疯狂JAVA16课之对象与内存控制的更多相关文章

  1. 《疯狂Java:突破程序员基本功的16课》读书笔记-第二章 对象与内存控制

    Java内存管理分为两个方面:内存分配和内存回收.这里的内存分配特指创建Java对象时JVM为该对象在堆内存中所分配的内存空间.内存回收指的是当该Java对象失去引用,变成垃圾时,JVM的垃圾回收机制 ...

  2. (二)Java对象与内存控制

    一.java的类变量和实例变量: java中的变量可分成两种:成员变量和局部变量. 1.局部变量包括以下几类: 方法内的局部变量:作用域为方法体. 代码块内的局部变量:作用域为代码块 形参:方法内的形 ...

  3. Java 对象及其内存控制

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 更新:其实这里有好多的变戏法,只要你理解了他们在JVM的中的实现机制,就豁然开朗了.有时间我会把这些变戏法的东西 ...

  4. JAVA对象与内存控制

    1.1 实例变量和类变量 成员变量和局部变量: 局部变量分为三大类: 1)形参:在方法签名中定义的局部变量,由方法调用者为其赋值,随方法的结束而消亡. 2)方法内的局部变量:在方法内定义的局部变量,随 ...

  5. 《疯狂Java:突破程序员基本功的16课》读书笔记-第一章 数组与内存控制

    很早以前就听过李刚老师的疯狂java系列很不错,所以最近找一本拿来拜读,再此做下读书笔记,促进更好的消化. 使用Java数组之前必须先对数组对象进行初始化.当数组的所有元素都被分配了合适的内存空间,并 ...

  6. 《深入浅出Node.js》第5章 内存控制(未完)

    @by Ruth92(转载请注明出处) 第5章 内存控制 基于无阻塞.事件驱动建立的 Node 服务,具有内存消耗低的优点,非常适合处理海量的网络请求. 内存控制正是在海量请求和长时间运行的前提下进行 ...

  7. .NET对象的内存布局

    每个虚拟机都有它自己的对象布局,本文我们将针对sscli源码和windbg调试器来查看不同类型的.net对象布局. 在.net虚拟机里,每个对象都需要保存这些信息: 对象的类型: 对象实例的成员属性( ...

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

    本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> 在上一篇文章中,我们讲了很多关于 ...

  9. .NET对象占内存多少

    .NET对象占内存多少 一直有一个小小的疑惑——.NET一个对象或者一个集合占多少内存?有没有很快速的方法获取,而不是简单的估计分析对象大小? 查了MSDN,和一些其他人的分析,得到解决是托管代码对象 ...

随机推荐

  1. 用css隐藏元素的5种方法

    .green { width: 100px; height: 100px; background-color: #a0ee00; text-align: center; float: left; ma ...

  2. html5上传图片(二)一解决部分手机拍照上传图片转向问题

    本以为解决跨域上传后没有问题了,不成想被测试找出一个问题,那就是在手机上拍照上传后图片会旋转.很头痛,不过没有办法,问题还是需要解决的.在查阅了一系列资料后我找到了相应的解决方案,利用exif.js获 ...

  3. layer.js中layer.tips

    <script src="~/Content/js/layer/layer.js"></script> layer.tips('名称不能为空', '#pro ...

  4. VBA 格式化字符串 - Format大全

    VBA 格式化字符串 VBA 的 Format 函数与工作表函数 TEXT 用法基本相同,但功能更加强大,许多格式只能用于VBA 的 Format 函数,而不能用于工作表函数 TEXT ,以下是本人归 ...

  5. [转]ASP.NET应用程序生命周期趣谈(四) HttpHandler和页面生命周期

    在之前的三篇文章中,我们还算简明扼要的学习了asp.net的整个生命周期,我们知道了一个Request进来以后先去ISAPI Filter,发现是asp.net程序后又ASPNET_ISAPI.dll ...

  6. Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理

    RecyclerView已经写过两篇文章了,分别是Android 5.X新特性之RecyclerView基本解析及无限复用 和 Android 5.X新特性之为RecyclerView添加Header ...

  7. Ionic设置ion-slide-box不启用(不通过$ionicSlideBoxDelegate)

    猛地一看这个标题,可能觉得多此一举,直接$ionicSlideBoxDelegate. $getByHandle(handle). enableSlide(false)设置不就行了?是的,按理说就是这 ...

  8. 将现有MySQL数据库改为大小写不敏感

    用过MySQL的应该都会注意到,默认情况下,Linux下安装的MySQL是大小写敏感的,也就是说Table1和table1可以同时存在.而Windows下的MySQL却是大小写不敏感的,所有表名和数据 ...

  9. mysql数据类型

    一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUB ...

  10. [Hadoop in Action] 第2章 初识Hadoop

    Hadoop的结构组成 安装Hadoop及其3种工作模式:单机.伪分布和全分布 用于监控Hadoop安装的Web工具   1.Hadoop的构造模块   (1)NameNode(名字节点)       ...