As 5 tecnologias baseadas em Java para aprender em 2008  XML
Índice dos Fóruns » Notícias
Autor Mensagem
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

opinali wrote:
Olá pessoal... o André Santi me chamou a atenção para este thread. Por sinal, é ótimo ver debates deste nível técnico por aqui; mesmo em sites de escopo mais global, 99% da turma só fala bobagem ou superficialidades sobre assuntos como GC.


O legal por aqui é que sempre quando sai p*rr*d*, geralmente sai tb algo de bom do meio. O ideal é pular a parte da p*rr*d* e ir direto ao debate quente mas educado.


(Claro que nesse cenário, salvo bug ou System.gc() explícito, o GC nem deveria acordar para começo de conversa.)


Faça um programa que não libere nenhum objeto para o GC, rode ele com verbose:gc e veja se o GC vai acordar. Aqui no meu linux box ficou rodando por uma hora sem printar nada. Depois fui dormir...


sobre a questão dos wrappers de tipos primitivos em collections. O Doug Lea é dos meus: sempre reclama que a plataforma Java dá um suporte de segunda classe a "tipos escalares"; mesmo com otimizações como o cache de wrappers do Java 5+ (que por sinal é limitado a uma estreita faixa de valores!), o custo dos wrappers, graças à collections "apagadas" onde após a compilação tudo acaba virando Object, é pavoroso. O Doug cita cenários de aplicações forkJoin que ficaram 16 vezes mais lentas (!), só devido ao overhead de wrappers como Integer, em comparação com uma versão usando classes especializadas nos tipos primitivos. Basicamente, a alocação desses wrappers estúpidos - mesmo com alocação e GC "quase grátis" - esculhamba com a eficiência dos caches e tb inúmeras otimizações do JIT, sendo que o efeito é ainda pior em arquiteturas multicore & SMP. E a otimização de Escape analysis, que espero estar mais avançada (com stack allocation) no Java 7, não resolve muita coisa... só serve para problemas triviais, como objetos Iterator usados em loops. Para problemas mais complexos, por exemplo um algoritmo que processa um int[] que em determinado momento tem que ser todo enfiado num Object[] de alguma collection, a tecnologia de escape analysis que existe hoje (mesmo em teoria) não dá pro gasto.


Se vc baixar o openjdk e dar uma olhada no código do SelectorImpl e do EPollSelectorImpl vai ver que o primeiro leak iterator a cada interação e o segundo está explicitamente chamando new Integer(nextFD) também dentro do loop!!!

Uma observação que fiz aqui há alguns posts atrás é que como o loop do selector vai rodar algumas milhares de vezes, pode não demorar muito para termos bilhões de inteiros no cache, no caso de vc mudar para autoboxing e usar o pool de wrappers. Interessante essa sua observação de que esse pool é limitado. Um pool de 4 bilhões de inteiros provavelmente não seria legal...

E a questão de primitivos eu concordo com vc e com o Doug. Já que Java tem primitivos então ela poderia vir de fábrica com collections para primitivos. Aqui nós implementamos nossas próprias collections de primitivos. Parece que Jakarta Commons Collections tb tem algumas. Outra opção seria controlar vc mesmo o pool de Integers, mas para isso vc precisa de um integer mutátvel. Um int[] com tamanho 1 é basicamente isso.

Como falei antes tb, num ambiente single-threaded (NIO), essas estruturas de dados podem ser otimizadas ao extremo e sem qualquer sincronização. Um pool de objeto acaba virando uma simples LinkedList.

This message was edited 4 times. Last update was at 07/02/2008 13:58:27


Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline



Vc é o Osvaldo Pinali ? Aquele que escreveu um artigo para a Java Magazine sobre as novas api concorrentes de Java ???

Cara, aquele artigo foi o mais impressionante que eu já li na minha vida, dada a qualidade técnica e a simplicidade com que vc descreveu e exemplificou um tema extremamente cabeludo.

Parabéns!!! Tenho aquela revista guardada até hoje...

Vc poderia aparecer mais vezes por aqui...

This message was edited 1 time. Last update was at 07/02/2008 13:50:57


Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
opinali
What is classpath?

Membro desde: 07/07/2004 09:08:32
Mensagens: 5
Offline

saoj wrote:
Se vc baixar o openjdk e dar uma olhada no código do SelectorImpl e do EPollSelectorImpl vai ver que o primeiro leak iterator a cada interação e o segundo está explicitamente chamando new Integer(nextFD) também dentro do loop!!!

Uma observação que fiz aqui há alguns posts atrás é que como o loop do selector vai rodar algumas milhares de vezes, pode não demorar muito para termos bilhões de inteiros no cache, no caso de vc mudar para autoboxing e usar o pool de wrappers. Interessante essa sua observação de que esse pool é limitado. Um pool de 4 bilhões de inteiros provavelmente não seria legal...

E a questão de primitivos eu concordo com vc e com o Doug. Já que Java tem primitivos então ela poderia vir de fábrica com collections para primitivos. Aqui nós implementamos nossas próprias collections de primitivos. Parece que Jakarta Commons Collections tb tem algumas. Outra opção seria controlar vc mesmo o pool de Integers, mas para isso vc precisa de um integer mutátvel. Um int[] com tamanho 1 é basicamente isso.

Como falei antes tb, num ambiente single-threaded (NIO), essas estruturas de dados podem ser otimizadas ao extremo e sem qualquer sincronização. Um pool de objeto acaba virando uma simples LinkedList.


Esses códigos como new Integer(...) existem mesmo no JDK, em muitos casos são simplesmente códigos legados (pré-JDK5) que ninguém da Sun ainda percebeu que podia revisar, no caso para tirar proveito do Integer.valueOf(). Talvez isso até ocorra na implementação do método Integer.valueOf(String s, int radix), o qual faz um new, sem delegar para o método que faz o cache. Você pode reportar isso como bug/sugestão, ou tentar corrigir vc mesmo no OpenJDK... Mas nem sempre é o caso. No exemplo de file descriptors, os IDs de arquivos podem ser números inteiros arbitrariamente altos (ou pelo menos bem altos), portanto não haverá muita vantagem em usar o Integer.valueOf() que só faz cache dos valores -127...+128. É um pool BEM limitado, é útil primariamente para índices de arrays pequenos, "magic numbers" como 0, 1 etc., e outros cenários onde é comum trabalhar com valores pequenos. Talvez quem escreveu aquele código de selectors ache que não vale a pena o overhead adicional (ainda que pequeno) de chamar o valueOf(). Por outro lado, face ao custo de abrir um arquivo/socket/etc, esse custo é desprezível, acho que valeria a pena sim evitar a alocação do wrapper, mesmo que numa minoria das vezes.

Note que o pool do Integer (e outros wrappers) não tem sincronização nenbhuma, pois o pool é fixo, sendo preenchido no momento de classloading da classe do wrapper.

Quanto a wrappers mutáveis, eu não gosto muito da idéia, pois são menos seguros para usos como chaves de Map's, atributos de PK de entidades persistentes, e outros cenários comuns que "pedem" por objetos imutáveis.
opinali
What is classpath?

Membro desde: 07/07/2004 09:08:32
Mensagens: 5
Offline

saoj wrote:
Vc é o Osvaldo Pinali ? Aquele que escreveu um artigo para a Java Magazine sobre as novas api concorrentes de Java ???

Cara, aquele artigo foi o mais impressionante que eu já li na minha vida, dada a qualidade técnica e a simplicidade com que vc descreveu e exemplificou um tema extremamente cabeludo.

Parabéns!!! Tenho aquela revista guardada até hoje...

Vc poderia aparecer mais vezes por aqui...


Eu mesmo.. obrigado pelos elogios tentarei aparecer mais, o problema realmente é que eu já escrevo tanto, que sobra muito pouco tempo (ou inspiração) par ficar contribuindo em foruns. Antigamente eu era bem ativo no JavaLobby e algumas listas, mas isso foi antes da JM e NBMag. Hoje até meu blog na java.net está às moscas, se consigo escrever um blog a cada dois meses estou satisfeito.

Por outro lado, quando tropeço numa discussão sobre um assunto como este, dificilmente deixo de cavar tempo para um reply...
opinali
What is classpath?

Membro desde: 07/07/2004 09:08:32
Mensagens: 5
Offline

louds wrote:
Lazy sweeping não é difícil de se implementar, já que opera completamente com memória fora do alcance do mutator step. O problema é implementar compactação ou cópia de forma concorrente ou lazy, que é o motivo pelo qual essa etapa ser stop-the-world no HotSpot.


Isso é verdade. E existem outras maneiras de reduzir as pausas individuais do mark, mas sempre com algum custo, seja no tempo total de GC, seja no custo dos mutators. O algoritmo "train" é um exemplo, o próprio Metronome é outro. Sem falar na RTSJ, que permite reduzir drasticamente o tamanho do heap sujeito a GC convencional, porém com um custo tb de esforço da aplicação.
mfb
Thread.start()

Membro desde: 27/03/2006 08:33:20
Mensagens: 33
Offline

IMHO, tecnologias baseadas em Java interessantes para aprender este ano:

- JRuby
- GRails ( a versão 1.0 foi lançada esta semana)
_rafael
JavaBaby

Membro desde: 13/12/2006 17:29:08
Mensagens: 83
Offline

Marcio Duran wrote:
Daniel Quirino Oliveira wrote:


É desenvolvedor Java há 8 anos, trabalhando atualmente como analista de sistemas para a EDS do Brasil,já tendo participado de diversos projetos Java EE para o setor de transportes, financeiro, e-commerce e telecomunicações. Além disso é coordenador do GUJ ( www.guj.com.br ) e costuma compartilhar seus conhecimentos em seu blog ( http://nullability.org).

Bom, é isso.

[update]:

Duas coisas para se pensar:
- C++ não possui interfaces. Então seria C++ uma linguagem não-OO?
- Java é 100% OO. Seria possível fazer isso então:
??



Bom o Daniel voltou ao assunto, e deu um exemplo de C++ em sua tese de JavaScript, tudo bem....
valeu a tentativa..
..

Ai vai a minha então sobre C++ e Java.

Algumas Linguagem (como C++)permitem que uma classe estenda mais do que uma classe.Essa capacidade é conhecida como "herança múltipla".A razão pela qual os criadores de java decidiram não permitir a herança múltipla é que pode acabar bagunçando o código.

Já ouviu falar no cenário conhecido como o "Diamante da Morte"

Em obserção peço que sinceramente,leia o Capítulo 2:Orientação a objetos.
kATHY SIERRA
BERT BATES





Márcio,

Você escreve "encima", "estenda", um monte de idéias confusas e ainda duvida de tudo que está escrito, provado, testado etc ... Você tem noção do que é networking? Tem noção que você tá se queimando na comunidade Java toda? Não sou de Java, mas todos os desenvolvedores/arquitetos/analistas que conheço, frequentam esse fórum aqui.

Caso a foto aí seja sua mesmo já te adianto: O pessoal ri muito do que você escreve e nunca vai te contratar pra um projeto.
Marcio_Nogueira
JWizard
[Avatar]

Membro desde: 21/05/2007 20:14:54
Mensagens: 2781
Localização: xxxxxxxxxxxxxxxxxxxxxxxxxx
Offline

JEE 6.0
JSF 2.0
JPA 2.0
EJB 3.1
C#
Ruby
Python
É diversão garantida para um bom tempo!

MBA em Desenvolvimento de Sistemas em Ambiente Web
Bacharel em Desenho Industrial / Programação Visual
Marcio Nogueira C. Pinto
[WWW] [Yahoo!] aim icon [MSN] [ICQ]
victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

_rafael wrote:...

Marcio_Nogueira wrote:...


Ressuscitou o tópico.
As 5 tecnologias baseadas em Java para aprender em2008

Já estamos em 2009.

This message was edited 2 times. Last update was at 15/01/2009 11:38:19


Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).


Se você escreve "concerteza", "concerteza" você andou matando aulas de português.
[MSN]
 
Índice dos Fóruns » Notícias
Ir para:   
Powered by JForum 2.1.8 © JForum Team