zoukankan      html  css  js  c++  java
  • Java 编程思想 第五章 ----初始化与清理(1)

    从今天开始每天一小时的java 编程思想的阅读和编码,其实就是把书上的代码抄下来。

    • 5.5 清理:终结处理和垃圾回收

          初始化和清理工作同等重要,但是清理工作却被常常忘记,但是在使用对象之后,对对象弃之不顾的做法并不是很安全。Java有自己的垃圾回收器负责回收无用的对象占据的内存资源。但也有特殊情况:假定你的内存区域不是用new获得的,这是无法用垃圾回收器释放所以java中允许在类中定义一个名为 finalize()的方法。

          工作原理:

    一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时才会真正的回收对象占用的内存。(与C++中的析构函数不同,C++中new创建,delete销毁,如果忘记,就会发生内存泄漏,而Java中的对象并不是都是用垃圾回收的)以下是三个要点:

    1.   对象可能不被垃圾回收
    2. 垃圾回收并不等于析构
    3. 垃圾回收只与内存相关 

    Java中虽然有垃圾回收,但是并不能完全代替c++中的析构函数的功能

    示例:

     1 //:initialization /TerminationCondition.java
     2 //Using finalize() to detect an object that
     3 //hasn't been properly cleaned up
     4 class Book{
     5     boolean checkedOut = false;
     6      Book(boolean checkOut) {
     7         checkedOut = checkOut;
     8     }
     9     void checkIn(){
    10         checkedOut = false;
    11     }
    12     protected void finalize() {
    13         if(checkedOut)
    14             System.out.print("Error:Checked out");
    15         //Normally, you'll also do this:
    16         //super.finalize();//call the base-class version
    17     }
    18 }
    19 
    20 public class Rock{
    21     public static void main(String []args) {
    22         Book novle = new Book(true);
    23         novle.checkIn();
    24         new Book(true);
    25         System.gc();
    26         
    27     }
    28 }

    output:

    Error: checked out

    注意:System.gc()用于强制进行终结动作


  • 相关阅读:
    〖教程〗Ladon提权MS16-135参数版(WIN7-2016)
    〖教程〗RDP会话劫持 Ladon无密码登陆管理员桌面会话
    Ladon for PowerShell远程加载教程
    〖教程〗NbtScan 139端口弱口令/Netbios密码爆破
    给你一个免费加入"小密圈"的机会
    活动目录(Active Directory,AD)的主要功能
    如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击
    mouseenter 和mouseover的区别
    如何获取可视区域宽高,获取元素到在文档中的位置
    闭包
  • 原文地址:https://www.cnblogs.com/fillim/p/4138359.html
Copyright © 2011-2022 走看看