【问题标题】:Java transient runtime improvements?Java 瞬态运行时改进?
【发布时间】:2018-08-14 09:47:00
【问题描述】:

在我的项目中没有保存或加载。每次登录都会创建一个新对象。

因此,从技术上讲,每个字段都好像是瞬态的。但如果我也将它们都命名为瞬态,即

private final Car car = new Car();

(即使每次登录都会创建包含此字段的对象)

改成

private transient final Car car = new Car();

这会对我的项目在内存使用或速度方面产生任何积极影响吗?

【问题讨论】:

  • transient 只是意味着它不会被内置的java序列化机制序列化
  • transient 仅表明该字段不应由ObjectOutputStream 序列化。据我所知,它对性能或内存使用没有其他影响。如果您的对象不是Serializable 和/或您不使用对象输出流,那么设置transient 将不起作用。
  • 我认为你不应该像你那样想transient。您应该考虑如果您曾经持久化包含car 字段的对象实例会发生什么。目前没有保存或加载并不重要。默认情况下,我会省略 transient 关键字。还有一点警告:不要过早优化。许多优化会影响可读性/复杂性,因此会损害代码的可维护性。

标签: java oop memory memory-management field


【解决方案1】:

将变量声明为瞬态不会对内存占用产生影响。瞬态意味着当您序列化一个对象时,这些字段不会成为持久状态的一部分,在反序列化过程中,这些变量将被初始化为其默认值。

Transient Field Description from Java Docs

【讨论】:

    【解决方案2】:

    具有瞬态修饰符的成员将没有资格进行序列化。 添加瞬态修饰符不会对程序的性能产生任何影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 2017-03-05
      • 1970-01-01
      相关资源
      最近更新 更多