/ / Existe um problema de desempenho usando uma variável temporária? - java, desempenho

Existe um problema de desempenho usando uma variável temporária? - java, desempenho

Eu tenho uma pergunta sobre a criação de novo objeto em java.

Vamos dizer que eu tenho methos chamado: foo(String[] a)

Eu quero passar para foo um novo String[] isso é apenas para um uso o que é melhor para

desempenho 1 ou 2

1.

String[] a = new String[]{"a"};

foo(a);

2.

foo(new String[]{"a"});

Obrigado por ajudar

Respostas:

8 para resposta № 1

Você pode verificar o bytecode:

1.

  public static void main(java.lang.String[]);
Code:
0: iconst_0
1: anewarray     #2                  // class java/lang/String
4: astore_1
5: aload_1
6: invokestatic  #3                  // Method foo:([Ljava/lang/String;)V
9: return

2.

  public static void main(java.lang.String[]);
Code:
0: iconst_0
1: anewarray     #2                  // class java/lang/String
4: invokestatic  #3                  // Method foo:([Ljava/lang/String;)V
7: return

A única diferença é que, em (2), nenhuma referência é armazenada (astore_1) e nenhum precisa ser carregado (aload_1) Isso certamente não causará uma diferença de desempenho (e você não deve se preocupar com essas otimizações minúsculas de qualquer maneira), mas você também pode usar a opção (2) se não quiser fazer referência a novamente no programa (como você mencionou em seu comentário) e não há violação de legibilidade.

Eu acho que o componente de legibilidade é bastanteimportante: eu preferiria criar uma variável para armazenar a matriz (mesmo que nunca faça referência a essa variável mais de uma vez) do que ter uma linha super longa e ilegível. Obviamente, no seu exemplo, não há problema de legibilidade. , mas é algo a considerar quando surgirem situações mais complicadas.


3 para resposta № 2

Ter variáveis ​​locais temporárias posso ajude o desempenho se você os usar para armazenar valores freqüentemente usados ​​e caros de calcular. Para valores únicos, eles ainda podem ser uma grande ajuda para nomeação um valor e deixando clara sua intenção - e o custo de desempenho será absolutamente insignificante.

Ter ou não ter uma variável para armazenar umo valor único é irrelevante em termos de desempenho, concentre seus esforços nas partes do código destacadas como gargalos por um criador de perfil e não perca seu tempo em micro otimizações irrelevantes. E é mais importante escrever código fácil de entender, lembre-se ... "a otimização prematura é a raiz de todo mal".


1 para resposta № 3

Não acho que seja possível responder definitivamente à pergunta de uma maneira geral. Até a resposta do arshajii mostrando a IL é limitada.

No seu código, o compilador JIT otimizará isso de qualquer maneira.

O nível de otimização dependerá muito de coisas como versão, plataforma, implementação e um milhão de outras variáveis.

... agora, se você tivesse uma cerca de leitura entre os dois, para que a instabilidade não pudesse otimizá-los, você teria uma história diferente.