小编Jam*_*ven的帖子

为什么这个内循环4X在通过外循环的第一次迭代中更快?

我试图重现这里描述的一些处理器缓存效果.我知道Java是一个托管环境,这些例子不会完全翻译,但我遇到了一个奇怪的例子,我试图提炼出一个简单的例子来说明效果:

public static void main(String[] args) {
    final int runs = 10;
    final int steps = 1024 * 1024 * 1024;

    for (int run = 0; run < runs; run++) {
        final int[] a = new int[1];
        long start = System.nanoTime();
        for (int i = 0; i < steps; i++) {
            a[0]++;
        }
        long stop = System.nanoTime();
        long time = TimeUnit.MILLISECONDS.convert(stop - start, TimeUnit.NANOSECONDS);
        System.out.printf("Time for loop# %2d: %5d ms\n", run, time);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

 Time for loop# …
Run Code Online (Sandbox Code Playgroud)

java performance jit

20
推荐指数
1
解决办法
657
查看次数

如何在测试执行之前强制使用新版本的Spring上下文

我用它SpringJUnit4ClassRunner来编写集成测试.我也@DirtiesContext用于测试,使背景处于破碎状态,并且工作得很好.

但是现在我有一个测试,它在静态初始化器中设置一个重要的SystemProperty,而后者又在Spring上下文中使用.当测试自行执行时,这也可以正常工作.但是当我使用其他测试运行测试时,Spring上下文已经创建了该属性集并被我的新测试重用.

如何在我的测试中强制重新创建Spring上下文,然后将使用更改的System Property?

spring junit4

18
推荐指数
2
解决办法
7132
查看次数

在API中使用java.util.Date的好理由

是否有任何特定原因在API中使用Date类(例如,在员工出生日期字段中)而不是long或Long.

有一些关于这个的讨论: java-date-vs-calendar,但我想知道是否有任何理由使用Dates,当long(或Long)似乎更简单.

当然我会使用TimeZone和SimpleDateFormatter在GUI中解析和显示日期,也可能使用Calendar来执行操作,但我只关心这个问题中数据模型/ API中日期的存储和表示.

更新:我不选择Date的一个原因的例子是它是可变的.因此,如果我在API中公开Date,调用者可以调用setTime(long),这似乎违反了基本封装.对我而言,这似乎超过了使用Date提供的额外清晰度的好处,因为我可以调用long属性timeInMillisecondsSinceEpoch并将相同的信息传递给调用者.

java date java.util.date

11
推荐指数
2
解决办法
657
查看次数

序列化时是否保留Interned Strings?

如果我有包含许多重复字符串的大对象图,那么在序列化它们之前对字符串进行实际的()是否有好处呢?这会减少传输的数据量吗?字符串会在接收端共享指针吗?

我的猜测是在发送之前将对字符串进行去除,从而减小数据的大小,并且它们将全部由接收端上的相同对象表示,但它们实际上不会在接收端被实现.(意味着每个序列化'事务'上会创建一个新的字符串实例)

java serializable string-interning

3
推荐指数
2
解决办法
1291
查看次数

将ISO 8601日期转换为标准字符串格式

我正在尝试将有效的ISO 8601字符串转换为一致的格式,以便可以使用简单的字典顺序进行排序和搜索.

我的应用程序可以使用以下任何格式接收日期/时间,例如:

2015-02-05T02:05:17.000+00:00
2015-02-05T02:05:17+00:00
2015-02-05T02:05:17Z
Run Code Online (Sandbox Code Playgroud)

这些都代表相同的日期/时间,我想将它们全部转换为规范的存储形式,例如:

2015-02-05T02:05:17.000Z
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是使用从将ISO 8601兼容的String转换为java.util.Date的技术解析它们,然后转换回所需的字符串,但在处理不太精确的日期/时间时会出现故障,例如:

2015-02-05T02:05:17Z
2015-02-05T02:05Z
2015-02-05Z
2015-02Z
2015Z
Run Code Online (Sandbox Code Playgroud)

应该保留这些时代的不精确性.它们不应转换为:

2015-02-05T00:00:00.000Z
Run Code Online (Sandbox Code Playgroud)

我看过Java 8和Joda-Time,但他们似乎想把所有内容都视为特定的时间点,并且不能模拟不精确的性质或部分日期/时间.

更新:

使用Java 8,我可以这样做:

OffsetDateTime dateTime = OffsetDateTime.parse("2015-02-05T02:05:17+00:00");
System.out.println(dateTime.toString());
Run Code Online (Sandbox Code Playgroud)

这给了我:

2015-02-05T02:05:17Z
Run Code Online (Sandbox Code Playgroud)

这是我想要的,但是:

OffsetDateTime dateTime = OffsetDateTime.parse("2015-02-05T02:05:17.000+00:00");
System.out.println(dateTime.toString());
Run Code Online (Sandbox Code Playgroud)

也给了我:

2015-02-05T02:05:17Z
Run Code Online (Sandbox Code Playgroud)

请注意,java已经抛弃了毫秒精度.指定000与未指定任何内容相同,这似乎不太正确.

java iso8601 jodatime

2
推荐指数
1
解决办法
7591
查看次数

如何在插入时自动映射数据库查找表(Oracle)

我有几乎非规范化的现有表.事物列表状态,类型,国家等没有查找表...这个原始设计只是为了简化应用程序对数据库的访问,因此这种非规范化没有性能原因.

这导致了包含大量重复数据的表格,我想通过为各种状态/类型/国家/地区列引入查找表来正确规范化.

是否有一些我可以在数据库(oracle)中做到这一点,对客户端保持透明?应用程序将继续执行插入操作,但数据库会将事物映射到幕后的正确查找表.

我一直在尝试使用可以进行映射的视图和触发器的组合,但感觉应该有更自动的方法来执行此操作.

sql oracle normalization lookup-tables denormalization

1
推荐指数
1
解决办法
1159
查看次数