java学习之 垃圾回收
垃圾回收器始终以一个较低优先级的后台进程进行垃圾的回收工作,这样不会影响程序的正常工作。
通常只有当内存到达用尽的边缘而程序需要分配新的内存空间时,垃圾回收器才会执行。
垃圾回收的条件:1,垃圾回收器只回收不可再用的内存;2,只回收内存资源,比如通过new在堆上创建的对象。
java中进行清理内存的方法是finalize(),object类中声明了他。垃圾回收器回收对象内存时就会调用该对象的finalize方法,拉进行一些清理工作。
finalize方法的特点:1、执行的不确定性,通常只有当内存到达用尽的边缘而程序需要分配新的内存空间时,垃圾回收器才会执行。可以通过system类或runtime类的gc()方法来加快垃圾的回收。但是gc()只是建议垃圾回收器回收垃圾,不是命令。2、执行顺序不确定;3、没有连锁性;4、方法的执行次数,最多只会执行一次。
java垃圾回收机制
垃圾回收的方式有引用计数:引用计数是一种简单的垃圾回收方式,每个对象都带有一个计数器,当引用连接至对象时,对象的计数器加一。当离开引用域时,被置为null,计数器减一。垃圾回收器在还有对象的链表上进行遍历,发现计算器为0的,进行释放对象。这种方法存在着缺陷,存在着对象应该释放但是计数器不为零的情况。
有一种较快的方式能够解决对象交互引用问题,这种垃圾回收方式的思想是:对任何活着的对象,一定能够追溯到其存活在堆栈或静态存储区的引用。因此通过遍历堆栈和静态存储区的引用,就能够找到所有“活”的对象。这就解决了对象的交互引用问题。在这种方式下,java虚拟机采用一种自适应的垃圾回收机制。为了能够找到活的对象,有一种做法“停止-复制”,先暂停程序的运行,然后将所有存活的对象复制到另一个堆上,没有被复制的都是垃圾,当存活的对象被复制到新的堆上,他们一个个紧凑排列。这种“复制式回收器”存在两个问题,其一、对象在两个堆上复制,会需要较大的空间;其二,在程序稳定运行后,垃圾产生的较少,在这种情况下进行复制,会造成很大的浪费。在这种情况下,java虚拟机会转换到另一种模式“标记-清扫”,这种方式比较慢,先从堆栈和静态存储区开始遍历,当遍历到一个活着的对象时,就给他一个标记。当标记工作完成时,才开始清理工作。“标记-清扫”必须在程序暂停的情况下进行。
java学习之 垃圾回收的更多相关文章
- Java学习之垃圾回收
垃圾回收(GC) GC需要完成的三件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 为什么"GC自动化"之后还要研究GC?当需要排查各种内存溢出.内存泄漏问题时,当GC成为 ...
- Java学习之垃圾回收机制
垃圾回收机制,依赖JRE和JVM,涉及操作系统中内存的分配与回收.依据所学,我猜想这种机制需要的数据结构是堆内存分配表(链),管理已分配和未分配的堆内存,对于已分配堆内存,需要知道由栈内存中的哪些变量 ...
- Java编程思想学习笔记_1(Java内存和垃圾回收)
1.Java中对象的存储数据的地方: 共有五个不同的地方可以存储数据. 1)寄存器.最快,因为位于处理器的内部,寄存器按需求分配,不能直接控制. 2)堆栈.位于通用RAM,通过堆栈指针可以从处理器那里 ...
- 高吞吐低延迟Java应用的垃圾回收优化
高吞吐低延迟Java应用的垃圾回收优化 高性能应用构成了现代网络的支柱.LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求.要优化用户体验,低延迟地响应这些请求非常重要. 比如说,用户经 ...
- 每日一问:讲讲 Java 虚拟机的垃圾回收
昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...
- JVM学习笔记——垃圾回收篇
JVM学习笔记--垃圾回收篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的垃圾回收部分 我们会分为以下几部分进行介绍: 判断垃圾回收对象 垃圾回收算法 分代垃圾回收 垃圾回收器 ...
- Java虚拟机之垃圾回收详解一
Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...
- 【java虚拟机序列】java中的垃圾回收与内存分配策略
在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...
- java中存在垃圾回收机制,但是还会有内存泄漏的问题,原因是
答案是肯定的,但不能拿这一句回答面试官的问题.分析:JAVA是支持垃圾回收机制的,在这样的一个背景下,内存泄露又被称为“无意识的对象保持”.如果一个对象引用被无意识地保留下来,那么垃圾回收器不仅不会处 ...
随机推荐
- hadoop单线程实现server多socket连接读取数据原理分析
一.问题引出. Hadoop 的Server 采用了Java 的NIO,这样的话就仅需要为每一个socket 连接建立一个线程,读取socket 上的数据.在Server 中,只需要一个线程,就可以a ...
- PopupWindow源码分析
PopupWindow是我们经常使用的一个控件,严格来说这个PopuWindow就用来在指定位置显示一个View. 经过分析源码,PopupWindow里面没有Window对象,只是把View设置到屏 ...
- PPT扁平化风格设计手册
钱文嘉:颜色选择,搭配 http://www.pptfans.cn/341917.html
- 手机安全卫士开发系列(2)——splash界面
一.Android中的MVC (1)activity主要用来页面的展示 (2)engine包:获取数据和展示数据(包含数据适配器) (3)domain包:存放数据实体 第一种包结构组织关系: 第二种包 ...
- delphi TOpenDialog
TOpenDialog procedure TForm1.Button1Click(Sender: TObject);begin with TOpenDialog.Create(ni ...
- Android 仿PhotoShop调色板应用(三) 主体界面绘制
版权声明:本文为博主原创文章,未经博主允许不得转载. Android 仿PhotoShop调色板应用(三) 主体界面绘制 关于PhotoShop调色板应用的实现我总结了两个最核心的部分: 1 ...
- 使用strace追踪多个进程
http://www.ttlsa.com/tools/use-strace-to-track-multiple-processes/ strace是Linux环境下的一款程序调试工具,用来监察一个应 ...
- Linux 性能分析工具 nmon for Linux
http://blog.csdn.net/defonds/article/details/41725929 http://blog.csdn.net/fansy1990/article/details ...
- spring mvc DispatcherServlet详解之二---request通过Controller获取ModelAndView过程
整个spring mvc的架构如下图所示: 上篇文件讲解了DispatcherServlet通过request获取控制器Controller的过程,现在来讲解DispatcherServletDisp ...
- 趣谈iOS运行时的方法调用原理
一个成熟的计算机语言必然有丰富的体系,复杂的容错机制,处理逻辑以及判断逻辑.但这些复杂的逻辑都是围绕一个主线丰富和展开的,所以在学习计算机语言的时候,先掌握核心,然后了解其原理,明白程序语言设计的实质 ...