System.currentTimeMillis() vs. 새로운 날짜() vs.Calendar.getInstance().getTime()
Java에서 사용하는 퍼포먼스와 자원에 대한 영향은 무엇입니까?
System.currentTimeMillis()
대.
new Date()
대.
Calendar.getInstance().getTime()
제가 알기로는System.currentTimeMillis()
가장 효율적입니다.그러나 대부분의 응용 프로그램에서 이 긴 값을 날짜 또는 이와 유사한 개체로 변환해야 인간에게 의미 있는 작업을 수행할 수 있습니다.
System.currentTimeMillis()
오브젝트를 생성하지도 않기 때문에 가장 효율적입니다만,new Date()
정말 얇은 포장지에 불과하기 때문에 그리 뒤떨어지지 않습니다. Calendar
한편, 은 비교적 느리고 매우 복잡합니다.이는 날짜 및 시간(예: 12월, 여름 시간, 시간대 등)에 따라 발생하는 매우 복잡한 모든 문제에 대처해야 하기 때문입니다.
일반적으로는 긴 타임스탬프 또는 긴 타임스탬프만 처리하는 것이 좋습니다.Date
응용 프로그램 내의 오브젝트 및 사용만Calendar
날짜/시간 계산을 실제로 수행해야 하는 경우 또는 사용자에게 표시할 날짜 형식을 지정합니다.많은 작업을 해야 한다면 Joda Time을 사용하는 것이 더 깨끗한 인터페이스와 더 나은 성능을 위해 좋은 생각일 것입니다.
JDK, 가장 안쪽 컨스트럭터:Calendar.getInstance()
에는 다음이 있습니다.
public GregorianCalendar(TimeZone zone, Locale aLocale) {
super(zone, aLocale);
gdate = (BaseCalendar.Date) gcal.newCalendarDate(zone);
setTimeInMillis(System.currentTimeMillis());
}
이미 제안하신 대로 자동으로 실행이 됩니다.Date 기본 생성자에는 다음이 포함됩니다.
public Date() {
this(System.currentTimeMillis());
}
따라서 달력/날짜 개체를 만들기 전에 시스템 시간을 계산해야 하는 경우가 아니라면 시스템 시간을 특별히 얻을 필요가 없습니다.또한 날짜 계산을 많이 하는 경우 Java 자체 캘린더/날짜 클래스를 대체하기 위해 joda-time을 사용해야 합니다.
만약 당신이 날짜를 사용한다면, 나는 당신이 조다타임, http://joda-time.sourceforge.net/을 사용하는 것을 강력히 추천한다.사용.System.currentTimeMillis()
날짜 필드에는 매우 좋지 않은 생각처럼 들립니다. 왜냐하면 결국 쓸모없는 코드가 많이 생기게 되니까요.
날짜와 달력이 모두 심각하게 엉망이 되어 있고, 캘린더는 확실히 그 중에서 가장 성능이 떨어진다.
를 사용하는 것이 좋습니다.System.currentTimeMillis()
예를 들어 다음과 같이 실제로 밀리초 단위로 작업하는 경우
long start = System.currentTimeMillis();
.... do something ...
long elapsed = System.currentTimeMillis() -start;
기계로 확인해보았습니다.결과:
Calendar.getInstance().getTime() = 402msnew Date().get Time(); (*1400회)= 18 msSystem.currentTimeMillis() (*14000회)= 16 ms
마세요(GC를 사용하는 Calendar.getInstance()
★★★★★★★★★★★★★★★★★」new Date()
)
하는 것이 .System.currentTimeMillis()
"사용할 수 없습니다"만 사용합니다.Calendar
★★★★★★★★★★★★★★★★★」Date
인간에 의해 읽히는 가치를 보여줄 필요가 있는지.도도도99% :)
따라서는, 사용하시는 어플리케이션의 .System.nanoTime()
★★★★★★ 。
이거 해봤어요.
long now = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
new Date().getTime();
}
long result = System.currentTimeMillis() - now;
System.out.println("Date(): " + result);
now = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
System.currentTimeMillis();
}
result = System.currentTimeMillis() - now;
System.out.println("currentTimeMillis(): " + result);
결과는 다음과 같습니다.
날짜(): 199
current Time Millis(): 3
System.currentTimeMillis()
가비지 콜렉터가 필요 없는 메서드콜이1개뿐이기 때문에가 가장 빠릅니다.
언급URL : https://stackoverflow.com/questions/368094/system-currenttimemillis-vs-new-date-vs-calendar-getinstance-gettime
'IT이야기' 카테고리의 다른 글
최소/최대 검증 - Vuetify (0) | 2022.06.12 |
---|---|
할당 후 입력값 변경 (0) | 2022.06.12 |
Java에서 2개의 절대 경로(URL)에서 상대 경로를 구축하려면 어떻게 해야 합니까? (0) | 2022.06.12 |
Vuex(Nuxt)에서 SAS와 Javascript 간의 변수 공유가 가능합니까? (0) | 2022.06.12 |
Vue 3 - 셋업 시 Veux 스토어에 디스패치하는 방법 (0) | 2022.06.11 |