É possível mudar o comportamento coleta de lixo em Java ME?

votos
2

Eu queria saber se é possível ajustar as obras do coletor de lixo maneira em JavaME, a fim de melhorar o desempenho de alguma forma (pode reduzir o número de passagens)? Tenho visto alguns artigos sobre o assunto, mas principalmente dirigido Java SE ea maioria deles diz GC é altamente dependente do fabricante. Como muito do que seria.

Publicado 27/11/2008 em 19:09
fonte usuário
Em outras línguas...                            


3 respostas

votos
3

Quando o coletor de lixo é acionado é em grande parte um mistério a menos que tenha conhecimento em primeira mão de como o particular VM sua aplicação está em execução no foi implementado e exatamente como ele foi configurado e customizado para o telefone específico que você está usando.

Chamando java.lang.System.gc () há garantia de que o coletor de lixo é acionado. Em geral, ele simplesmente aumenta a probablility da coleção lançamento de lixo VM muito em breve.

Eu descobri que chamar System.gc () 3 vezes consecutivas no mesmo segmento, mas a partir de 3 métodos diferentes tende a funcionar razoavelmente bem.

Há muitas maneiras de contornar ineficiencies nas implementações de API padrão JavaME, a fim de reduzir a quantidade de lixo que você gera:

  • Estender ByteArrayOutputStream para que você não criar uma cópia da matriz de bytes quando você quiser acessar os dados.

  • Evite chamar StringBuffer.getChars () e StringBuffer.toString (). fazer o seu trabalho de código com deslocamentos StringBuffer e comprimentos vez.

  • transformar buffers locais (byte [], StringBuffer ...) em instância ou variáveis ​​estáticas (e protegê-los com sincronizados). Obviamente, há uma sobrecarga para fazer isso, mas ele pode impedir que seu aplicativo congelamento devido à coleta de lixo com muita freqüência.

  • Estender StringBuf para evitar mudança e para trás entre a corda e StringBuf: implementar de acréscimo (String, offset, comprimento), parselnt (int), indexOf (String, índice), substituição (offset, StringBuf, offset, comprimento) ...

...

Respondeu 28/11/2008 em 13:06
fonte usuário

votos
1

Eu não vejo qualquer maneira possível para ajustar o comportamento de coleta de lixo em J2ME.

Se você tiver problemas com pausas induzidas por coletas de lixo, você tem que fazer duas coisas:

  • Reduzir o lixo que o seu programa produz, por objetos reutilização, e evitar coisas caras como concatenações de corda (use StringBuffer em vez disso)
  • Use System.gc () para forçar a coleta de lixo quando um pouco congelamento não importa (por exemplo, durante a tela de "carregamento" de um jogo), para reduzir as chances de que o processo de coletor é acionado quando é chato.
Respondeu 27/11/2008 em 19:21
fonte usuário

votos
0

Obrigado por todas as pessoas de entrada. Já vi Ele'não é possível ajustar o GC para Java Me dispositivos capazes. Pelo menos não de maneira fácil ou útil. Vou deixar essa questão em aberto de qualquer maneira, no caso de este cenário muda de alguma forma no momento. :)

Respondeu 11/12/2008 em 13:57
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more