Garbage Colector vs Unmanaged Memory

7 respostas
J

Boa tarde,

Encontrei algo interessante no guj em um tópico antigo sobre ponteiros. Uma classe para gerência de memória nativa, ou seja, possibilita java usar ponteiros, fazer aritmética dos mesmos, alocar e desalocar memória sem interferência do garbage colector. Esse tópico me deu a idéia de gerar um benchmark entre
System.arrayCopy, e uma classe que implementei, que utiliza esses recursos citados acima, em um método chamado copy memory.

Existe uma boa diferença de performance entre elas, e, pode ser muito útil utilizar a classe Unsafe em partes criticas de um sistema, afim de ganhar performance.

O teste pode ser expandido, para maior objetividade e certeza.


7 Respostas

Alexandre_Saudate

Cara… isso é coisa do demo!!! hahahahahhahah

[]´s

J

asaudate:
Cara… isso é coisa do demo!!! hahahahahhahah

[]´s

???
lidar com apontadores? Imagino que a sun criou essa classe para utilizar em algoritmos de processamentos que exigem performance.

Aka decodificar formatos de audio e vídeo, e/ou imagens…

Alexandre_Saudate

juliocbq:
asaudate:
Cara… isso é coisa do demo!!! hahahahahhahah

[]´s

???
lidar com apontadores? Imagino que a sun criou essa classe para utilizar em algoritmos de processamentos que exigem performance.

Aka decodificar formatos de audio e vídeo, e/ou imagens…

Olha… gosto de seguir a teoria de que, normalmente, a explicação mais simples para algum problema geralmente é a correta. Neste caso, acho que a explicação mais simples é… eles criaram isso porque eles são felizes, porque eles estavam entediados, enfim… =P

[]´s

Dieval_Guizelini

Eu tomaria muito cuidado com os testes de garagem e algoritmos “alternativos”…

Existe uma razão para a API ser mais lenta na cópia do Array, entre elas:

  • controle dos limites
  • thread-safe
  • gerenciamento de memória (rsrs)

E um exemplo de algo parecido na SUN:
http://java.sun.com/docs/books/performance/1st_edition/html/JPNativeCode.fm.html

fw

J

Dieval Guizelini:
Eu tomaria muito cuidado com os testes de garagem e algoritmos “alternativos”…

Existe uma razão para a API ser mais lenta na cópia do Array, entre elas:

  • controle dos limites
  • thread-safe
  • gerenciamento de memória (rsrs)

E um exemplo de algo parecido na SUN:
http://java.sun.com/docs/books/performance/1st_edition/html/JPNativeCode.fm.html

fw

Mas isso é obvio, o que tornaria essa mesma inviável em aplicações que exigem performance, como como captura de vídeo. Como contornar esse problema, se você não possui opção(JMF é horrível para aplicações robustas e dsj não é opensource, nem free)? O que quero dizer?

Quero dizer que a classe Unsafe torna possível contornar alguns inconvenientes do coletor de lixo

EX:
Uma aplicação que precisa capturar vídeo de uma placa e exibí-lo de alguma forma. A parte crítica de uma aplicação como essa está justamente na hora de copiar os bytes de uma área da memória cedida pela placa de captura, para a sua imagem, e depois pinta-la em um contexto gráfico, como graphics 2d. Eis o frame rate.
Com o coletor de lixo trabalhando descontroladamente(não se tem controle do GC), esse tipo de aplicação congela a todo instante, na plataforma java.

Outro uso para isso seria resolver o problema do cacheiro viajante em tempo hábil. Imagina se um sistema de navegação automática, de um avião, tivesse que congelar alguns segundos, por causa do coletor de lixo, ou porque System.arrayCopy perde tempo em checar n coisas desnecessárias, para deixar sua execução “segura”(segura entre aspas. Se sabe muito bem que uma exceção como IndexOutOfBound danifica toda área do programa, na máquina virtual) ?

O vini godoy e eu vinhamos conversando sobre isso já a algum tempo, e sobre poder usar esse tipo de artifício, quando necessário, como em c#. Essa classe torna isso possível.

J

asaudate:
juliocbq:
asaudate:
Cara… isso é coisa do demo!!! hahahahahhahah

[]´s

???
lidar com apontadores? Imagino que a sun criou essa classe para utilizar em algoritmos de processamentos que exigem performance.

Aka decodificar formatos de audio e vídeo, e/ou imagens…

Olha… gosto de seguir a teoria de que, normalmente, a explicação mais simples para algum problema geralmente é a correta. Neste caso, acho que a explicação mais simples é… eles criaram isso porque eles são felizes, porque eles estavam entediados, enfim… =P

[]´s

Acredito que o centro de pesquisa da sun não tem esse perfil.

Alexandre_Saudate

juliocbq:
asaudate:
juliocbq:
asaudate:
Cara… isso é coisa do demo!!! hahahahahhahah

[]´s

???
lidar com apontadores? Imagino que a sun criou essa classe para utilizar em algoritmos de processamentos que exigem performance.

Aka decodificar formatos de audio e vídeo, e/ou imagens…

Olha… gosto de seguir a teoria de que, normalmente, a explicação mais simples para algum problema geralmente é a correta. Neste caso, acho que a explicação mais simples é… eles criaram isso porque eles são felizes, porque eles estavam entediados, enfim… =P

[]´s

Acredito que o centro de pesquisa da sun não tem esse perfil.

Ô pessoa mais sem senso de humor, viu…

Criado 5 de fevereiro de 2010
Ultima resposta 8 de fev. de 2010
Respostas 7
Participantes 3