在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. Spring Aspect 获取请求参数

    切片(Aspect)也就是Spring AOP 实现Aspect的主要步骤: 1.在哪里切入 .在哪个方法起作用 .什么时候起作用 2.起作用的时候执行什么处理逻辑 下面是代码实现 /** * 切片A ...

  2. 死磕 java并发包之LongAdder源码分析

    问题 (1)java8中为什么要新增LongAdder? (2)LongAdder的实现方式? (3)LongAdder与AtomicLong的对比? 简介 LongAdder是java8中新增的原子 ...

  3. I/O操作总结(一)

    所谓IO,也就是Input与Output的缩写.在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写 其他知识点将放置后续章节(我想,文章太长了,谁都没耐心翻到最后) 对于文件内容的操作 ...

  4. Kendo MVVM 数据绑定(八) Style

    Kendo MVVM 数据绑定(八) Style Style 绑定可以通过 ViewModel 绑定到 DOM 元素 CSS 风格属性,例如: <span data-bind="sty ...

  5. win10 vm 11 桥接模式配置

    1 保证你Vmware里面的虚拟机是关机状态 2 在本地连接 属性中 卸载VM 桥接协议 3 管理员身份运行VM ,编辑>虚拟网络编辑器 删除所有网卡,并且重新配置网络适配器 4 配置完成后,选 ...

  6. 使用Python+selenium过程中所需安装的库和软件

    一.下载地址: 1.setuptools:https://pypi.python.org/pypi/setuptools#downloads 中file对应的后缀为zip的软件 pip:https:/ ...

  7. vue2.X版本vue-cli生成项目后运行失败,报错信息为getaddrinfo ENOTFOUND localhost

    问题: 1.使用vue-cli生成项目 2.npm install 3.npm run dev,报错信息如下 解决方法: 经查,发现package.json中dev的脚本变成了"webpac ...

  8. python基础教程总结15——6 CGI远程编辑

    功能: 将文档作为普通网页显示: 在web表单的文本域内显示文档: 保存表单中的文本: 使用密码保护文档: 容易拓展,支持处理多余一个文档的情况 1.CGI CGI(Comment Gateway I ...

  9. Oracle 11g 新特性 – HM(Hang Manager)简介

    在这篇文章中我们会对oracle 11g 新特性—hang 管理器(Hang Manager) 进行介绍.我们需要说明,HM 只在RAC 数据库中存在. 在我们诊断数据库问题的时候,经常会遇到一些数据 ...

  10. 简易数据分析 02 | Web Scraper 的下载与安装

    这是简易数据分析系列的第 2 篇文章. 上篇说了数据分析在生活中的重要性,从这篇开始,我们就要进入分析的实战内容了.数据分析数据分析,没有数据怎么分析?所以我们首先要学会采集数据. 我调研了很多采集数 ...