Java JComponent对象在运行时是否由JVM序列化/反序列化? 问题描述

Java JComponent对象在运行时是否由JVM序列化/反序列化? 问题描述,java,swing,awt,Java,Swing,Awt,Swing组件实现可序列化的。这其中有一些历史原因(见Meta一节) 然而,除了这些原因之外,我还模糊地记得曾经读过关于JVM序列化JComponent对象和派生的文章,这可能是因为运行时的性能原因(?)。在阅读了一些关于这个主题的资料后,这一点被牢牢地记在了我的脑海中,然而,当我试图验证这一点时,我无法发现任何类似的资料 问题 JVM是否出于性能原因在运行时序列化/反序列化Swing组件,而不以编程方式明确调用序列化 有没有资料可以描述这种现象 如果JVM要这样做,那么当只有一个JVM且不涉

Swing组件实现可序列化的
。这其中有一些历史原因(见Meta一节)

然而,除了这些原因之外,我还模糊地记得曾经读过关于JVM序列化
JComponent
对象和派生的文章,这可能是因为运行时的性能原因(?)。在阅读了一些关于这个主题的资料后,这一点被牢牢地记在了我的脑海中,然而,当我试图验证这一点时,我无法发现任何类似的资料

问题
  • JVM是否出于性能原因在运行时序列化/反序列化Swing组件,而不以编程方式明确调用序列化
  • 有没有资料可以描述这种现象
  • 如果JVM要这样做,那么当只有一个JVM且不涉及显式序列化/反序列化时,标准串行UID(相对于生成的UID)是否可能导致运行时错误?标准ID的形式如下:
到目前为止,我相信我的记忆是完全错误的。在这些源代码中没有提到
JComponent
s的运行时序列化。是否可以确认/拒绝

元 关于这个问题:

  • (请参阅序列化警告)

我不记得读过任何关于这方面的文章,我也没有经历过。如果Swing将这样做(自动),那么它可能只是针对当前JVM实例,即它不会反序列化任何“旧”组件。因此,串行版本uid可以是您想要的任何东西,因为不应该担心任何版本冲突。但是,我想知道当多个类共享默认UID
1L
时,当前实例是否会遇到问题。一个可能的用例可能是某种类型的缓存。尽管如此,如前所述,我再也找不到这个想法的来源了。我已经多年没有使用Java序列化了,所以我的内存有点生锈,但可能uid应用于类级别,所以使用默认uid的多个类应该不是问题。啊,是的,这是有意义的。因此,即使JVM使用
JComponent
序列化来使用某种类型的缓存,这也只与潜在的运行时错误有关,当涉及多个JVM时,否则JVM将不得不尝试在一次启动中加载同一类的两个版本。谢谢你到目前为止的洞察力。我不记得读过任何关于这方面的文章,我也没有经历过。如果Swing将这样做(自动),那么它可能只是针对当前JVM实例,即它不会反序列化任何“旧”组件。因此,串行版本uid可以是您想要的任何东西,因为不应该担心任何版本冲突。但是,我想知道当多个类共享默认UID
1L
时,当前实例是否会遇到问题。一个可能的用例可能是某种类型的缓存。尽管如此,如前所述,我再也找不到这个想法的来源了。我已经多年没有使用Java序列化了,所以我的内存有点生锈,但可能uid应用于类级别,所以使用默认uid的多个类应该不是问题。啊,是的,这是有意义的。因此,即使JVM使用
JComponent
序列化来使用某种类型的缓存,这也只与潜在的运行时错误有关,当涉及多个JVM时,否则JVM将不得不尝试在一次启动中加载同一类的两个版本。感谢您迄今为止的见解。
private static final long serialVersionUID = 1L;