在Java中,程序员会在乎内存中的两块空间。 堆(heap)和栈(stack)。

当java虚拟机启动时, 它会从底层的操作系统取得一块内存, 并且以此块内存来执行java程序。

在Java中, 实例变量是声明在类中而不是方法中的变量,实例变量存在于所属的对象中, 即实例变量会随着对象一起位于堆上。

Java中的局部变量以及平时所说的形参(方法的参数)都是被声明在方法中,局部变量会放在栈上。随着方法调用产生,当方法执行完毕局部变量的使命也就完成,

会被弹出栈空间而消失。Java中对象引用也可以看成是一种局部变量, 也是位于栈(stack)上的。

有一点始终要牢记, 那就是java中对象是会放在堆上的,即堆上会放着 new() 出来的对象。

然后关于java中变量的生命周期 :

1. 局部变量(local varible)只会存活在生命变量的方法中, 方法执行结束时局部变量会被弹出栈进而消失。

2. 实例变量,实例变量是随着对象一起存在于堆(heap)上的, 所以实例变量的生命周期与对象相同, 如果对象还活着那么实例变量也仍然存活。

3. 对象: 位于堆上,当没有引用指向对象时, 一段时间以后对象就会被垃圾收集器(GB)给清理掉了,位于对象上的实例变量也就消失了。

然后我们来回顾下对象创建的三个步骤 :  声明、创建、赋值。 例如 :Duck myDuck = new Duck(); 执行过程可以这样看 :

如果我们注意到第二步,new Duck() 看起来像是不是在调用Duck()的方法,其实不然, 我们此处通过new这个关键字调用了Duck()的构造函数。

构造函数并不是方法, 它是程序中带有new的时候会执行的代码。它能够在对象赋值给引用之前首先执行。

构造函数(constructor)是你初始化对象时会执行的程序代码。 也就是创建一个对象时会被执行。 当你自己没有写, 编译器在编译时会帮你加上一个没有参数的构造函数。

但是编译器一定会帮你写出无参的构造函数吗? The Answer is : NO !!!

编译器只会在你完全没有编写构造函数的时候帮你加上一个构造函数, 但是如果你已经写了一个有参数的构造函数, 而且再需要一个无参的构造函数,

你不能指望编译器会帮你加上, 你必须自己动手实现。

然后来看看构造函数的执行: 参考 http://www.cnblogs.com/beyond-Acm/p/4077320.html

有两条规则 :a. 子类的构造方法首先必须调用父类的构造方法。

          (可能刚开始学会觉得奇怪,为什么一定要首先去调用父类的构造方法呢? 其实换个思路可能理解起来就很简单了, 你可以吧父类想象成子类的父母,

          怎么可能父母还没造出来先把孩子造出来了呢?更何况孩子还需要从父母那里继承一些东西)

       b. 如果没有显示指定,子类的构造方法会默认的调用父类中的无参构造方法。这会连锁反应到object这个类终止。 这个过程被称为 constructor chaining 。

       c. 调用父类构造函数的唯一方法是 super()。

总结下编译器涉及构造函数的两种方式 :

1. 如果你没有编写构造函数, 那么编译器在编译时会帮你在类中加入如下代码 :

   public className () {

      super();

   }

2. 如果你自己编写了构造函数但是没有调用super(), 那么编译器会在你每个重载的构造函数之前都加上这种调用 : super(); 编译器帮忙加的一定是没有参数的构造函数

假如父类有多个构造函数, 那么也只有无参的构造函数会被调用到。 此时如果父类里没有无参的构造函数则会报错。

Java构造器(construtor)与垃圾收集器(GB)的更多相关文章

  1. 《深入理解 Java 虚拟机》学习 -- 垃圾收集器

    <深入理解 Java 虚拟机>学习 -- 垃圾收集器 1. Serial 收集器(新生代) 含义: 单线程收集器. 缺点: 进行垃圾收集时,必须暂停其他所有的工作线程. 优点: 简单而高效 ...

  2. 深入理解Java虚拟机(四)——HotSpot垃圾收集器详解

    垃圾收集器 新生代收集器 1.Serial收集器 特点: 单线程工作,收集的时候就会停止其他所有工作线程,用户不可知不可控,会使得用户界面出现停顿. 简单高效,是所有收集器中额外内存消耗最少的. 没有 ...

  3. 深入理解java虚拟机【Java虚拟机垃圾收集器】

    Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK ...

  4. (转)《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集器

    Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK ...

  5. Java虚拟机详解(四)------垃圾收集器

    上一篇博客我们介绍了Java虚拟机垃圾回收,介绍了几种常用的垃圾回收算法,包括标记-清除,标记整理,复制等,这些算法我们可以看做是内存回收的理论方法,那么在Java虚拟机中,由谁来具体实现这些方法呢? ...

  6. G1 垃圾收集器入门

    最近在复习Java GC,因为G1比较新,JDK1.7才正式引入,比较艰难的找到一篇写的很棒的文章,粘过来mark下.总结这篇文章和其他的资料,G1可以基本稳定在0.5s到1s左右的延迟,但是并不能保 ...

  7. 【转载】JVM 学习——垃圾收集器与内存分配策略

    本文主要是对<深入理解java虚拟机 第二版>第三章部分做的总结,文章中大部分内容都来自这章内容,也是博客 JVM 学习的第二部分. 简述 说到垃圾收集(Garbage Collectio ...

  8. 转 G1垃圾收集器入门

    转自:http://blog.csdn.net/zhanggang807/article/details/45956325 最近在复习Java GC,因为G1比较新,JDK1.7才正式引入,比较艰难的 ...

  9. G1 垃圾收集器架构和如何做到可预测的停顿(阿里)

    CMS垃圾回收机制 参考:图解 CMS 垃圾回收机制原理,-阿里面试题 CMS与G1的区别 参考:CMS收集器和G1收集器优缺点 写这篇文章是基于阿里面试官的一个问题:众所周期,G1跟其他的垃圾回收算 ...

随机推荐

  1. 点权生成树(gentree)

    点权生成树(gentree) 题目背景 Awson是某国际学校信竞组的一只菜鸡.终于弄明白边权最小生成树后,然而又被大神嘲笑了.大神深邃的眼光中透露了些睿智,说道:“你会求点权最小生成树么?”Awso ...

  2. java学习笔记(2)——数组

    1.创建数组: int[] a = new int[n];//数组长度n不要求为常数,一旦创建了数组,其大小不可改变 int[] a = {0,1,2,3};//也可这样定义 获得数组元素的个数:ar ...

  3. 洛谷P3959 宝藏(模拟退火乱搞)

    题意 题目链接 题面好长啊...自己看吧.. Sol 自己想了一个退火的思路,没想到第一次交85,多退了几次就A了哈哈哈 首先把没用的边去掉,然后剩下的边从小到大排序 这样我们就得到了一个选边的序列, ...

  4. Android中文件加密和解密的实现

    最近项目中需要用到加解密功能,言外之意就是不想让人家在反编译后通过不走心就能获取文件里一些看似有用的信息,但考虑到加解密的简单实现,这里并不使用AES或DES加解密 为了对android中assets ...

  5. java控制远程ssh-expect4j(一)

    github : https://github.com/wengyingjian/ssh-java-demo.git 程序写完后,ssh连接到远程服务器上需要做的步骤都是固定的,所以我们可以通过程序来 ...

  6. 如何用Windows PowerShell替换命令提示符

    在Windows 10的"开始"按钮中将PowerShell替换为命令提示符,这不是很好吗?我知道你会有疑问,为什么要这样做?可能会失去了运行DOS命令的能力.好吧,让我解释一下. ...

  7. robotframework介绍

    1.测试用例使用文本文件(TXT或者TSV文件)保存,使用制表符分隔数据.可以方便的使用任何文本编辑器,或者EXCEL编辑测试用例.也可以使用HTML格式创建用例.2.测试用例中支持变量使用,可以使用 ...

  8. 将SQL2008升级为SQL2008 r2

    我的SQL2008版本信息 Microsoft SQL Server Management Studio     10.0.1600.22 ((SQL_PreRelease).080709-1414 ...

  9. [dp]uestc oj E - 菲波拉契数制

    E - 菲波拉契数制 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  10. CentOS 软RAID5

    yum install -y mdadm np1回车 tfdw mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdb1 /dev/sd ...