java中finalize()方法的缺点
来源:互联网 发布:中小企业 云计算 编辑:程序博客网 时间:2024/05/18 03:12
1.可能是是对象复活
2.finalize()执行的时间是不固定的,有GC决定,极端情况下,没有GC,就不会执行finalize()
3.一个糟糕的finalize()会影响GC的性能
对象复活
public class FinalizeActive{ public static FinalizeActive obj; @Override protected void finalize() throws Throwable { System.out.println("执行finalize"); obj = this; } public static void main(String[] args) { obj = new FinalizeActive(); //obj=null obj = null; System.gc(); System.out.println("After GC"); if(obj!=null) System.out.println("对象复活"); obj = null; System.out.println("After GC"); if(obj==null) System.out.println("对象死亡"); }}
一个糟糕的finalize()会影响GC的性能
finalize()由FinalizerThread线程执行,每一个被回收并且包含finalize()方法的对象都会加入FinalizerThread队列,该队列为一个引用队列(ReferenceQueue),队列中的每一项为java.lang.ref.Finalizer对象引用,本质是一个引用(强引用),意味着对象又变成可达的了,一旦性能出现问题,这些垃圾对象将一直存在堆内存中占用资源
public class LongFinalize{ public static class LF{ private byte [] b = new byte[512]; @Override protected void finalize() throws Throwable { try { System.out.println(Thread.currentThread().getId()); Thread.sleep(1000); } catch (Exception e) { //TODO: handle exception e.printStackTrace(); } } } public static void main(String[] args) { long s = System.currentTimeMillis(); LF lf; for(int i=0;i<100000;i++) lf = new LF(); long e = System.currentTimeMillis(); System.out.println(e-s); }}/** * java -Xmx10m -Xms10m -XX:+PrintGCDetails * -XX:+HeapDumpOutOfMemoryError * -XX:HeapDumpPaht="H:/finalize.dump" * */
阅读全文
0 0
- java中finalize()方法的缺点
- java中finalize()方法
- java中finalize()方法
- Java中finalize方法
- Java 中finalize()方法使用
- java的finalize方法详解
- java finalize方法的使用
- java finalize方法的使用
- java finalize方法的使用
- java finalize方法的使用
- java中finalize终结方法的一些问题
- java中Object类中的finalize()方法的理解
- Java中Object类之finalize()方法的详解
- Java中finalize()的用法
- Java中finalize的使用
- java 中finalize()的使用
- java finalize方法总结、GC执行finalize的过程
- java finalize方法总结、GC执行finalize的过程
- common-httpclient
- 《笨方法学python》第五天
- java菜鸟学习日记1 java类加载器体系结构
- HDOJ 1037 Keep on Truckin'
- Win2008 R2服务器入站规则和安全策略简介
- java中finalize()方法的缺点
- H5 缓存机制浅析 移动端 Web 加载性能优化
- POJ 3273.Monthly Expense
- [知了堂学习笔记]_JavaScript之内置对象
- 通过adb shell设置日志开关
- [知了堂学习笔记]_JS内置对象
- 消息队列
- 对称加密-利用mcrypt实现加密解密(1)
- apt-get update 更新失败----如何清除破损而且陈旧的PPA仓库 (W: Failed to fetch http://ppa.launchpad.net/jonathonf/pyt)