摘要: 在Java中,判断一个对象是否 "存活" ,都和引用有关,当一个对象没有任何的引用指向它,我们可以认为这个对象可以被GC了。 引用如何定义?Object obj = new Object()创建一个对象 ,我们知道会在 stack 和 heap 上分别分配一块内存,heap 分配的内存存储Objec 阅读全文
posted @ 2018-07-25 18:58 v-imok 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 垃圾收集算法是垃圾回收的理论,那么垃圾收集器是垃圾回收的具体实现。不同的版本、不同厂商的虚拟机所提供的垃圾收集器可能差别很大,一般的话根据自己的应用特点和要求组合出不同年代所使用的垃圾收集器。 Serial 收集器 ParNew 收集器 Parallel Scavenge收集器 Serial Old 阅读全文
posted @ 2018-07-25 18:57 v-imok 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 找到了 "垃圾" 对象,如何标记 "垃圾" 对象? 标记-清除算法 先标记所有需要回收的对象,标记完成后统一回收被标记了的对象。(最基础的算法,其它算法在这个算法基础上改进的) 缺点:标记和清除的效率不高,标记和清除后会产生大量的内存碎片(空间问题) 复制算法 将内存按容量划分两块大小相等的内存块, 阅读全文
posted @ 2018-07-25 17:17 v-imok 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 语句 Object obj = new Object() Object obj 中obj是一个对象引用,这部分数据会反映到java虚拟机栈中的本地变量表(局部变量表)中,作为一个reference数据类型出现。 new Object()语义反映到java堆中,形成一块存储Object类型所有实例数据 阅读全文
posted @ 2018-07-25 17:00 v-imok 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 垃圾收集(Carbage Collection) java内存在运行时区域,程序计数器、java虚拟机栈、本地方法三个区域都是线程私有的内存区域,随着线程的启动和销毁而分配和回收。栈帧随着方法的调用和退出而执行入栈和出栈。每一个栈帧分配多少内存在编译期间就已经确定下来了,所以这几个内存区域具有确定性 阅读全文
posted @ 2018-07-25 15:59 v-imok 阅读(792) 评论(0) 推荐(0) 编辑