Pergunta

Atualmente, estamos fazendo algumas iterações e outras operações com x++; onde x é um Integer e não um int.

As operações podem ser repetidas ao longo de algumas operações do usuário em nosso sistema, mas nada muito complexo ou numerosos como um Matemático aplicação, até o máximo de 10000 vezes por transação do usuário..

Será que este unboxing e, mais tarde, boxe afetar o nosso desempenho por alguns perceptível milissegundos?

Foi útil?

Solução

http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

"O desempenho da lista resultante é susceptível de ser pobres, como caixas ou unboxes em todos os obter ou definir a operação.É muito rápido o suficiente para uso ocasional, mas seria loucura para usá-lo em uma crítica do desempenho loop interno.

Então, quando você deve usar autoboxing e unboxing?Use-os apenas quando há uma "impedância" incompatibilidade entre tipos de referência e primitivas, por exemplo, quando você tem que colocar os valores numéricos em uma coleção.Não é apropriado para uso autoboxing e unboxing para a computação científica, ou outros de desempenho sensíveis código numérico.Um Inteiro não é um substituto para um int;autoboxing e unboxing borrar a distinção entre tipos primitivos e tipos de referência, mas não eliminá-lo."

Outras dicas

Sim, há um impacto de desempenho.O código equivalente produzido para ++x envolve a criação de um novo número Inteiro objeto de cada vez. x++ além disso, cria uma variável temporária para armazenar o número inteiro anterior de referência, e alguns de manipulação.Você pode verificar isso por desmontar o arquivo de classe.

A velocidade de auto-boxing depende da JVM versão que você está usando, o intervalo de números reais que você está trabalhando, e seu GC configurações.Ver este realmente interessante artigo de fundo sobre (onu)desempenho de boxe.

Basicamente, a JVM caches de um número Inteiro de objetos para que ele não precise criar os "comuns", aqueles a cada vez.Você pode configurar esse tamanho de cache.

Como para a questão específica:Será que a sua operação seja milissegundos mais lento se você usar primitivos versus autoboxing?Isso depende inteiramente do tamanho da lista e como muitas vezes ele é chamado.Deve ser fácil (eu acho!) para testar o primitivo alternativa ao desempenho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top