Java consumindo menos memória que uma página do Gmail?

Eu estava vendo o status do projeto Pivot e algo me chamou a atenção: uma aplicação Java no navegador está consumindo menos que o meu GMail aberto. O mesmo vale para outras páginas. Vejam abaixo as evidências disso:

Total da aplicação Java(aproximadamente) = 1 + 48 + 11 + 12 = 72;
Gmail = 90 (sem contar a parte do Browser em sí)

Estamos falando de uma aplicação de demonstração de uma tecnologia, ou seja, contém todos os possíveis componentes do Pivot. Mais uma coisa, o navegador também estava consumindo muito mais, eu estava levando em conta só o processo do GMail, lembrando que ele precisa do chrome, que “come” mais um pouquinho. Um outro ponto importante é que eu mexi na aplicação para caramba para garantir que ela estaria usando tudo(várias instâncias já criadas) e não era somente um uso de memória da aplicação aberta. Depois de um tempo mexendo, o uso de  memória parou nesse valor (aprox. 48 mb), mas começou com em torno de 20 mb.

Não sou advogado do diabo, mas isso deve ser levado em conta na hora de escolher sua tecnologia e hoje com a volta do cliente rico Java (através do JavaFX), o desenvolvedor tem tudo que necessita em suas mãos.  Isso sem contar que teoricamente o JavaFX seria mais leve (e vai melhorar, pois será parte do Java 8) que o Pivot, pois contém uma API gráfica melhorada e recursos de aceleração gráfica(quando necessários).

Pense nisso!

OBS: Obviamente esse post não é sobre uma comparação mega profissional com todos os parâmetros e “testes de fogo” com as tecnologias. Não é também uma mega propaganda para o Java e nem um “flame”. A idéia é que antes essas aplicações Java “engoliam” memória e hoje a situação é outra: Java está muito mais leve!

Anúncios

Executando suas aplicações Pivot no Eclipse

Já conhecia o Pivot desde que a Apache tornou ele um projeto top, mas a postagem do Luiz_Gustavo no Guj sobre a versão 2.0 da tecnologia RIA da Apache, me fez relembrar e também testá-lo!

Ao tentar executar os exemplos no Eclipse, tive que configurar um parâmetro. Então, se quiser executar coisas do Pivot no Eclipse, ai vai um pequeno guia.

  • Primeiro, crie um projeto Java comum (desktop).
  • Adicione os JARS do Pivot ao classpath do seu projeto
  • Existem duas classes que permite rodar suas aplicações no Eclipse: org.apache.pivot.wtk.DesktopApplicationContext e org.apache.pivot.wtk.ScriptApplication. Eu uso a primeira enviando o nome da classe que será executada como parâmetro. Abaixo prints da minha configuração para executar uma classe onde chamo os meus bxmls (arquivos XMLs com a interface com o usuário). Importante é que a classe enviada deve implementar a interface org.apache.pivot.wtk.Application.
  • Pode executar agora, deve funcionar! Se sua aplicação for Java puro, como o Hello World do Pivot (abaixo), só executar essa classe e enviar o nome dela (não se esquecendo dos pacotes) como parâmetro:
    package hello;
    import java.awt.Color;
    import java.awt.Font;
    
    import org.apache.pivot.collections.Map;
    import org.apache.pivot.wtk.Application;
    import org.apache.pivot.wtk.Display;
    import org.apache.pivot.wtk.HorizontalAlignment;
    import org.apache.pivot.wtk.Label;
    import org.apache.pivot.wtk.VerticalAlignment;
    import org.apache.pivot.wtk.Window;
    
    public class HelloJava implements Application {
    	private Window window = null;
    
    	@Override
    	public void startup(Display display, Map<String, String> properties) {
    		window = new Window();
    
    		Label label = new Label();
    		label.setText("Hello World!");
    		label.getStyles().put("font", new Font("Arial", Font.BOLD,150));
    		label.getStyles().put("color", Color.GREEN);
    		label.getStyles()
    				.put("horizontalAlignment", HorizontalAlignment.CENTER);
    		label.getStyles().put("verticalAlignment", VerticalAlignment.CENTER);
    
    		window.setContent(label);
    		window.setTitle("Hello World!");
    		window.setMaximized(true);
    
    		window.open(display);
    	}
    
    	@Override
    	public boolean shutdown(boolean optional) {
    		if (window != null) {
    			window.close();
    		}
    		return false;
    	}
    
    	@Override
    	public void suspend() {
    	}
    
    	@Override
    	public void resume() {
    	}
    }
    
  • Para rodar os xmls eu uso uma classe Java, que peguei nos tutoriais do Pivot, e uso a classe org.apache.pivot.beans.BXMLSerializer para carregar ela na minha window. Existe outra forma de fazer isso usando a ScriptApplication do Pivot, mas ainda não procurei saber como faz….
    package basicComponents;
    
    import org.apache.pivot.beans.BXMLSerializer;
    import org.apache.pivot.collections.Map;
    import org.apache.pivot.wtk.Application;
    import org.apache.pivot.wtk.Display;
    import org.apache.pivot.wtk.Window;
    
    public class Runner implements Application {
    	private Window window = null;
    
    	@Override
    	public void startup(Display display, Map<String, String> properties)
    			throws Exception {
    		BXMLSerializer bxmlSerializer = new BXMLSerializer();
    		String toRun = "oSeuBxmlAqui.bxml";	
    
    		window = (Window) bxmlSerializer.readObject(Runner.class, toRun);
    		window.open(display);
    	}
    
    	@Override
    	public boolean shutdown(boolean optional) {
    		if (window != null) {
    			window.close();
    		}
    
    		return false;
    	}
    
    	@Override
    	public void suspend() {
    	}
    
    	@Override
    	public void resume() {
    	}
    }
    

É isso. Espero que seja útil pra alguém!

[EDIT]

O usuário Molmedo, do Guj, mostrou outra forma para executar suas aplicações sem precisar mexer nas configurações do Eclipse:

public static void main(String[] args) {  
     DesktopApplicationContext.main(SuaClasse.class, args);  
}