zoukankan      html  css  js  c++  java
  • 《java编程思想》:第五章,初始化与清理

    知识点整理:

    1.从概念上讲,‘初始化’与‘创建’是彼此独立的,但是在Java中,两者被捆绑在一起,不可分离。

    2.区分重载的方法:每个重载的方法都有一个独一无二的参数类型列表。 甚至参数顺序的不同也可以区分两个方法,但是不建议这样做,这样会使代码难以维护。

      注意:不可以通过返回值区别重载,原因是有时需要方法的返回值,但是有时不需要,例如,两个方法,piblic String func(){sysout(“xxxx”)}与public void func(){sysout(“xxxx”)},当只想输出xxxx时,直接一句 func()足矣,但是此时编译器便不知道具体调用的是哪个方法。

    3.如果没有定义构造器,那么编译器会自动创建一个无参的构造器,但是如果已经定义了构造器(无论是否有参数),构造器都不会再创建默认构造器。

    4.可以用this关键词调用一个构造器,但是只能调用一个,且必须将构造器置于最起始处,否则编译器报错。

    5.清理

      垃圾回收器只知道释放经由new分配的内存,如果一个对象并非使用new获得了一块特殊的内存区域,回收器便无法释放该对象,所以,java允许在类中定义名为finalize()的方法。

      关于垃圾回收,铭记三点:1.对象可能不被垃圾回收;2.垃圾回收不等同于“析构”。;3.垃圾回收只与内存有关。

      无论是“垃圾回收”还是“终结”,都不保证一定会发生,如果JVM并未面临内存耗尽的情况,是不会浪费时间去执行垃圾回收恢复内存的。

    6.垃圾回收器工作原理

      现在的JVM一般采用一种“自适应”的垃圾回收技术,即“停止-复制”与“标记-清扫”的自动切换。

      “停止-复制”:先暂停程序的运行,然后将所有存活的对象从当前堆复制到另一个堆,没有被复制的全都是垃圾。对象被复制到新堆后是紧凑排列的然后就可以直接分配新空间了。此模式存在的问题:首先,需要两个堆,然后在两个独立的堆之间来回倒腾,从而得维护比实际多一倍的空间。某些jvm的处理方式是按需从堆中分配几块比较大的内存,复制动作发生在这些块之间;其次,程序稳定后,只会产生很少的垃圾,甚至没有垃圾,但是复制动作依然在发生,很浪费,没有必要。此时,便引入了一种新的模式“标记-清扫”。

      “标记-清扫”:此时遍历所有的引用,只为存活的对象做一个标记,当完成全部标记工作后,开始清理工作,此过程很慢,且清理后的堆空间是不连续的,需要重新整理对象才能得到连续的空间。

  • 相关阅读:
    poj 3243 Clever Y(BabyStep GiantStep)
    poj 2417 Discrete Logging
    poj 3481 Double Queue
    hdu 4046 Panda
    hdu 2896 病毒侵袭
    poj 1442 Black Box
    hdu 2815 Mod Tree
    hdu 3065 病毒侵袭持续中
    hdu 1576 A/B
    所有控件
  • 原文地址:https://www.cnblogs.com/don9/p/6778033.html
Copyright © 2011-2022 走看看