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是支持垃圾回收机制的,在这样的一个背景下,内存泄露又被称为“无意识的对象保持”.如果一个对象引用被无意识地保留下来,那么垃圾回收器不仅不会处 ...
随机推荐
- linux OpenOffice
1.下载所需的安装包 /project/openofficeorg.mirror/4.0.1/binaries/zh-CN/Apache_OpenOffice_4.0.1_Linux_x86-64_ ...
- 基于ThinkPHP框架的简单的后台管理系统
版权声明:本文为博主原创文章,未经博主允许不得转载. 基于ThinkPHP框架的简单的后台管理系统 一个简单的后台管理系统,可能还不全面,可以自己改,有登录功能 实例如图:
- Linux 下挂载硬盘的 方法
1. 添加磁盘,查看磁盘状况 [root@db1 /]# fdisk -l Disk /dev/sda: 10.7 GB, 10737418240 bytes 255 heads, 63 sector ...
- linux —— 学习笔记(文件、文件夹操作)
目录:1.常用的文件文件夹操作 2.文件属性的设置 1.常用的文件文件夹操作 mkdir 创建文件夹 -p 如果指定 a/b/c 时 a .b 不存在,一起创建出来 cp 复制文件或文件 ...
- CMDLINE的解析
在linux的config文件中有一个特殊的宏定义CMDLINE,以前也一直在使用这个宏的参数,但是真正这个宏的解析和使用却不怎么明确.这次有机会多对它有些了解,不妨把这个浅显的认识说出来,记下来. ...
- docker-compose 工具安装
centos 7 安装 之前测试过相关安装方法 pip python 安装不行 还是用下面这个办法搞定 curl -L https://github.com/docker/compose/releas ...
- OSChina 的全文搜索设计说明 —— 索引过程
http://www.oschina.net/question/12_71591 言: OSChina 的搜索做得并不好,很久之前一直想在细节方面进行改造,一直也没什么好的思路.但作为整体的结构或许对 ...
- Form实现无刷新上传文件并返回自定义值
今天开发过程中遇到了这样一个问题:需要将Excel上传至服务器进行解析,但是在文档不合适的情况下希望可以不刷新页面提示用户文档不合适.冥思苦想了半天,在网上找了不少资料最终试验成功,在此分享下处理方法 ...
- [转] SSH 密钥认证机制
使用 RSA 密钥对进行 SSH 登录验证 使用 RSA 密钥对验证 SSH 的优点是 1) 不用打密码 2) 比密码验证更安全:缺点是 1) 第一次配置的时候有点麻烦 2) 私钥需要小心保存.Any ...
- Struts2 ValueStack
一.作用 可以作为一个数据中转站,用在前台和后台数据传递 二.生命周期 ValueStack的生命周期是随着request的创建而创建,随request的销毁而销毁. 三.结构 OgnlValueSt ...