`
FariyTale
  • 浏览: 193815 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于system.gc()与finalize()方法

阅读更多

      最近补一下java基础知识,以下是我自己的一些理解,如果哪里有错误请务必指出,以免误引子弟,那兄弟我的罪过就大了 ╲( ^ o ^ )╱

java的内存回收机制是由jvm自动完成的,当jvm对内存进行回收时将调用finalize()函数。因此我们可以在其中增加一些方法来完成一些我们期待在内存回收时完成的任务。最常见的任务就是标记日志和复活对象:通过在finalize()中添加Log函数,我们可以跟踪jvm的内存回收;而在finalize()中将要回收的对象赋值给一个新的对象则实现了对象的复活。而在android中,finalize()函数又有一个重要的功能:当在android程序中通过ndk调用了native方法而在native方法又分配了内存时jvm是不会对这部分内存进行回收的,因此在这种情况时就要在finalize()函数中调用native方法free()来释放这部分内存。还有就是在调用system.gc()以后jvm并不一定立刻执行存储回收,它个意思只是向jvm说明现在希望现在进行一次内存回收,至于什么时候执行还要看jvm的回收策略

分享到:
评论
1 楼 colder_coder 2012-06-29  
问一下,java规范中说一个对象的finalize方法只被调用一次,那么如果对象在finalize中复活,以后又会如何被回收呢?

相关推荐

    C#多线程开发多个实例

    //为false时肯定是GC调用了对象的Finalize方法,所以没有必要再告诉GC你不要调用我的Finalize方法啦 if (disposing) { GC.SuppressFinalize(this); } } } static void Main(string[] args) { //tmpObj1...

    net学习笔记及其他代码应用

    System.gc() Runtime.getRuntime().gc() 37.String s = new String(\"xyz\");创建了几个String Object? 答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。 38.abstract class和interface有什么区别? ...

    【05-面向对象(下)】

    •Object类提供的equals方法判断两个对象相等的标准与==完全相同。因此开发者通常需要重写equals方法。 类成员 •在java类里只能包含Field,方法,构造器,初始化块,内部类(接口、枚举)等5种成员。 用...

    程序员考试刷题-oca-preparation:准备OCA认证的一些示例和文件

    System.gc() 表明 Java 可能希望运行垃圾收集器 Java 可以随意忽略请求 Java 的好处 面向对象Java 是一种面向对象的语言。 它允许在类内进行函数式编程,但面向对象仍然是代码的主要组织方式。 封装Java 支持访问...

    【。net 专业】 面试题

    方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。 C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。 【面试题库网整理 .net 面试题(附答案)(三...

    C# Primer 中文版随书源码

    gcFinalize Strings SystemIO Chapter 2: Class Design Enum MatrixVector ParamPassing Stack WordCount Chapter 3: Object-Oriented Programming LibraryMaterial QueryManager ...

    JAVA面试题最全集

    51.Object类(或者其子类)的finalize()方法在什么情况下被调用? 52.一个“.java”原文件中是否可以包括多个类(不是内部类)? 53.掌握内部类和接口的概念 54.StringTokenizer类的使用 55.数据结构,如何遍历...

    海康卫视开发dll文件

    using System; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Threading; using SocketLibrary; #endregion namespace HkwsSDK { /// ...

    java 面试题 总结

    Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...

    千方百计笔试题大全

    public void doSomething() { System.out.println("i = " + i); }} 有什么错呢? 19 Hibernate部分 19 92、一般情况下,关系数据模型与对象模型之间有哪些匹配关系(A,B,C) 21 93、以下关于SessionFactory的说法...

    超级有影响力霸气的Java面试题大全文档

     Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...

    java面试宝典

    public void doSomething() { System.out.println("i = " + i); }} 有什么错呢? 19 Hibernate部分 19 92、一般情况下,关系数据模型与对象模型之间有哪些匹配关系(A,B,C) 21 93、以下关于SessionFactory的说法...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】final, finally, finalize的区别 24 【基础】Java 中定义常量的几种方法 25 【基础】什么时候使用字节流?什么时候用字符流? 26 【基础】GBK与UTF-8的区别 26 【基础】static、final、const的区别 26 final...

    C# 的析构以及垃圾回收实例分析

    using System; namespace ConsoleApplication { public class Program { public static void Main(string[] args) { Console.WriteLine(Hello World!); fun(); GC.Collect(); //4、若不显式回收,则控制台不...

Global site tag (gtag.js) - Google Analytics