Em Java, quais são as implicações de desempenho e recursos do uso
System.currentTimeMillis()
vs.
new Date()
vs.
Calendar.getInstance().getTime()
Pelo que entendi, System.currentTimeMillis()
é o mais eficiente. No entanto, na maioria das aplicações, esse valor longo precisaria ser convertido em uma Data ou em um objeto semelhante para fazer algo significativo para os seres humanos.
Olhando para o JDK, o construtor mais interno de
Calendar.getInstance()
tem o seguinte:então ele já faz automaticamente o que você sugere. O construtor padrão da data mantém isso:
Portanto, realmente não há necessidade de obter a hora do sistema especificamente, a menos que você queira fazer algumas contas com ela antes de criar seu objeto Calendário / Data. Também tenho que recomendar o joda-time para substituir as próprias classes de calendário / data do Java se seu objetivo é trabalhar muito com os cálculos de data.
fonte
Se você estiver usando uma data, recomendo fortemente que você use jodatime, http://joda-time.sourceforge.net/ . Usar
System.currentTimeMillis()
campos que são datas parece uma péssima idéia, pois você terá muito código inútil.Tanto a data quanto o calendário são gravados com seriedade, e o Google Agenda é definitivamente o pior artista de todos.
Eu recomendo que você use
System.currentTimeMillis()
quando estiver operando com milissegundos, por exemplo, como estefonte
Prefiro usar o valor retornado por
System.currentTimeMillis()
para todos os tipos de cálculos e usar apenasCalendar
ouDate
se realmente preciso exibir um valor lido por humanos. Isso também impedirá 99% dos erros do horário de verão. :)fonte
Na minha máquina, tentei verificar. Meu resultado:
Não se esqueça do GC (se você usa
Calendar.getInstance()
ounew Date()
)fonte
Dependendo do seu aplicativo, você pode considerar o uso
System.nanoTime()
.fonte
nanoTime
retorna é relativo (geralmente para o início do programa) e seria absurdo se você tentasse transformá-lo em uma data.Eu tentei isso:
E o resultado foi:
Data (): 199
currentTimeMillis (): 3
fonte
System.currentTimeMillis()
é obviamente o mais rápido porque é apenas uma chamada de método e nenhum coletor de lixo é necessário.fonte