我们知道JVM中一个对象实例超出作用域或无引用的时候会被垃圾回收,那么他被垃圾回收后,依赖其成员变量的其他实例是否还能正常使用呢?经过测试后发现即使一个实例被垃圾回收,如果他内部的数据被其他对象使用,是不受影响的,下面看这个示例

package test;

public class mytest {

public static void main(String[] args) throws Exception {

HandleBuffer hb = null;

{

Buffer buf = new Buffer();

hb = new HandleBuffer(buf.getBuf());

buf = null;

}

System.out.println("Has Buffer gone away?");

System.in.read();

Runtime.getRuntime().gc();

System.out.println("first gc finished!");

System.in.read();

System.out.println("Has Buffer gone away?");

Thread.currentThread().sleep(1000);

System.out.println(hb);

System.in.read();

}

}

class Buffer{

private byte[] buf = new byte[1024];

public Buffer(){

this.buf = "abc".getBytes();

}

public byte[] getBuf(){

return this.buf;

}

@Override

protected void finalize() throws Throwable {

System.out.println("Buffer gone away!");

}

}

class HandleBuffer{

byte[] buf = null;

public HandleBuffer(byte[] buf){

this.buf = buf;

}

@Override

public String toString() {

return new String(buf);

}

}

下面为程序运行输出:

Has Buffer gone away?

first gc finished!

Has Buffer gone away?

Buffer gone away! //此时对象已被垃圾回收

abc //访问数据正常

java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园相关推荐

  1. java对象什么时候回收_Java对象的生命周期与垃圾回收以及四种引用

    创建对象的方式用new语句创建对象. 使用反射,调用java.lang.Class或java.lang.reflect.Constructor的newInstance()实例方法. 调用对象的clon ...

  2. java String如何回收_java中的垃圾回收

    原文-http://blog.csdn.net/zsuguangh/article/details/6429592 1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确 ...

  3. java 手动垃圾回收_java如何进行垃圾回收的

    转:http://blog.csdn.net/yakihappy/article/details/3979944 垃圾收集的目的在于清除不再使用的对象.gc通过确定对象是否被活动对象引用来确定是否收集 ...

  4. java创建变量的过程_java 对象的创建过程

    初始化的顺序首先是static(如果它们尚未由前一次对象创建初始化,也就是new对象的时候,只执行一次static变量初始化),变量初始化顺序有变量在类的定义顺序决定的: 对象的创建过程,以Dog类为 ...

  5. java 全局变量 内存不回收_Java的内存 - 内存回收

    这篇承接上一篇 <Java的内存 - 内存模型>,分析内存回收相关的知识点. 垃圾回收包含两个步骤,①标记哪些内存是垃圾 ②回收内存.下面分别说这两个步骤有哪些算法: 1. 垃圾标记 1. ...

  6. java 对象引用 弱引用吗_Java对象的强引用、软引用、弱引用和虚引用 笔记

    从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 1.强引用 使用最普遍的引用.如果一个对象具有强 ...

  7. java中何时不能实例_Java对象实例是何时被创建

    您可能感兴趣的话题: Java 核心提示:对象实例何时被创建,这个问题也许你用一句话就能回答完了.但是它的潜在陷阱却常常被人忽视,这个问题也许并不像你想的那么简单,不信请你耐心看下去. 对象实例何时被 ...

  8. java的头怎么写_JAVA对象布局之对象头(Object Header)

    由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能 .在学习并发编程知识synchronized时,我们总是难以理解其实 ...

  9. c++变量重新赋值_Java基础二:一文讲透变量与数据类型

    学透Java中的变量与基本数据类型,看这篇就够了.变量 什么是变量: java是强类型语言,所有的变量都必须先声明才能使用,声明变量时必须指定变量存储信息的类型.变量的声明一般使用名值对的方式,包含变 ...

最新文章

  1. 途游斗地主加密协议分析及破解
  2. 继承ViewGroup类
  3. SANS:2014年安全分析与安全智能调研报告
  4. ] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题
  5. Java –远景JDK 8
  6. java select下拉标签_java中下拉框select和单选按钮的回显操作
  7. python 示例_带有示例的Python列表remove()方法
  8. nuxt webpack配置css,vuecli或nuxt用Webpack的优雅ProgressBar(webpackBar)
  9. 高清壁纸:60款可爱的圣诞节电脑桌面壁纸《中篇》
  10. 解决为什么已经设置了request.setCharacterEncoding(“utf-8“);POST请求仍然乱码的问题
  11. JavaScript 插件的书页翻转效果
  12. 交换机千兆和百兆对网速影响_电信宽带升级为200M,为什么网速没有提升多少?...
  13. 云智能资深专家崮德:谈谈我对华为HarmonyOS 2.0的看法
  14. 详解Java中的Base64原理跟用法
  15. 前端UI框架网址大全----后续会有添加
  16. matlab画三维图像(plot3,mesh,surf)
  17. 使用活字格制作企业办公用品管理软件
  18. Python 根据excel内容批量生成二维码
  19. 英语词根词缀记忆法(全集)_你竟然还在用词根词缀背单词?智橡树英语教你音标和音节秒记法...
  20. 云产品学习之路(阿里云01)阿里云rds数据库导出

热门文章

  1. qMISPlat入门级使用问题解答一
  2. asp.net core源码飘香:Options组件
  3. [转]C++二进制完成加减乘除
  4. 一键将Python2代码自动转化为Python3
  5. C语言试题四十四之移动一维数组中的内容,若数组中由n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。
  6. Android之华为平板打日志提示Permission denied
  7. Android之万能适配器Adapter的使用
  8. 《iVX 高仿美团APP制作移动端完整项目》03 推介信息及推荐商家分析及制作
  9. python语法详解_解析 Python3 基础语法
  10. php 实现自动加载更多,$.ajax+php实战教程之下拉时自动加载更多文章原理分析二...