【问题标题】:Java subclass constructor executes much longerJava 子类构造函数执行时间更长
【发布时间】:2017-05-05 07:08:22
【问题描述】:

这是我的问题: 我有两个类,基本继承:

public class Foo1 {
    long a;
    double b;
    String c;

    Foo1(long a, double b) {
        this.a = a;
        this.b = b;
    }

    Foo1(long a, double b, String c) {
         this(a, b);
         this.c = c;
    }
    ...
}

public class Foo2 extends Foo1 {
    Foo2(long a, double b) {
        super(a, b);
    }

    Foo2(long a, double b, String c) {
         super(a, b, c);
    }
    ...
} 

现在: - Foo1 类通常从两个构造函数创建, - Foo2 类通常从 2 个参数构造函数创建,但在 3 个参数构造函数的情况下,它创建的时间明显更长,例如:

6k Foo1 和 6k Foo2 的创建(和其他工作),使用 2 参数构造函数需要 2 分钟,同样的事情,6k 和 6k 使用 3 参数构造函数需要大约 1 小时。

我 100% 确定这部分会减慢我的程序,但我绝对不知道为什么......有什么想法吗?

【问题讨论】:

  • 很好地展示了基准代码。
  • 创建 6k 个实例不会花费太多,您是否尝试使用分析器?事实上,我们希望看到测试代码和运行时设置(堆大小)
  • 我刚刚通过创建两个类的 60k 实例来测试您的代码,它会在半秒内终止……而且我正在使用在线编译器!你在开发什么系统?
  • " 我已经测量了每个操作的时间,我已经评论了这个特定的构造函数等" 那么从该特定部分创建一个Minimal, Complete, and Verifiable example 应该很容易代码在这里发布...
  • 也许检查“其他正在发生的事情”?

标签: java inheritance subclass superclass


【解决方案1】:

我 100% 确定这部分会降低我的程序速度

不要在“我确定”的基础上进行优化。

使用分析器对您的应用程序进行基准测试,以识别真正的瓶颈。

【讨论】:

  • 是的,但我觉得你的帖子应该是评论。您通过放置探查器来要求 OP 进行更多说明。您关于使用分析器对问题区域进行基准测试的建议并不能解决 OP 的问题。
  • @RBT 我的意思不是“请求更多信息”(我在 cmets 中做过),而是作为建议。果然这不是 OP 可能期望的答案......
  • 这应该是评论,而不是答案。
猜你喜欢
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 2012-03-24
  • 1970-01-01
  • 2021-03-12
  • 2016-04-02
  • 1970-01-01
相关资源
最近更新 更多