| Autor |
Mensagem |
|
|
uso procps, q vem em 10 entre 10 distros de linux
o teste foi feito no shell da sourceforge, la eles usam redhat valhalla (7.3).
ps aux vai te mostra 2 informacoes referentes ao uso de memoria do teu processo:
vsz -> tamanho da memoria virtual do processo (data + heap + stack), so nao inclui o tamanho das page tables e da struct proc
rss -> resident set size: numero de paginas faulted pelo processo, num pc sao blocos de 4k, ou seja toda memoria que o kernel precisou realmente alocar pro processo.
bom
segui sua sugestao e usei java -Xms, mas primeiro li a documentacao e la diz que o heap minimo tem 1 mega, resolvi entao repetir meu teste, dessa vez num gentoo, java 1.4.1_02 denovo. usei dessa vez foi java -Xms1m -Xmx1m
Mudou, o VZS diminuiu um pouco, o RSS continuou acima dos 7 mega.
Ok, resolvi testar com 1 programa bem simples:
usei javac -g:none -O
resultado:
java a
RSS de 9196 kbytes e 9 threads criadas!!
vamos melhoras?
java -Xmx1m -Xss96k a
RSS de 9180
hmmm
java -Xmx1m -Xss96k -Xint a
RSS de 8112
tentei de tudo, -Xrs diminuiu em 1 o numero de threads...
Ou seja, a nao ser que eu esteja fazendo algum muito errado, java usa pelo menos 7m de memoria so de runtime (8 - 1 de heap), nao vou nem comentar o quao isso piora numa maquina 64 bits.
Quanto ao seu teste com o MLton, qual versao vc usou so por curiosidade? Pq eu nunca tive problemas com ele...
|
 |
|
|
Paulo Silveira wrote:
Lisp eh usado em IA, como prolog, porque fica mil vezes mais legivel, nao porque eh mais rapido! Eu implementei um planejador heuristico em java que da um pau em qualquer um feito em funcional.
Mesmo, oque voce anda usando pra executar suas comparações? Eu experimentei usar compiladores como o MLton, que produzem as vezes resultados melhores que de programas escritos em C com compiladores tradicionais. A questão é vc saber usar a linguagem, poder olhar a versão não linkada e ver oque e pq não gerou codigo eficiente. Linguagens funcionais te permitem gerar codigo pessimisado tanto quanto java ou pior.
Paulo Silveira wrote:
Bastava trocar o GC para as necessdades dele, e fazer com que ele executasse menos ainda que o -server. Outra coisa, lisp tambem tem memory management, se esse clisp tem, eu nao sei, mas se tiver, trocaram 6 por meia duzia.
clist é o lisp moderno, common lisp, a versao ratificada pela iso, ou foi pela ansi?, eles usavam C pq o clisp deles nao permitia usar shm de forma otimizada, entao eles usaram a interface com C para usar blocos grandes, alguns poucos Gb se me recordo bem, de shm de forma eficiente. Isso pq o GC não coletava referencias em memoria fora da area dele, entao eles poderiam ter zilhoes de objetos em memoria sem degradar a performance do GC.
Paulo Silveira wrote:
Conheca as opcoes especiais da VM:
Sim, o Hello do Java gasta menos de um mega, basta conhecer a VM.
acabei de fazer 1 teste bem simples no linux:
e eu vejo a VM usando 7364kb de memoria, memoria MESMO, pq de virtual passa dos 20mb...
ahh, `java -version` diz 1.4.1_02, é a versão da sun por sinal.
Entao me diga que a jvm da sun pra linux é uma grande piada ou me mostre como seu programa pode usar menos memoria que a VM sem executar nada?
Enquanto isso um programinha compilado em caml usa 100kb de memoria e realmente faz algo.
Sem ser hipocrita, minha contra-prova so mostra o custo do runtime do java, que é gigantesco, não vou nem comentar do warm-up time, porem o uso de memoria descontanto esse custo fixo não muda muito em relação a ocalm por exemplo, é a velha historia de usar um Vector com Byte's e byte[] pra armazenar 1.000.000 de bytes.
Paulo Silveira wrote:
Os PLUGINzinhos e SCRIPTS sao feitos em lisp. emacs em si eh em c.
Mas usa de qualquer forma. hehehehe.
Eu não tou falando que java é lento. Na minha opinião, java oferece a melhor relação performance/produtividade.
|
 |
|
|
Eu sigo que so existe uma maneira de aprender nesse ramo, ir contra seus limites.
Eu, por exemplo, ate final de 2001 sabia nada de java, porem ja tinha um pouco de experiencia em c/c++, 2 anos e meio, e via que java tinha muitas qualidades que me pareceram legais, como portabilidade, tipagem forte e linkagem dinamica, entao resolvi aprender java.
Porem, para aprender java nao me bastaria 1 livro porcaria qualqer, pq isso eu já sabia do c++, oque eu precisava era algo que ia alem dos meu limites, então resolvi escrever um servidor em java para um jogo online bem conhecido, ultima online, foi oque eu fiz, aprendi muito desenvolvendo ele, pena que hoje o projeto esta abandonado...
Essa é minha dica, vc so aprende praticando e com coisas que vc NÃO saiba de antemão como fazer.
PS: o projeto, morto agora, fica em tupi.sf.net
|
 |
|
|
Paulo,
Sabia sim, porem eu me referia ao exemplo que o daniel deu apenas, qualquer Throable pode ser catch'ed e como toda excessao em java obrigatoriamente tem que ser subclasse de Throable todas podem ser interceptadas.
So tava advertindo ele disso pq exceptions do tipo Error são como RuntimeException, não são checadas.
Quando a usar 1 banco xml, pode ser e, se quiser, guarde as classes ali usando base64. hehehehehe
|
 |
|
|
Trocando em miudos, se vc nao usar o driver da mysql, vc nao precisa de licença paga, a não ser que voce use o mysql embedded.O driver mm.mysql, que é LGPL, faz exatemente isso.
Pq a GPL diferencia distribuição de uso.
Ou seja, posso distribuir software GPL junto com não-GPL sem problema algum, porem não posso distribuir software não-GPL que use 1 GPL.
E usar o mm.mysql não implica em estar usando mysql uma vez que o driver faz uma conecção tcp.
Mesma coisa com odbc, pq vc vai estar usando o driver da sun pra odbc.
Isso também significa que sem 1 licença comercial vc não pode verder 1 aplicação que vai ser usada com 1 container pago pq o fonte do container não vai estar disponivel, ou seja, não se pode vender uma aplicação GPL para websphere que use o driver da mysql sem ter licença comercial. Curioso, não?
|
 |
|
|
Paulo
Sei de varias empresas que usam clos, porem se voce não considerar lisp como linguagem funcional, por não ser uma linguagem funcional 'pura', eu dou o assunto por acabado pq não sei de cases grande com empresas usando outras linguagens funcionais.
Primeiro programar AI, expert systems em especial eu diria, em lisp da um show em todos aspectos contra qualquer linguagem imperativa, tanto em elegancia quando em performance.
Não vou ter o link comigo, mas lembro de uma empresa que faz booking de passagens aereas que usa clisp para fazer a busca pela melhor opção de voo, mantendo uma interface com C devido ao fato do gc atrapalhar demais quando tinha muita memoria alocada.
E java nao desperdiça toneladas de memoria atoa? Pq meu programinha em mercury usa menos de 1m de memoria enquando 1 hello world do java usa uns 8m pelo menos? E pq eu nao deveria considerar o footprint da VM, afinal, ela é compulsoria no java.
Ahh, vale lembrar do emacs, editor preferido de 1 metade dos usuarios unix...
|
 |
|
|
daniel
estou chocado de onde voce tirou tal afirmação que o mysql é pago para uso comercial!
eu realmente nao consigo achar referencia ao pagamento de valores financeiros no contrato que eu concordei quando passei a usar ele. Eu contratei a versão GPL do produto, que infelizmente me proibe de distribuir versões fechadas de modificações no software do banco.
Pra bancos de dados somente TPC é o benchmark confiavel, www.tpc.org.
Uso diariamente mysql e postgres, nem sou louco de usar firebird, so louco usa software opensource que foi distribuido mais de ano com backdoor que rendia o banco todo ao atacante.
O ruim do mysql é que somente InnoDB suporta transactions e foreigh keys, e a performance é um desastre, principalmente usando transações.
Porem existe a opcao de usar operações atomicas, que são quaaaaaase a mesma coisa...
O ruim do postgres é a falta dos recursos pra alterar tabelas como o mysql tem e tb por ser 1 banco 'over engineered' ao meu ver.
|
 |
|
|
quem te disse que uma linguagem funcional desperdiça muita memoria? isso é um mito da decada de 70. Hoje isso é tao verdade quanto oque falavam sobre java 1.1, lento, pesado demais, ruim de usar.
Se voce usar uma linguagem puramente interpretada, como scheme, provavelmente vai ficar lento mesmo, mas te garanto que vai usar menos memoria que 1 programa em java.
Ja se pegar uma linguagem compilavel em codigo nativo, digo compilavel pq normalmente roda em modo misto, como haskell ou clos isso realmente nao vai existir. Ok, a parte OO do clos joga fora tanta memoria quanto java.
|
 |
|
|
bom
pq alguem pode achar a sintaxe de python, por exemplo, é bem melhor que a de bean shell. ou pq jython é mais rapido que beanshell?
Ou entao pq a linguagem de script usada suporta um dominio especifico de programação;
|
 |
|
|
Carregar classes dinamicamente é uma grande dor de cabeça caso elas não vão estar no classpath. Sem falar que a API de reflection é bem chatinha de usar. Se tiver como usar apenas Class.forName() eu recomendo.
Outra coisa é pra vc desconciderar o codigo que o dukejeffrie postou, ele provavelmente nao sabe do seguinte fato:
Class.forName(xyz);
é a mesma coisa que
Class.forName(xyz, this.getClass().getClassLoader());
Ou seja, a função dele é redundante, pq não faz nada alem do que 1 simples Class.forName() já faz.
Uma coisa que eu realmente recomendaria é separar o codigo de classloading a parte, pq voce pode ter um Linkage error se alguma classe faltar ou tiver assinatura errada, e principalmente, pode rolar 1 ExceptionInInitializerError se o construtor estatico der throw. Sem falar que teu codigo não iria conseguir dar catch nessas exceptions, já que são descendentes de Error.
So não resolva implementar class reloading, pq isso da trabalho!
|
 |
|
|
depende das caracteristicas do conteudo.
por exemplo, se tiver muitas imagens o tomcat vai suar.
Qual SO vc ta usando? Algum outro servico vai rodar nela tb?
|
 |
|
|
bom
ai depende muito
vou basicamente dar um chute, pq vc falou nada sobre a maquina onde o excel vai estar.
Sendo excel, eu chuto que é windows.
Se for windows vc pode usar samba, imagino que samba funcione em 1 as400 apesar de nunca ter usado 1. (www.samba.org)
Se não for usa o meio disponivel de compartilhamento de diretorios disponivel para a plataforma, seja isso nfs, coda, afs, intermezzo, etc...
Ou voce ta falando em disponibilizar o arquivo atravez de 1 programa java?
Nesse caso o mais simples é usar RMI ou sockets puros.
|
 |
|
|
Quem do forum vai???
Alguem vai expor na mostra??
|
 |
|
|
jython é uma implementacao de python usando java. É mais lenta que a implementação em C pq java nao presta pra escrever interpretadores entre outras razoes.
A grande vantagem é que vc pode usar via python todos pacotes do java...
Judo eu desconheco
|
 |
|
|
|
se o commons-digester resolve todo teu problema, nem se aventure em usar sax/dom, eh bem mais simples e pratico que as apis genericas.
|
 |
|
|
|
|