java 之 对象与垃圾回收
1.垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(如数据库连接,网络IO等资源)
2.程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候运行。当对象永久的失去引用后,系统会在合适的时间回收其占用的内存。
3.在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法。
对象在内存中的状态:
可 达 状 态:当一个对象被创建后,若有一个以上的引用变量引用他,则这个对象在程序中处于可达状态,程序可通过引用变量来调用该对象的实例变量和方法。
可恢复状态:如果程序中某个变量不在有任何引用变量引用它,它就进入了可恢复状态。在这种状态下,垃圾回收机制会准备回收这个变量所对应的内存,在回收该对象之前,系 统会调用所用可恢复对象的fnalize()方法,如果此时有一个引用变量引用该对象,该对象就重新变为可达状态。
不可达状态:当对象和所用引用变量的联系被切断,且系统已经调用了该对象的finalize()方法,仍没有使该对象变为可达状态。此时该对象进入不可达状态,只有当对象处于不可达状态时,系统才会开始回收该对象占用的资源。
public class StatusTranfer{
public static void test(){
//执行此步时,对象12345处于可达状态
String a = new String("12345");
//执行到此步时,对象12345处于可恢复状态
//对象123处于可达状态
a = new String("123");
}
public static void main(String[] args) {
test();
}
}
强制垃圾回收
程序只能控制一个对象什么时候不被引用变量引用,但不能控制系统什么时候进行垃圾回收。
程序无法精确控制java垃圾回收的时机,但仍然能够强制系统进行垃圾回收————这种强制只是通知系统进行垃圾回收,但系统是否进行垃圾回收仍然不确定。大部分时候,程序强制系统进行垃圾回收会有一些效果。
强制垃圾回收的两种方式:
1。调用System类的gc()静态方法: System.gc()
2.调用Runtime的gc()实例方法:Runtime.getRuntime().gc()。
java 之 对象与垃圾回收的更多相关文章
- Java学习笔记-对象与垃圾回收
Java存在垃圾回收机制,JVM会去回收垃圾,释放资源,而不是像C++一样有程序员去完成 垃圾回收机制的特点 垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(例如数据库连接.网络IO等资源 ...
- java面试问题整理-垃圾回收
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址.大小以及使用情况.通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象,通过这种方式确定哪些对象是"可达的" ...
- Java内存管理 -JVM 垃圾回收
版权声明:本文为博主原创文章,未经博主允许不得转载 一.概述 相比起C和C++的自己回收内存,JAVA要方便得多,因为JVM会为我们自动分配内存以及回收内存. 在之前的JVM 之内存管理 中,我们介绍 ...
- Java基础教程:垃圾回收
Java基础教程:垃圾回收 垃圾回收 垃圾回收(Garbage Collection,GC),顾名思义是释放垃圾占用的空间,防止内存泄漏.有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使 ...
- 《深入理解 Java 虚拟机》学习 -- 垃圾回收算法
<深入理解 Java 虚拟机>学习 -- 垃圾回收算法 1. 说明 程序计数器,虚拟机栈,本地方法栈三个区域随线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定性 Java 堆和方 ...
- Java其实不支持垃圾回收
Java其实不支持垃圾回收.如果真的支持的话,大多数Java程序在运行的一开始就应该把程序本身删除,因为这些程序本身就是垃圾. // TODO: This is a 分割线. Please no ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- Java内存模型与垃圾回收
1.Java内存模型 Java虚拟机在执行程序时把它管理的内存分为若干数据区域,这些数据区域分布情况如下图所示: 程序计数器:一块较小内存区域,指向当前所执行的字节码.如果线程正在执行一个Java方法 ...
- Java基础-gs(垃圾回收)
Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 ...
随机推荐
- Sequence.js - 适合电子商务网站的图片滑块
Sequence.js 是一个非常现代的图片滑动效果,特别适合电子商务网站或者企业产品展示功能.带有图片缩率图,能够呈现全屏图片浏览效果.结合 CSS3 Transition 实现响应式的滑块效果. ...
- 对于Discuz!NT不允许新用户注册的解决办法
客户论坛用的是Discuz!NT,但是用户注册总是提示不允许新用户注册,对于这个问题,网上好多说的是管理员登录后台,在"用户与访问控制"里将允许新用户注册改为"是&quo ...
- 设置窗体透明C#代码
上个示例是C#调用windows api 在原来代码上加入窗体透明,控件不透明代码: using System; using System.Runtime.InteropServices; using ...
- 【Unity】13.1 场景视图中的GI可视化
分类:Unity.C#.VS2015 创建日期:2016-05-19 一.简介 在场景视图中设计不同的场景内容时,可以根据需要勾选相关的渲染选项,以便让场景仅显示其中的一部分或者全部渲染效果. 在这些 ...
- 演练:使用Xamarin.Forms开发产品介绍性质的应用(VB版)
概述 Xamarin这个使用mono和.net core的跨平台开发框架这几年在不断发展.被微软收购后的Xamarin为个人开发者提供了免费版的Xamarin for Visual Studio,吸引 ...
- Apns推送中的的json格式介绍
在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送.下面接受我在进行apns推送时候总结的一点apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 a ...
- HDU 1028(母函数)
Online Judge Online Exercise Online Teaching Online Contests Exercise Author F.A.QHand In HandOnline ...
- EffectiveJava——复合优先于继承
继承时实现代码重用的重要手段,但它并非永远是完成这项工作的最佳工具,不恰当的使用会导致程序变得很脆弱,当然,在同一个程序员的控制下,使用继承会变的非常安全.想到了很有名的一句话,你永远不知道你的用户是 ...
- MyEclipse+Mysql (二)
上一节介绍了如何在Myeclipse中连接mysql 这一节介绍如何在java程序中访问mysql数据库中的数据b并进行简单的操作 创建一个javaProject,并输入如下java代码: packa ...
- springMVC图片文件上传功能的实现
在工程依赖库下添加文件上传jar包 commons-fileupload-1.2.2.jar commons-io-2.4.jar 2.jsp页面设置form表单属性enctype 在表单中上传图片时 ...