finalize

[转载]深入理解Java垃圾回收机制

ぃ、小莉子 提交于 2019-12-03 10:56:56
深入理解Java垃圾回收机制 2016-07-28 20:07:49 湖冰2019 阅读数 14607 更多 分类专栏: JAVA基础 原文: http://www.linuxidc.com/Linux/2015-06/118829.htm 一、垃圾回收机制的意义   Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。   ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java 的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度,我们有时也将其称为“对象游离”。 二、垃圾回收机制中的算法   Java语言规范没有明确地说明JVM使用哪种垃圾回收算法,但是任何一种垃圾回收算法一般要做2件基本的事情:(1)发现无用信息对象;(2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。   1.引用计数法(Reference Counting Collector) 1.1算法分析    引用计数是垃圾收集器中的早期策略。在这种方法中,堆中每个对象实例都有一个引用计数。当一个对象被创建时

Difference between final keyword, finally block and finalized method in java throught one good example [duplicate]

馋奶兔 提交于 2019-12-03 04:07:51
This question already has answers here : In Java, what purpose do the keywords `final`, `finally` and `finalize` fulfil? (6 answers) Often these keywords confuse me. Can any one tell me exactly what the difference between them is? final keyword class On a class it means you forbid to have a child class extending yours. public final class finalClass Attribute/Field final MyObject value = new MyObject() means you won't be able to modify the instance of the object. value = xxxx won't be allowed, but you still can modify the object itself value.field = "xxx"; Method When you use final on a method,

Keras Tensorflow - Exception while predicting from multiple threads

匿名 (未验证) 提交于 2019-12-03 01:10:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am using keras 2.0.8 with tensorflow 1.3.0 backend. I am loading a model in the class init and then use it to predict multithreaded. import tensorflow as tf from keras import backend as K from keras.models import load_model class CNN: def __init__(self, model_path): self.cnn_model = load_model(model_path) self.session = K.get_session() self.graph = tf.get_default_graph() def query_cnn(self, data): X = self.preproccesing(data) with self.session.as_default(): with self.graph.as_default(): return self.cnn_model.predict(X) I initialize the CNN

gc笔记

匿名 (未验证) 提交于 2019-12-03 00:40:02
GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。与C++不同的是,Java采用的是类似于树形结构的 可达性分析法 来判断对象是否还存在引用。即:从gcroot开始,把所有可以搜索得到的对象标记为存活对象。 GC机制 要准确理解Java的垃圾回收机制,就要从:“什么时候”,“对什么东西”,“做了什么”三个方面来具体分析。 第一:“什么时候”即就是GC触发的条件。GC触发的条件有两种。(1)程序调用System.gc时可以触发;(2)系统自身来决定GC触发的时机。 第二:“对什么东西”笼统的认为是Java对象并没有错。但是准确来讲,GC操作的对象分为:通过可达性分析法无法搜索到的对象和可以搜索到的对象。对于搜索不到的方法进行标记。 第三:“做了什么”最浅显的理解为释放对象。但是从GC的底层机制可以看出,对于可以搜索到的对象进行复制操作,对于搜索不到的对象,调用finalize()方法进行释放。 对于用可达性分析法搜索不到的对象,GC并不一定会回收该对象 。要完全回收一个对象,至少需要经过 两次标记 的过程。 第一次标记:对于一个没有其他引用的对象,筛选该对象是否有必要执行finalize()方法,如果没有执行必要,则意味可直接回收。(筛选依据:是否复写或执行过finalize()方法;因为finalize方法只能被执行一次)。 第二次标记

final,finally.finalize的区别

匿名 (未验证) 提交于 2019-12-03 00:08:02
final :     修饰属性 -> 表示属性不可变(表示为常量)   修饰方法 -> 表示方法不可被覆盖(表示为最终方法)   修饰类 -> 表示类不可被继承(表示为最终类) finally :  是异常处理语句结构的一部分,表示不管有异常发生,总是会执行,除非虚拟机停止 finalize :  是Object类的一个方法,在垃圾回收器执行回收操作时,会调用被回收对象的finalize方法,释放资源。 来源:博客园 作者: zbzb1 链接:https://www.cnblogs.com/zbzb1/p/11531595.html

final、finally、 finalize区别

匿名 (未验证) 提交于 2019-12-02 23:57:01
原创转载请注明出处: https://www.cnblogs.com/agilestyle/p/11444366.html final final可以用来修饰类、方法、变量,分别有不同的意义,final修饰的class代表不可以继承扩展,final的变量是不可以修改的,而final的方法也是不可以重写的(override)。 final不是immutable! finally finally则是Java保证重点代码一定要被执行的一种机制。可以使用try-finally或者try-catch-finally来进行类似关闭JDBC连接、保证unlock锁等动作。 finalize finalize是基础类java.lang.Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize机制现在已经不推荐使用,并且在JDK 9开始被标记为deprecated。 来源:博客园 作者: 哈天奇不奇 链接:https://www.cnblogs.com/agilestyle/p/11444366.html

Why does finalize() execute only after new object is created, but not after gc() is invoked?

十年热恋 提交于 2019-12-02 23:47:00
问题 Shouldn't finalize() execute immediately when gc() is called? The order of output result is a little unconvincing. class Test { int x = 100; int y = 115; protected void finalize() {System.out.println("Resource Deallocation is completed");} } class DelObj { public static void main(String arg[]) { Test t1 = new Test(); System.out.println("Values are "+t1.x+", "+t1.y+"\nObject refered by t1 is at location: "+t1); t1 = null; // dereferencing System.gc(); // explicitly calling Test t2= new Test();

.NET CLR GC的知识点汇总

匿名 (未验证) 提交于 2019-12-02 23:42:01
GC的处理流程 GC暂停进程中的所有线程。 GC遍历堆中的所有对象,将某个位(这个位包含在对象同步块索引的字段中)设置为0(0表示将被删除)。 GC检查所有活动根(根是指引用类型的变量),把活动根指向的对象标记为1,再次该对象引用的其它对象标记为1,依次类推。 GC将活动对象进行重新排列,让所有幸存对象在内存中紧挨在一起。 将移动过的幸存对象的根更新固定的偏移量。 GC恢复进程中的所有线程。 GC对活动对象(活动根)的认定: 被任何静态对象或静态字段引用。 应用程序栈中引用类型的变量指向的对象。 应用程序中的本地引用类型变量。 应用程序方法中的引用类型参数。 等待被终结(finalized)的对象。 GC将活动对象进行重新排列后获得的好处: 减少活动对象的内存地址范围,提升访问活动对象的性能。 让剩余的内存空间变成连续的,便于后续分配给新对象。 解决原生堆(非托管堆)的内存碎片问题。 GC代的算法的出发点: 对象越新,生存期越短。 对象越老,生存期越长。 回收堆的一部分,速度快于回收整个堆。 GC关于代的算法流程: 初始化堆,接下来分配的所有对象都是0代。 某个时间点0代超过预算,触发一次GC回收。 幸存下来的对象从0代提升到1代,此时0代不包含任何对象。 对1代对象进行紧凑排列。 在0代为新对象分配内存。 一段时间后再次触发GC对0代进行回收。

JAVA - finalize方法

匿名 (未验证) 提交于 2019-12-02 21:53:52
JAVA JAVA JVM为该对象分配内存、调用构造函数并开始跟踪你使用的对象。当你停止使用一个对象(就是说,当没有对该对象有效的引用时),JVM通过垃圾回收器将该对象标记为释放状态。 finalize() 方法(如果该对象定义了此方法)。垃圾回收器以 "对象可以不被垃圾回收" : JAVA , 就是能不回收就不会回收 ,而且垃圾回收器没有释放申请的内存, 那么随着程序的正常退出, 申请的内存会自动交还给操作系统; 而且垃圾回收本身就需要付出代价, 是有一定开销的, 如果不使用,就不会存在这一部分的开销 , 而且只能回收内存中由 JAVA (堆)创建的对象所占用的那一部分内存, 无法回收其他资源, 比如文件操作的句柄, 数据库的连接等等 C++中的析构. 两者不是对应关系, 因为第一点就指出了垃圾回收的发生是不确定的, 而C++中析构函数是由程序员控制(delete) 或者离开器作用域时自动调用发生, 是在确定的时间对对象进行销毁并释放其所占用的内存 ( System.gc() )不一定保证垃圾回收器的运行 finalize方法 JAVA finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的,但是不一定会被调用,即使是进程退出前。 class A { public A() { System

整理:《2018年最全Java面试通关秘籍第一套!》

匿名 (未验证) 提交于 2019-12-02 21:53:52
最近打算找新工作,刷一刷面试题,就发现这个面试题系列挺不错的,里面有很多自己不清楚,不懂的地方。 题目地址: <<2018年最全Java面试通关秘籍第一套!>> 一、基础篇 1.1、Java基础 面向对象的特征:继承、封装和多态 封装:将对象所拥有的属性隐藏起来,然后提供对外访问的方法。 继承:子类继承父类,此时子类能够拥有父类所拥有的属性和方法,关键字extends; 多态:首先是多态存在的必要条件:①存在父子关系;②子类重写父类的方法;③父类对象指向子类。 注:多态后的对象不能使用子的方法与属性,必须要向下转型之后才能使用 。 final, finally, finalize 的区别 final一般是用来修饰类 、 变量 、 方法,用final修饰过后的类不可以被继承,修饰过后的变量一般叫做常量(不可再重新赋值),方法不可以被重写。 finally一般是用在try catch捕捉到异常之后,进入finally,对异常进行处理或者进行其他操作。 finalize没有用过,是java中的一个方法,finalize()方法是在垃圾收集器删除对象之前对这个对象的调用。 Exception、Error、运行时异常与一般异常有何异同 Exception :表示可恢复的例外,这是可捕捉到的。 Error:无法预期的严重错误,导致JVM虚拟机无法继续执行,几乎无法恢复捕捉的. 运行时异常