小编tpo*_*eba的帖子

在UTC中将HOUR_OF_DAY设置为0时,为什么GregorianCalendar会更改日期?

我观察到java.util.GregorianCalendar的一个奇怪的行为,我想知道它为什么会这样.

我希望得到UTC的时间,这是同一时刻26.10.2014 01:00 CET,然后在同一天获得UTC午夜.所以首先我设置实际的CET日期,而不是将时区更改为UTC,最后将HOUR_OF_DAY设置为0.

例:

  • 26.10.2014 01:00 CET与25.10.2014 23:00 UTC相同
  • 午夜(25.10.2014 23:00 UTC)应该是25.10.2014 00:00 UTC

请参阅下面的junit代码:

@Test
public void testWeird() {
    GregorianCalendar date = (GregorianCalendar) GregorianCalendar.getInstance(TimeZone.getTimeZone("CET"));
    date.set(2014, 9, 26, 1, 0, 0); //26.10.2014
    System.out.println(date.getTime().toGMTString() + " " + date.getTimeInMillis()); // 25 Oct 2014 23:00:00 GMT 1414278000764 (OK)

    date.setTimeZone(TimeZone.getTimeZone("UTC"));
    //date.get(Calendar.YEAR); // uncomment this line to get different results

    System.out.println(date.getTime().toGMTString() + " " + date.getTimeInMillis()); // 25 Oct 2014 23:00:00 GMT 1414278000764 (OK)
    date.set(Calendar.HOUR_OF_DAY, 0);
    System.out.println(date.getTime().toGMTString() + " " + …
Run Code Online (Sandbox Code Playgroud)

java gregorian-calendar

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

为什么 Java11 将 java.util.zip.ZipFile$Source 保留在堆上?

有人可以帮助我理解我所看到的是 Java11 中故意的、正确的行为还是某种泄漏吗?让我们看一个愚蠢简单的 hello world 应用程序:

package com.example;

public class HelloWorld {
    public static void main(String[] args) throws InterruptedException {
        for( int i =0 ; i < 50; i++){
            Thread.sleep(1000);
            System.out.println("hello " + i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

唯一有趣的部分是 jar 依赖项。它可以是任何 jar,但为了让问题更加引人注目,让我们使用一个大的 - 旧的 gwt-user jar,它重 30MB:

plugins {
    id 'java'
}

group 'com.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    // https://mvnrepository.com/artifact/com.google.gwt/gwt-user
    compile group: 'com.google.gwt', name: 'gwt-user', version: '2.7.0'
}

Run Code Online (Sandbox Code Playgroud)

运行应用程序,打开 jvisualvm,进行转储并查找保留的一组java.util.zip.ZipFile$Source

jvisualvm 堆转储

类路径中的 jar(实际上从未使用过)占用 1.5MB 的堆。它不会在 GC …

memory-leaks heap-dump java-memory-leaks java-11 openjdk-11

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