class A{
List<B> list
}
class B{
A a
}
A a = new A();
a.list = new ArrayList<>();
B b = new B();
a.list.add(b);
b.a=a;
a , b 能释放?(不要关注语法. 问了很多人 培训班的老师说除了少分号没问题,其它人说不用就释放... 按我的理解 有点醉了...所以来到这里请教)
List<B> list
}
class B{
A a
}
A a = new A();
a.list = new ArrayList<>();
B b = new B();
a.list.add(b);
b.a=a;
a , b 能释放?(不要关注语法. 问了很多人 培训班的老师说除了少分号没问题,其它人说不用就释放... 按我的理解 有点醉了...所以来到这里请教)
解决方案 »
- PPP协议求助
- 初学JAVA,刚把JAVA SE看了一遍,想做个东西练习下,大家有什么提议呀,谢谢大家参与
- 代码块中有return语句,但是jBuilder老是说需要返回值。
- JAVA项目转移的问题
- 这段代码怎么老说我没有主类???
- 小妹才26分了,请问用java做一个b/s结构的矢量画图工具要用到那些技术呀?
- jdk1.4标准库里面有没有javax.mail这个类,如果没有该怎么办呢?
- 新手上路,请帮忙
- 怎样将两个jar文件和并?
- 又一个新手上路!java 将无处不在!??
- java集合中set接口下的实现类的用处是什么,无序的集合遍历和查找等操作都很麻烦
- 请教一个Colloctions 类中,synchronizedList方法的问题
注:root是指没有被其他对象引用的对象(静态属性对象、方法区常量对象等等)。具体可以看jvm垃圾回收机制原理。
测试代码:
import java.util.LinkedList;
import java.util.List;
public class T2 { public static void main(String[] args) {
new T2().test();
}
private Object lock = new Object();
void test(){
Thread thread = new Thread(){
@Override
public void run() {
while(true){
dowork1();
synchronized (lock) {
try {
lock.wait(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
thread.setName("Thread-Test");
thread.start();
}
void dowork1(){
AA a = new AA();
BB b = new BB();
a.b = b;
b.a = a; System.out.println("--1");
} void dowork2(){ AA a = new AA();
BB b = new BB();
System.out.println("--2");
}
}class AA{
public static final int _1MB = 1024 * 1024 ;
BB b;
// char[] data = new char[10 * _1MB];
LinkedList<Object>[] data = new LinkedList[1024];
}class BB{
public static final int _1MB = 1024 * 1024 ;
AA a;
// char[] data = new char[10 * _1MB];
LinkedList<Object>[] data = new LinkedList[1024];
}当使用char[] data = new char[10 * _1MB];时,通过Java VisualVM,监测内存变更情况如下图
当使用LinkedList<Object>[] data = new LinkedList[1024];时, 监测内存变更情况如下图所示。
至于为啥选择LinkedList<Object>[] ,因为在默认的程序中,JVM中的LinkedList<Object>[] 对象数一般为0,而char[]这些对象的数量非常大,JDK本身也在数的new char[]和回收 char[],不便于监测。