【发布时间】:2018-09-19 21:55:10
【问题描述】:
这个问题是双重的,但希望答案不应该太长,尽管它本身很长。不过,请随意回答其中的一部分,抱歉让其如此详尽!
- 哪些对象是持久化的?哪些对象是瞬态的?
- 对象何时持久化?
对于第一部分,问题适用于:
- 存储在
Applet中的对象 - 传递存储在
Applet中的对象 - 仅存储在堆栈变量中的对象(不被任何
Applet引用,甚至是传递性的) - 存储在使用
makeTransientObjectArray构建的数组中的对象 - 传递存储在使用
makeTransientObjectArray构建的数组中的对象(例如,存储在存储在makeTransientObjectArray中的对象的成员变量中)
对于第二部分,它取决于第一个问题的答案。例如:
- 我假设直接存储在瞬态对象数组中的对象不会被持久化。在这种情况下,假设堆栈上的对象是持久化的,那么存储在那里的对象什么时候变得不持久化?它是否在
new Object处持久化并且在放入瞬态对象数组时不持久化? - 如果一个对象同时具有来自瞬态对象数组和小程序的引用,并且小程序引用被擦除,那么该对象是否未持久化?
提前谢谢你!
我已经查看了 JCRE 规范 v2.2.2(我正在使用的版本),但其中有一些不清楚的地方(因此这个问题很详尽,因为我觉得这更适合 Q/ A式论坛):
- 第 2-2 页提到,当对象传递存储在
Applet中时,JCRE 使对象持久化。但是,Glossary-7 声明对象默认是持久的。这种差异似乎无法观察到,但会影响是否需要重新启动卡时是否需要进行垃圾收集。 - 第 5-1 页指出,瞬态对象的字段绝不能存储在持久内存中。但它没有说明这是否也适用于瞬态对象数组中的传递对象,例如。对象存储在瞬态对象数组的对象字段中。
- 当一个对象的引用同时存储在瞬态对象数组和
Applet中时,第 5-1 页的相同语句可能与第 2-2 页冲突。
这三个问题分别相当于:
- 第 1 部分要点 3 和 5(以及,根据答案,第 2 部分要点 1)
- 第 1 部分要点 5
- 第 2 部分要点 2
【问题讨论】: