前言
测试一下各时间类的性能, 做到心中有数
环境: AMD4800H 64G OpenJDK15 Junit4.13.2
测试代码
public class 日期时间类创建解析速度测试 {
long totalAmount001 = 10_000_000L;
void p(Object o) {System.out.println(o);}
@Test public void testSystemCurrentTimeMillisSpeed() {
long v=0;
for(long i=0; i<totalAmount001; i++) { v = System.currentTimeMillis(); } p(v);
}
@Test public void testInstantNowSpeed() {
Instant instant = null;
for(long i=0; i<totalAmount001; i++) { instant = Instant.now(); } p(instant);
}
@Test public void testLocalDateNowSpeed() {
LocalDate localDate = null;
for(long i=0; i<totalAmount001; i++) { localDate = LocalDate.now(); }
System.out.println(localDate);
}
@Test public void testLocalTimeNowSpeed() {
LocalTime localTime = null;
for(long i=0; i<totalAmount001; i++) {localTime=LocalTime.now();}
System.out.println(localTime);
}
@Test public void testLocalDateTimeNowSpeed() {
LocalDateTime localDateTime = null;
for(long l=0; l<totalAmount001; l++) {localDateTime=LocalDateTime.now();}
System.out.println(localDateTime);
}
@Test public void testLocalDateTimeOfIntSpeed() {
LocalDateTime localDateTime = null;
for(long l=0; l<totalAmount001; l++) {localDateTime=LocalDateTime.of(2021, 4, 4, 8, 0, 0);}
System.out.println(localDateTime);
}
@Test public void testLocalDateTimeOfIntegerValueOfStringSpeed() {
LocalDateTime localDateTime = null;
for(long l=0; l<totalAmount001; l++) {
localDateTime=LocalDateTime.of(
Integer.valueOf("2021"), Integer.valueOf("4"), Integer.valueOf("5")
, Integer.valueOf("0"), Integer.valueOf("0"), Integer.valueOf("0")
);
}
System.out.println(localDateTime);
}
@Test public void testLocalDateTimeParseStringSpeed() {
LocalDateTime localDateTime = null;
for(long l=0; l<totalAmount001; l++) {localDateTime=LocalDateTime.parse("2021-04-04T08:08:08");}
System.out.println(localDateTime);
}
@Test public void testNewUtilDateSpeed() {
java.util.Date utilDate = null;
for(long l=0; l<totalAmount001; l++) {utilDate=new java.util.Date();}
System.out.println(utilDate);
}
@Test public void testNewTimestampLongSpeed() {
Timestamp timestamp = null;
for(long l=0; l<totalAmount001; l++) {timestamp=new Timestamp(0);} p(timestamp);
}
@Test public void testNewTimestampSystemCurrenttTimeMillisSpeed() {
Timestamp timestamp = null;
for(long l=0; l<totalAmount001; l++) {timestamp=new Timestamp(System.currentTimeMillis());} p(timestamp);
}
@Test public void testTimestampValueOfStringSpeed() {
Timestamp timestamp = null;
for(long l=0; l<totalAmount001; l++) {timestamp=Timestamp.valueOf("2021-04-05 01:18:18");}
p(timestamp);
}
}
结果截图
总结
- System.currentTimeMillis() 比 Instant.now() 快3倍
- new Date() 比 LocalDateTime.now() 快10倍
- LocalDateTime.of(int , int …)速度还是挺快的
- LocalDateTime.now()比LocalDateTime.of(int)慢了近50倍
- LocalDateTime.parse(字符串)比LocalDateTime.now() 还慢20倍
- LocalDateTime.parse(“2021-04-05T00:00:00”)中间的 T 不能少
- 用官方方式解析字符串获得时间真的很慢
Timestamp.valueOf(String)比 new Timestamp(long) 慢60倍
LocalDateTime.parse(String)比LocalDateTime.of(int,int…)慢800倍
LocalDateTime.parse(String)比Timestamp.valueOf(String)慢6倍
LocalDateTime.of(
Integer.valueOf(“2021”), Integer.valueOf(“4”), Integer.valueOf(“4”)
, Integer.valueOf(“8”), Integer.valueOf(“8”), Integer.valueOf(“8”)
);
比
LocalDateTime.parse(“2021-04-04T08:08:08”)
快 200倍!