Mensagens enviadas por: jairelton
Índice dos Fóruns » Perfil de jairelton » Mensagens enviadas por jairelton
Autor Mensagem
Se for pra olhar eficiência de codigo, assembly é uma ótima linguagem.

Porém há mais para se levar em consideração que isso, como robustez, disponibilidade, produtividade, disponibilidade de serviços e ferramentas, entre outras coisas.
Na realidade ele não manteria a referencia da String de 1MB porque o construtor String(char[], int, int) faz uma copia do array antes de armazenar, veja:



Então haveriam 2 char[] na memória, 1 com 1MB e outro com 10K, o de 1MB iria para o limbo logo que o objeto String fosse coletado.
Realmente como disse o maquiavelbona há um mecanismo de otimização do uso de memória na JVM que consiste em um Pool de Strings, quando você cria uma String sem usar o new, primeiro é verificado no Pool de Strings se existe uma String igual à aquela, se sim, não é criada outra, somente referenciada a que já existe, se não, é criada uma nova e adicionada ao Pool.

Ao usar o operador new, obrigatoriamente é criado um novo objeto, para qualquer classe que seja. Então, se você tiver 1000 objetos String com "texto", se você cria-los usando um literal, haverá apenas 1 objeto na memoria e 1000 referencias para ele, se você usar new String("texto") serão criados 1000 objetos e 1000 referencias, uma para cada um.

Outras classes tambem tem algum tipo de otimização, como um cache para valores Integer, se você usar new Integer(1) você criará um novo objeto, se usar Integer.valueOf(1) será usado um que já existe, e ele sempre existe, pois é criado ao carregar a classe Integer, esse cache de Integer funciona de -127 a 128, ou seja, nunca é criado um novo objeto Integer para valores nessa faixa, se você usar Integer.valueOf() claro. Mas essa é uma otimização mais simples que a da String.
Acho que ele sabe o que é polimorfismo Pedro, o que ele está questionando é o motivo pra usar.
Vou dar um exemplo mais pratico pra complementar o que o eltonk falou.

Imagine que a sua aplicação usa um Map, e tem vários métodos que recebem esse Map como parametro, e você decidiu usar a implementação Hashtable, aí ficaria assim:



E você faz isso:




Isso funciona perfeitamente.

Um dia você descobre que a performance de HashMap é melhor que Hashtable porque ele não é sincronizado e você não precisa de sincronismo, então você decide mudar:



Pronto, agora seus 3 metodos pararam de funcionar!

Porem se você tivesse feito assim:



E chamado assim:



Agora você poderia simplesmente mudar o new Hashtable() para new HashMap() que não afetaria em nada o restante do código.

Outro caso seria você ter um metodo que pode processar um List, se você implementar esse metodo recebendo diretamente um ArrayList, você estará obrigando quem usa esse metodo a te passar um ArrayList, se você precisar usar exatamente o mesmo codigo para processar um LinkedList por exemplo, você terá que fazer outro metodo, porque o que você tinha feito processa ArrayList, não LinkedList, sendo que as duas são List.

Por isso, procure sempre trabalhar com os tipos mais genéricos, para você ter flexibilidade de mudança e reutilização de código.

Ok?!!
Mude:



Para:

Usando as tasks do Ant-contrib você pode usar o for, com ant puro eu não sei não:

http://ant-contrib.sourceforge.net/tasks/tasks/for.html
ezellis wrote: queria saber se o synchronized só sincroniza a execução do método para as theads mesmo ou não, sincroniza execução para qualquer objeto?


Só protege contra acesso simultâneo de threads, pois só threads podem executar simultaneamente, se sua aplicação não usa thread ela terá apenas uma linha de execução, e portanto não há necessidade de sincronização pois o código nunca será executado mais de uma vez ao mesmo tempo.
spark wrote: Incrivel como vocês levam para o lado pessoal. Por acaso vcs que fizeram este lixo? Porque estão magoados? Xinguei vocês por acaso?


Pois é, eu não conheço de JSF pra dizer se é bom ou não, mas lendo suas mensagens aqui no forum vi que você é "otimo" pra criticar as coisas sem nenhuma base pra justificar a critica. Eu por exemplo não gosto de Struts, mas não fico por aí "metendo o pau" no framework, pois sei que muita gente usa e tem sucesso com ele, assim como acontece com JSF. Se não está dando certo com você é porque você está fazendo algo errado ou ele não é adequado para o seu projeto, agora simplesmente dizer que é um lixo, que não vale nada, que isso que aquilo... é fazer critica sem saber.

Vai ver que é igual a outra mensagem que você criticava o JDeveloper porque ele disse que você não podia atribuir um valor a uma variavel de uma interface. Você sequer pesquisou pra ver se a mensagem estava correta ou não, sendo que todas as IDEs dão exatamente a mesma mensagem quando você tenta atribuir um valor para uma variável final.

Acho que tem que conhecer bem a tecnologia pra desferir criticas tão duras assim. E principalmente falar "nesse tom" com o pessoal da comunidade que só está tentando ajudar.
spark wrote: Nada a ver esta mensagem de erro... affffffff


Você diz que a tecnologia é um lixo com base é uma mensagem boba dessas?!!!

Não será por acaso você que está fazendo algo errado? Muitíssimo provável.

Tente conferir aí e ver se está tudo ok realmente.
giu wrote: Aproveitando o seu conhecimento, jairelton. E se eu quizer chamar um pdf em vez de uma página html. Existe alguma maneira?


Acho que nesse caso você precisaria de um iframe, porque não dá pra você colocar meia pagina como HTML e meia pagina como PDF, então teria que colocar uma pagina pdf dentro da pagina HTML. Para carregar o PDF no iframe é só setar o atributo src dele dinamicamente.

Algo assim:



Nesse caso eu não tenho não.
Crie um método mais ou menos assim:



E na sua pagina:



Use um Map:



Quando quiser o valor:



http://java.sun.com/javase/6/docs/api/java/util/Map.html
 
Índice dos Fóruns » Perfil de jairelton » Mensagens enviadas por jairelton
Ir para:   
Powered by JForum 2.1.8 © JForum Team