| Autor |
Mensagem |
|
|
Saiu agora a pouco:
att
|
 |
|
|
Senhores,
apenas para registrar,
refiz o parser utilizando expressões regulares na maior parte do código e a coisa se inverteu, os tempos ficaram em:
OpenSDK 5.037s
Sun: 3.557s
Ou seja, a biblioteca de expressões regulares da Sun possui um desempenho melhor que a versão do OpenSDK.
fw
|
 |
|
|
Opa valeu Vinicius (parabéns, hoje que vi que você se tornou moderador),
Entanglement, a aplicação que descrevi e que ficou quase 25% mais rápida, não utiliza xml. O programa utiliza muita substring, expressões regulares, comparações etc.
abs
|
 |
|
|
Senhores,
desenvolvi um programa que realiza o parser em um arquivo texto que possui o tamanho de 51Mb e tem várias peculiaridades (não é XML).
Estava executando ele no Ubuntu 9.1 com a versão da Sun: Java SDK/JRE versão Sun 1.6.0_20-b02 e Java HotSpot 64 Bit Server VM (build 16.3-b01)
Resolvi fazer um teste com o OpenSDK: OpenJDK Runtime Enviroment (IcedTea6 1.6.1 ? 6b16-1.6.1-3ubuntu3) e OpenJDK 64 bit Server VM (build 14.0-b16)
A diferença de performance (medida com o comando time do linux) foi de:
Sun: real 23.248s user: 24.070s e sys: 1.910s
OpenJDK: real 18.617s user 22.340s e sys 1.570s
Os parâmetros para as VM foram as mesmas: -d64 -server -Xms1024m -Xmx1024m
Alguém sabe se o OpenSDK está confiável para por em produção? Alguém já está utilizando ele em ambiente web com o tomcat 6?
Valeu
|
 |
|
|
Senhores,
apenas por curiosidade, alguém já leu alguma coisa sobre a Oracle querer mudar os nomes dos pacotes interno do java de sun.* para oracle.*?
Será que JCP (http://www.jcp.org/en/home/index) irá conseguir manter o prefixo sun.?
fw
|
 |
|
|
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
|
 |
|
|
Uma outra forma de pensar...
Pegue a parte fracionária e multiplique pelo denominador....
Ex:
4 / 40 = 0,1
logo o resto é
0,1 * 40 = 4.
Se fosse 48 / 40 = 1,2, certo?
pegue a parte fracionário (que é o resto) e multiplique pelo denominador:
0,2 * 40 = 8
Bom na teoria é legal, mas se tentar trabalhar com número de ponto flutuante em Java, você deverá compreender melhor o conceito de mantissa e o padrão IEEE 754.
Especificação do Java: http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html
fw
|
 |
|
|
Oi,
eu tenho usado esse código com o JFileChooser, talvez te ajude (veja que crio uma thread, e no main eu faço chamada do método init para quando eu precisar do JFileChooser ele já está criado):
E os métodos básicos:
Para saber mais:
Example Depot
http://www.exampledepot.com/egs/javax.swing.filechooser/CreateDlg.html
leepoint
http://leepoint.net/notes-java/GUI/containers/20dialogs/30filechooser.html
Sun tutoriais
http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html
API
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFileChooser.html
fw
|
 |
|
|
Opa,
veja bem, só use banco em ISO-8859-1 em último caso...
Sobre codificação o melhor post sobre assunto é esse aqui:
http://www.guj.com.br/posts/list/12456.java
fw
|
 |
|
|
Essa regra eu compreendo,
tanto que se tentar passar algo assim:
o erro ocorre nos métodos find também... mas o problema está na combinação do primeiro termo com os demais... veja que Key e Value não geram a mesma falha...
certo?
|
 |
|
|
Senhores,
não compreendi a regra do uso de generics para esse caso, vejam a situação:
Código baseado no exemplo http://www.guj.com.br/posts/list/66036.java
E observe que se você declarar outros métodos sem o uso de generics, dessa forma:
o compilador aceita... somente quando se usa dois ou mais tipos passados por parâmetros...
A questão aqui é compreender a regra da aplicação do generics, alguém sabe?
vw
|
 |
|
|
Se compreendi bem o seu problema,
você quer criar um wrapper que intercepta tudo que sua aplicação enviar para o Stream padrão de saída...
algo como:
Bom, isso o código abaixo faz, ou seja, você pode direcionar no programa todo o Stream de saída para um arquivo:
[url]PrintStream newps = new PrintStream(new FileOutputStream("saida.txt"));
System.setOut(newps);
[/url]
Se quer algo mais complexo, tem essa classe no código do tomcat:
Segue um link:
http://www.jexamples.com/vSrc/3088/org.apache.tomcat.util.log.SystemLogHandler?prodId=tomcat&lineNo=67&implExtId=165448&queryText=java.util.Stack.new&qType=clsMeth
Bom para usar o log4j, o seu wrapper pode fazer isso tb...
fw
|
 |
|
|
Ou Rock.it,
o arquivo MANIFEST fica dentro do arquivo JAR da sua aplicação. Se quiser conferir, renomeia o arquivo teste.jar para teste.zip e abra com qualquer descompactador.
A configuração do classpath no MANIFEST evita ter que criar um arquivo bat ou (.sh shell script) com os parametros de classpath e referenciando as dependências.
A recomendação do uso do NETBEANS é que essas configurações são realizadas automaticamente... no Eclipse, você tem que configurar o projeto e o build....
Com relação aos drivers do postgresql ou de qualquer banco, normalmente deve-se copiar junto com a aplicação, você pode incluí-los no jar (existe uma configuração do ant para isso, mas não me lembro direito...).
De qualquer forma, existe boas razões para o jar do driver ficar na pasta lib da aplicação e não dentro do jar, entre elas, destaco:
1) tamanho do jar da sua aplicação
2) atualização dos drivers sem a necessidade de rebuild da aplicação
Por outro lado, como você está executando:
Devemos considerar que não está utilizando um jar, apenas o bytecode compilado (extensão .class). Quando o seu projeto crescer, certamente terá mais de uma classe e ai fica bastante chato copiar os arquivo .class para rodar a sua aplicação. Neste ponto você certamente irá utilizar o jar que encapsula todos os class dentro de um formato jar (zip). E para executá-lo (quando o MANIFEST estiver adequado), você irá utilizar:
Tutoriais para jar no eclipse:
http://www.fsl.cs.sunysb.edu/~dquigley/cse219/index.php?it=eclipse&tt=jar&pf=y
Nesse você pode ver o item 6.1
http://www.vogella.de/articles/Eclipse/article.html
fw
|
 |
|
|
São várias perguntas...
vamos por parte:
um arquivo properties geralmente é utilizado para armazenar as configurações da aplicação, ele normalmente é um mapa de strings (chave = valor).
No java, você pode usar os arquivos properties para facilitar a internacionalização da aplicação, como exemplo, veja o programa SwingSet2 que deve estar na pasta demo/jfc (que vem junto com o jdk). Ou então, veja esses links:
http://java.sun.com/developer/technicalArticles/Intl/ResourceBundles/
http://java.sun.com/docs/books/tutorial/i18n/resbundle/propfile.html
ou em:
http://java.sun.com/javase/technologies/core/basic/intl/faq.jsp
Com relação as actions e funcionamento dos botões, acho que você deve compreender primeiro o seguinte esquema.
Em uma linguagem por Eventos (Delphi, VB), quando o usuário clica em um botão, o SO envia para a aplicação um evento para ela tratar. Em linguagem OO não se espera esse tipo de operação diretamente. No java, ocorre o seguinte. Cria-se um "listener" (uma thread de baixa prioridade (ver mais em EventQueue - http://java.sun.com/j2se/1.4.2/docs/api/java/awt/EventQueue.html) que fica esperando o clique), quando essa thread detectar a ação ela irá executar um procedimento específico do seu código. O método a ser chamado deve implementar a interface ActionListener.
Bom o código do netbeans nesse caso não é muito bom, veja o que ele está fazendo:
No comando botao.addActionListerner ele adiciona um listener para executar a ação do botão, observe que pode existir mais de um listener para o mesmo botão. O listener nesse caso é uma instância da classe anônima criada no meio do código, dessa forma:
Observe que os comandos que você colocar dentro do método actionPerformed poderão acessar as propriedade e métodos da sua classe (mesmos os private), por ser parte da classe, na realidade por ser uma classe interna (inner class - http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html).
Acho que agora você compreende como funciona o fluxo de execução, em resumo:
1. O usuário clica em um botão, o SO gera uma notificação, a VM inclui essa notificação como um Event no EventQueue do Swing;
2. O Swing informa (invoca) todos os listener registrados.
3. A implementação do método actionPerformed é de sua responsabilidade e nele que você irá chamar ou executar a action especifica.
Com relação ao exemplo do @Action que é uma anotação incluída no Java 5, você irá compreender melhor aqui:
http://java.sun.com/developer/technicalArticles/javase/swingappfr/
Bom eu falei que o exemplo do NetBeans é ruim, veja duas possibilidade um pouco melhor:
Fazer com que a sua classe que especializa de um JFrame ou JDialog implement o ActionListener e ai você coloca assim a referência dos botões:
Segunda forma (melhor ainda):
Cria uma classe a parte que implementa a ActionListener e você cria uma instância dela dentro da sua classe Frane. E cada Action em classes separadas ao invés do código espaguete...
Tem um tutorial bom de um artigo do Fernando Lozano (http://www.lozano.eti.br/artigos.html)
att
|
 |
|
|
Provavelmente deve ser um problema de classpath como indicado pelo Marcio,
você pode configurar no arquivo MANIFEST para fazer isso:
Exemplo:
Se você utilizar o netbeans, quando se inclui um jar no projeto ele faz a referência automática na construção do projeto e cria o jar da sua aplicação e copia os jars de dependência para a pasta lib dentro da pasta dist.
Para iniciantes, eu acho mais fácil que ficar configurando os pluggins do eclipse.
att
|
 |
|
|