Java中的引用类型和垃圾回收 强引用Strong References 强引用是最常见的引用: 比如: StringBuffer buffer = new StringBuffer(); 创建了一个StringBuffer类的对象,并用一个变量buffer存储对这个对象的引用.这就是个强引用. 变量持有的是这个对象的引用.通常,引用是一个对象的存储地址. Java不像C或者C++一样,Java没有取地址符号&,也没有解引用符号*或者->. 引用不同于指针,引用不能与整形进行互相转换,也不能…
1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: 1 Object o=new Object();   //  强引用 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题.如果不使用时,要通过如下方式来弱化引用,如下: 1 o=null;     // 帮助垃圾收集器回收此对象  显式地设置o为null,或超出对象的生命周期…
使用C4垃圾回收器可以有效提升对低延迟有要求的企业级Java应用程序的伸缩性. 到目前为止,stop-the-world式的垃圾回收视为影响Java应用程序伸缩性的一大障碍,而伸缩性又是现代企业级Java应用程序开发的基础要求,因此这一问题亟待改善.幸运的是,针对此问题,JVM中已经出现了一些新特性,所使用的方式或是对stop-the-world式的垃圾回收做微调,或是消除冗长的暂停(这样更好些).在一些多核系统中,内存不再是稀缺资源,因此,JVM的一些新特性就充分利用多核系统的潜在优势来增强J…
首先JVM的内存结构包括五大区域: 程序计数器.虚拟机栈.本地方法栈.方法区.堆区.其中程序计数器.虚拟机栈和本地方法栈3个区域随线程启动与销毁, 因此这几个区域的内存分配和回收都具有确定性,不需要过多考虑回收的问题.而Java堆区和方法区则不一样,这部分内存的分配和回收是动态的,正式垃圾回收需要关注的部分. 垃圾回收在堆内存进行回收前, 要先确定区域的哪些对象是可以被回收的.那些对象暂时还不能回收,下面谈一谈判断对象是否存活的算法. 判断对象是否存活的算法 1.引用计数算法 引用计数算法:堆中…
原文链接:http://www.cnblogs.com/leoo2sk/archive/2011/02/27/php-gc.html PHP是一门托管型语言,在PHP编程中程序员不需要手工处理内存资源的分配与释放(使用C编写PHP或Zend扩展除外),这就意味着PHP本身实现了垃圾回收机制(Garbage Collection).现在如果去PHP官方网站(php.net)可以看到,目前PHP5的两个分支版本PHP5.2和PHP5.3是分别更新的,这是因为许多项目仍然使用5.2版本的PHP,而5.…
ImportNew注:本文是JVM性能优化 系列-第4篇.前3篇文章请参考文章结尾处的JVM优化系列文章.作为Eva Andreasson的JVM性能优化系列的第4篇,本文将对C4垃圾回收器进行介绍.使用C4垃圾回收器可以有效提升对低延迟有要求的企业级Java应用程序的伸缩性. 到目前为止,本系列的文章将stop-the-world式的垃圾回收视为影响Java应用程序伸缩性的一大障碍,而伸缩性又是现代企业级Java应用程序开发的基础要求,因此这一问题亟待改善.幸运的是,针对此问题,JVM中已经出…
V8的垃圾回收和内存限制 前言 在第三次浏览器大战中,来自Google的Chrome浏览器凭借优异的性能成为聚光灯下的焦点.而Chrome的成功离不开站在其背后的JavaScript引擎V8. 随着V8的出现,让JavaScript彻底摆脱了作为脚本语言性能低下的形象.V8出色的性能让JavaScript出现在高性能后台服务程序开发的舞台上.也正是因为这样的契机,在2009年,Node的创始人Ryan Dahl选择了V8作为Node的JavaScript脚本引擎.在事件驱动.非阻塞I/O模型的设…
转摘于http://www.cnblogs.com/lovehappying/p/3679356.html PHP是一门托管型语言,在PHP编程中程序员不需要手工处理内存资源的分配与释放(使用C编写PHP或Zend扩展除外),这就意味着PHP本身实现了垃圾回收机制(Garbage Collection).现在如果去PHP官方网站(php.net)可以看到,目前PHP5的两个分支版本PHP5.2和PHP5.3是分别更新的,这是因为许多项目仍然使用5.2版本的PHP,而5.3版本对5.2并不是完全兼…
3. 回收器 3.1 Serial回收器:串行回收 3.1.1 概述 Serial收集器是最基本.历史最悠久的垃圾收集器了.JDK1.3之前回收新生代唯一的选择. Serial收集器作为Hotspot中Client模式下的默认新生代垃圾收集器. Serial收集器采用复制算法.串行回收和"stop-the-World"机制的方式执行内存回收. 除了年轻代之外, Serial收集器还提供用于执行老年代垃圾收集的Serial Old收集器. Serial Old收集器同样也采用了串行回收和…
一.为什么需要GC 应用程序对资源操作,通常简单分为以下几个步骤: 1.为对应的资源分配内存 2.初始化内存 3.使用资源 4.清理资源 5.释放内存 应用程序对资源(内存使用)管理的方式,常见的一般有如下几种: 1.手动管理:C,C++ 2.计数管理:COM 3.自动管理:.NET,Java,PHP,GO… 但是,手动管理和计数管理的复杂性很容易产生以下典型问题: 1.程序员忘记去释放内存 2.应用程序访问已经释放的内存 产生的后果很严重,常见的如内存泄露.数据内容乱码,而且大部分时候,程序的…