当前位置: 首页 > 知识库问答 >
问题:

getDeclaredFields()绝对性能

欧阳俊明
2023-03-14

我有一个Java类来表示数据库中的一个条目。所以每个字段都是数据库中的一列。

当我想更新该数据库时,我会构造一个ContentValures对象。

ArrayList<T> contentValues = new ArrayList<T>()

//bla bla add ten items to contentValues`

速度快于

ArrayList<T> = new ArrayList<T>(ThisClass.class.getDeclaredFields().length);
//bla bla add ten items to contentValues

getDeclaredFields的绝对性能是什么?我希望有人能真正指出getDeclaredFields是如何工作的。我知道容器的大小调整是如何工作的,但我对getDeclaredFields如何工作以及如何执行一无所知。

共有2个答案

巫英纵
2023-03-14
ContentValues contentValues = new ContentValues()

我认为执行时间的差异并不明显。

周翼
2023-03-14

带有简单HashMap的微型基准测试,使用与ContentValue相同的设置(假设这是您所指的类),并添加10个字段(即一个调整大小的操作):

Benchmark                                    Mean   Mean error          Var    Units
c.a.p.g.a.Reflection.getDeclaredFields     326.405        5.989       33.961  nsec/op
c.a.p.g.a.Reflection.resize                247.581        7.377       51.520  nsec/op

因此,<code>getDeclaredFields</code>比一次调整地图大小要慢一些,但在台式PC上,差异仅为100纳秒量级。

当向< code>ThisClass添加更多字段时,< code>getDeclaredFields会变慢,所以我倾向于使用自动调整大小的方法。

代码

@GenerateMicroBenchmark(BenchmarkType.AverageTimePerOp)
public Map getDeclaredFields() {
    Map m = new HashMap(ThisClass.class.getDeclaredFields().length, 1.0f);
    for (int i = 0; i < 9; i++) {
        m.put(i, "a");
    }
    return m;
}

@GenerateMicroBenchmark(BenchmarkType.AverageTimePerOp)
public Map resize() {
    Map m = new HashMap(8, 0.75f);
    for (int i = 0; i < 9; i++) {
        m.put(i, "a");
    }
    return m;
}

class ThisClass {
    private int i, j, k;
    public String s, t, u;
    protected List l, m, n;
}
 类似资料:
  • 我有一个设置,我想有一个方法来处理不同的报告模板(每个模板的字段比其他模板少/多),方法是传入报告名称并在运行时创建对象。然后检查每个字段是否存在,如果存在,则设置值。然后将对象序列化为JSON以返回。 我有一个测试设置如下。问题是我无法获取已创建对象的字段列表。物体。getClass()。getDeclaredFields()始终提供空数组。 我想看看你是否能发现任何错误,或者是否有更聪明的方法

  • 问题内容: 我有3个要素。 第一个更大(包装)并具有 第2个相对于第1个相对位置绝对定位(并包含在第1个中) 第3个包含在第2个中,并且也具有绝对定位。 为什么第3个位置相对于第2个绝对位置(这也是第1个位置的绝对位置)而不是相对位置的第一个位置? 因为3rd 是绝对定位到2nd的绝对定位。 问题答案: 因为就像重置孩子的相对位置一样。 这是无法解决的-如果您希望第三个相对于第一个绝对定位,则必须

  • 位置路径指定XML文档中节点的位置。路径可以是绝对路径或相对路径。 如果位置路径以根节点或开头,则它是绝对路径。 以下是使用绝对路径定位元素的示例中的一小部分。 - 选择类根节点中的节点。 - 在类根节点中选择节点的名称。 示例 在这个例子中,我们创建了一个示例XML文档students.xml,及其样式表文档students.xsl,它使用了XPath表达式。 以下是使用的示例XML,文件:st

  • 问题内容: 如果我做一个 然后我收到服务器控制台警告 表达已弃用:改为使用 但它在客户端工作正常。 但是当我将其更改为 我得到一个错误 TypeError:路径必须是绝对路径或将根目录指定为 并且不呈现。 我无法弄清楚绝对路径是什么。我的目录与处于同一级别。我正在使用。我也宣布 添加我的目录结构: 在此处指定的绝对路径是什么? 我正在使用Express4.x。 问题答案: 该中间件是独立的,所以用

  • 当一个元素的 position属性设置为 absolute 或 fixed,它将使用绝对定位。绝对定位的元素将从文档流中完全删除,它原先在正常文档流中所占的空间会关闭,就好像该元素不存在一样,因此不会在原先的位置留下空白。 绝对定位的元素相对它的包含块进行定位。position: absolute 元素的包含块是最近已定位(position属性被设置,且不是static)的祖先元素,如果没有已定位