ENTENDENDO A PERFORMANCE
|
|
- Armando Mendes Castilho
- 8 Há anos
- Visualizações:
Transcrição
1 FACULDADE LOURENÇO FILHO Curso de Ciência da Computação José Tiago Ribeiro Filho ENTENDENDO A PERFORMANCE EM APLICAÇÕES JAVA Fortaleza Ceará Dezembro de 2010
2 FACULDADE LOURENÇO FILHO Curso de Ciência da Computação José Tiago Ribeiro Filho ENTENDENDO A PERFORMANCE EM APLICAÇÕES JAVA Monografia apresentada ao Curso de Ciência da Computação da Faculdade Lourenço Filho, como requisito parcial para obtenção do grau de Bacharel em Ciência da Computação. Orientador: Prof. MSc. João Frederico Roldan Viana. Fortaleza Ceará Dezembro de 2010
3 FACULDADE LOURENÇO FILHO Curso de Ciência da Computação Título do Trabalho: Entendendo a performance em aplicações java Autor: José Tiago Ribeiro Filho Banca Examinadora João Frederico Roldan Viana, MSc. (FLF) Orientador André Barros Pereira, MSc. (FLF) 1º Membro Francisco Nauber Góis, MSc. (FLF) 2º Membro Aprovado em 21 de Dezembro de 2010.
4 É melhor tentar e falhar, que preocupar-se e ver a vida passar. É melhor tentar, ainda que em vão que sentar-se, fazendo nada até o final. Eu prefiro na chuva caminhar, que em dias frios em casa me esconder. Prefiro ser feliz embora louco, que em conformidade viver. Martin Luther King.
5 AGRADECIMENTOS Agradeço em primeiro lugar a Deus, origem da vida e fonte de sabedoria. A meus pais pelo estímulo em todos os momentos, e educação a mim dada. A meus irmãos que sempre que precisei estiveram ao meu lado. Ao professor Frederico Viana, pelo incentivo constante e pela segura orientação. E a todos aqueles que, direta ou indiretamente, contribuíram para a elaboração desta monografia. Muito Obrigado.
6 RESUMO A monografia traz a definição de performance computacional, focando desempenho em aplicações desenvolvidas em Java, explica aspectos importantes que influenciam no desempenho tais como: utilização da memória RAM, tempo de inicialização, escalabilidade e a performance percebida pelo usuário do sistema. Apresenta uma técnica muito importante para medição de desempenho, chamada benchmark de desempenho, explica o quanto o seu uso pode auxiliar o desenvolvedor a ter um acompanhamento de possíveis mudanças de desempenho no processo evolutivo da aplicação. Fornece uma visão sobre algoritmos e estruturas de dados, como sua escolha pode influenciar muito na velocidade de um software, define garbage collection, sua importância para bom funcionamento da aplicação e traz uma visão sobre arquitetura da maquina virtual HotSpot.
7 ABSTRACT The monograph has a definition of computational performance, focusing on performance in applications developed in Java, explains important aspects influencing the performance such as: use of RAM, startup time, scalability and performance as perceived by the user of the system. Presents a very important technique for measuring performance, called performance benchmark, explains how their use can help the developer to have a monitoring of possible changes in performance in the evolutionary process of the application. Provides an overview on algorithms and data structures, such as your choice can greatly influence the speed of a software defined garbage collection, its importance for proper functioning of the application and provides an insight into the architecture of the HotSpot virtual machine.
8 SUMÁRIO 1 INTRODUÇÃO Motivação Objetivos Estrutura da Monografia DEFINIÇÕES DE PERFORMANCE Performance computacional Utilização de memória RAM Tempo de inicialização Escalabilidade Performance Percebida TÉCNICAS PARA MEDIR PERFORMANCE Benchmarking Profiling Usando Hprof e Perfanal RELAÇÃO DE PERFORMANCE COM A IMPLEMENTAÇÃO DE ALGORITIMOS RELAÇÃO DE PERFORMANCE COM ESTRUTURAS DE DADOS PARTICULARIDADES DO JAVA Garbage collection Java HotSpot Virtual Machine CONCLUSÃO REFERÊNCIAS BIBLIOGRAFICAS
9 LISTA DE FIGURAS Figura 1 Representação da memória Usada, Livre e o total perante o HEAP da JVM Figura 2 Gerenciador de Tarefas do Windows XP Figura 3 Sistema Não Escalar Figura 4 Sistema Escalar Figura 5 Comparação entre Desempenho computacional e Performance percebida Figura 6 Técnica de sincronização Figura 7 Simula o teste do cronômetro Figura 8 Recriação da classe teste com o uso da classe cronômetro Figura 9 Método recursivo para inverter String Figura 10 Exceção lançada após estouro de pilha Figura 11 Diagrama de classe Figura 12 Fábrica de Sincronismo Figura 13 Benchmark para testar o desempenho de diversos tipos de coleções Figura 14 Arquitetura da maquina virtual
10 9 1 Introdução O presente trabalho irá discorrer sobre desempenho de aplicações desenvolvidas na linguagem Java, irá definir o que é performance e como ela é percebida pelo usuário, apresentará boas práticas para o desenvolvedor não sofrer com perca de desempenho, assim como utilizar técnicas e ferramentas para medir a velocidade da aplicação e se existem objetos ou métodos consumindo muitos recursos de memória, apresentará vantagens e desvantagens de se utilizar algumas estruturas de dados bem como algoritmos e explicará a importância do coletor de lixo na performance final do software. 1.1 Motivação A motivação para discorrer sobre este assunto é auxiliar aos desenvolvedores que trabalham com a linguagem Java a entender os malefícios de uma aplicação mal estruturada, fazer com que passe a observar o todo e não só uma pequena parte do código quando se está em fase de desenvolvimento, adquirir o hábito de realizar testes de desempenho e sempre buscar a excelência em se tratando de velocidade do software. Hoje em dia devido à grande complexidade de funcionalidades exigidas quando se desenvolve um software, torna-se cada vez mais importante a otimização do tempo de processamento ao realizar tarefas. O que acontece é que grande parte dos desenvolvedores de softwares ainda não atentaram para o estudo e analise de como melhorar o tempo de processamento de uma aplicação. Um tempo perdido a mais no planejamento do software para escolher os algoritmos e estruturas de dados adequadas para cada tarefa pode ser revertido em ganho de performance e tempo mais a frente
11 10 no decorrer do projeto, pois reduzirá tempo e gastos com refatoração de código para tentar melhorar o desempenho do sistema. 1.2 Objetivos O objetivo deste trabalho é explicar o que é desempenho e qual a importância de ter uma aplicação com grau satisfatório de performance, assim como ensinar técnicas para medir a velocidade de métodos, algoritmos e estrutura de dados usados quando se desenvolve na linguagem Java. 1.3 Estrutura da Monografia Esta monografia está dividida em seis capítulos. O primeiro traz a introdução, motivação e a estrutura deste trabalho; o segundo capítulo aborda a performance, utilização de memória RAM e como pode-se medir o seu consumo em aplicações Java; trata também de tempo de inicialização e escalabilidade bem como a performance percebida pelo usuário quando está usando um sistema; o terceiro capítulo trata de técnicas para medir desempenho quando se está desenvolvendo um sistema, explica o que é benchmark e como fazer uso dele para melhorar a aplicação, explica a importância de ferramentas de perfis e apresenta dois tipos que acompanham a plataforma Java; no quarto capítulo é explicado como a escolha errada do algoritmo pode influenciar no produto final do software; No quinto capítulo serão apresentadas algumas estruturas de dados utilizadas no Java, bem como suas vantagens, desvantagens e onde elas podem ser melhor aproveitadas; por último o sexto capítulo explica como funciona o coletor de lixo, sua importância e o que ele afeta em se tratando de desempenho de uma aplicação; descreve também a máquina virtual Hotspot, desenvolvida pela Sun, explicando um pouco de sua arquitetura e ensinando alguns parâmetros de configuração da mesma.
12 11 2 Definições de Performance 2.1 Performance Computacional Performance computacional, ou desempenho computacional, é um termo que se refere afim de descrever uma metodologia onde analisa-se o sistema com o objetivo de melhorar a capacidade de produção, eliminando ações desnecessárias que reduzem a capacidade computacional global do sistema (MANGAN, 2008, p.2). Capacidade computacional é á quantidade total de trabalho útil que pode ser realizado em um sistema em um determinado período fixo de tempo. São planilhas recalculadas, os relatórios gerados, os trabalhos de impressão, a rotação de uma imagem 3D, ou apenas jogando paciência se o sistema não é bloqueado (MANGAN, 2008, p.2). Os algoritmos implementados pelos desenvolvedores assim como a estrutura de dados escolhida são alguns dos principais fatores que podem afetar o desempenho global de uma aplicação. Acontece que isso é apenas uma parte no quadro de desempenho para quem quer realmente produzir um software de alta performance. Para compreender os diferentes tipos de problemas que podem ser encontrados na hora do desenvolvimento, devem-se considerar todos os diferentes aspectos do desempenho computacional (WILSON, 2001, p.3). Além da Performance computacional temos: Utilização da Memória RAM Tempo de inicialização
13 12 Escalabilidade Performance Percebida 2.2 Utilização da Memória RAM A quantidade de memória necessária para executar o software pode ser de uma importância crucial para o desempenho global do sistema. Todos os sistemas operacionais modernos fornecem um sistema de memória virtual onde o espaço em disco pode ser utilizado no lugar de uma RAM física. Contudo mesmo o disco mais rápido, é muito mais lento que o modulo de memória mais lento com isso os aplicativos acabam forçando o Sistema Operacional a ter um fraco desempenho na paginação da memória virtual. É muito comum um sistema ter um bom desempenho na época de desenvolvimento e esse desempenho cair quando é implantado no cliente (WILSON, 2001, p.53). Isso pode ocorrer porque muitas vezes os desenvolvedores possuem uma maquina mais robusta que as do usuário, consequentemente um software que roda mais confortavelmente na maquina do desenvolvedor, pode vir a ter um fraco desempenho no terminal do usuário. É preciso desenvolver o software com uma configuração alvo em mente, algumas medidas devem ser pensadas antes de começar a desenvolver algum software, tem que se imaginar que a sua aplicação poderá não ser a única em execução na maquina do usuário, usuários geralmente mantém duas ou três aplicações rodando ao mesmo tempo, Não é interessante que um programa consuma todos os recursos da maquina do usuário. A API Java contém alguns mecanismos que ajudam a descobrir quanto de memória RAM seu programa esta consumindo.
14 13 Existem dois métodos na classe Java.lang.Runtime que ajudam a dar uma idéia de quanta memória esta sendo consumida, esses métodos verificam o tamanho do Heap na maquina virtual Java (WILSON, 2001, p.53). Runtime.totalMemory retorna o tamanho (em bytes) da pilha usada para alocar os objetos. Runtime.freeMemory retorna a quantidade de memória que não esta sendo usada na pilha de objetos Para descobrir se os objetos estão consumindo muito espaço na memória é feito um calculo simples, subtrai-se a memória livre do total de memória como demonstrado na figura 1. Figura 1: Representação da memória Usada, Livre e o total perante o HEAP da JVM. Fonte: Wilson, 2001 Esse método de inspeção de memória e útil em varias situações, como para averiguar o uso da pilha do programa em intervalos regulares de tempo a fim de descobrir se está ocorrendo vazamento de memória se o uso da pilha fica aumentando ao longo do tempo.
15 14 O Java não fornece nenhum método para verificar a velocidade do programa, para medir com precisão a velocidade do seu aplicativo Java é preciso apelar para utilitários específicos de uso do Sistema Operacional. O Windows XP, por exemplo, fornece uma ferramenta chamada Gerenciador de tarefas que nos fornece informações do uso de memória pelos processos que estão em execução (ver Figura 2). Figura 2: Gerenciador de Tarefas do Windows XP Fonte: Elaborado pelo autor Vários outros fatores contribuem também para o desempenho do sistema e um melhor aproveitamento da memória e devem ser analisados com muita calma pelo desenvolvedor (WILSON, 2001,p.53). Objetos Classes Tópicos Estrutura Nativa de Dados Código Nativo
16 15 O consumo de memória relativa desses itens varia de acordo com a aplicação, plataforma ou ambiente de execução, porém objetos e classes requem um pouco mais de atenção, pois normalmente são os que consomem mais memória, o seu consumo varia de aplicativo para aplicativo. Por exemplo, aplicações desktop que utilizam interfaces gráficas, as classes tendem a utilizar mais a memória da maquina-cliente pelo fato de que para iniciar uma interface gráfica sejam necessárias várias classes, já uma aplicação web utiliza a memória mais com objetos, pois geralmente criamos mais objetos para trafegarem as informações entre a Web (WILSON, 2001,p.53). 2.3 Tempo de Inicialização Historicamente os sistemas desenvolvidos em Java possuem um tempo de inicialização mais lento (WILSON, 2001, p.24). O tempo de inicialização de um aplicativo é medido pelo tempo que ele leva para levantar o serviço, carregar e ficar pronto para o usuário utilizar, isso inclui tanto o tempo de inicialização da JVM como do aplicativo Java em si. Para medir o tempo de inicialização de uma aplicação Java o desenvolvedor pode fazer uso de dois métodos contidos na API Java (ORACLE, 2009, p.26-3). System.nanoTime(): retorna um valor em nano segundos. (recupera o valor do Sistema Operacional). System.currentTimeMillis(): retorna o tempo atual em milissegundos. O Tamanho da pilha também influencia no tempo de inicialização da JVM e da aplicação, isso porque a máquina virtual reserva um espaço na memória para o tamanho máximo da pilha (-Xmx) e compromete a memória com o tamanho da pilha inicial (-Xms).(ORACLE, 2009, p. 10-2).
17 16 Para aplicações de grande porte é inevitável ter essas duas variáveis definidas com valores muito altos, mas para uma aplicação de pequeno ou médio porte valores altos podem ocasionar uma lentidão desnecessária na inicialização da máquina virtual. Por outro lado se a pilha está definida com um valor muito pequeno ela vai ocasionar uma sobrecarga na inicialização da maquina virtual, consequentemente forçará a mesma a realizar constantes coletas de lixo ate que a pilha tenha crescido a um tamanho razoável. 2.4 Escalabilidade Escalabilidade é a capacidade de o sistema permanecer operando de forma efetiva mesmo diante de um aumento significativo do número de usuários ou/e de recursos disponíveis. É uma característica almejada por todos que estão desenvolvendo um sistema e está ligada ao desempenho da aplicação (MOREIRA, 2009, p.3). A aplicação pode ter um ótimo desempenho quando enfrenta a concorrência de 100 acessos simultâneos mais será que ela conseguirá suportar um aumento de acessos na ordem 100 vezes. As figuras 3 e 4 mostram a diferença de tempo entre um sistema escalar e um não escalar. Figura 3: Sistema Não Escalar Fonte: Wilson, 2001
18 17 Figura 4: Sistema Escalar Fonte: Wilson, 2001 O tempo de resposta sofre um aumento quase que exponencial quando o número de usuários do sistema cresce em uma aplicação Não Escalar o que torna praticamente inviável o seu uso. (figura 3) Já em um sistema Escalar, o aumento no tempo de resposta é bem menor, devido à sua característica de se readaptar de acordo com a demanda (figura 4). Faz-se necessário antes de implantar um sistema no cliente, sempre submetê-lo a testes de Desempenho com uma carga aproximada de acessos concorrentes para que se tenha uma real noção de seu desempenho quando o mesmo realmente estiver em pleno funcionamento. É importante estar ciente dos principais problemas de escalabilidade e desenhar um sistema que esteja preparado para um eventual crescimento futuro, existem algumas boas praticas no Java que ajudam a construir uma aplicação preparada para expansão um deles é o encapsulamento que Craig Larman (2003) define como: um mecanismo usado para ocultar os dados, a estrutura interna e detalhes de implementação de um objeto
19 18 O encapsulamento propõe que se isole a estrutura interna dos Objetos do resto do programa, por isso seu uso é muito aconselhado em sistemas escalares e de alto desempenho, a vantagem que ele traz é de se poder avaliar rapidamente diferentes algoritmos e estruturas de dados, como também evoluir facilmente o projeto para acomodar requisitos novos ou alterados (WILSON, 2001, p.12). 2.5 Performance Percebida Performance percebida esta ligada com a percepção do ser humano sobre o desempenho do software, muitas pessoas da área de tecnologia da informação confundem desempenho computacional com performance percebida, esses são dois estudos diferentes enquanto o desempenho computacional age mais em cima do desempenho do software(apesar de poder afetar o usuário em si), a percepção de performance pensa somente no usuário (MANGAN, 2008, p2). O processo de reflexão e análise do desempenho percebido tem vários objetivos. A figura 5 retrata as diferenças entre desempenho computacional e performance percebida. Figura 5: Comparação entre Desempenho computacional e Performance percebida Fonte: Mangan, 2008
20 19 3 Técnicas para Medir Performance 3.1. Benchmarking Benchmarking é o processo de comparação de operações de uma maneira que produza resultados quantitativos. Ele desempenha um papel fundamental para garantir uma boa execução do software. Os processos a serem comparados podem ser desde dois algoritmos diferentes que produzem o mesmo resultado, ou duas maquinas virtuais executando o mesmo código (WILSON, 2001, p.21). O aspecto fundamental do benchmarking é a comparação. Um único resultado produzido por ele não tem muito valor, só é válido quando ocorre a comparação. Benchmarks tipicamente medem a quantidade de tempo que se leva para realizar uma tarefa específica, mas também podem ser usadas para medir outras variáveis tais como a quantidade de memória necessária para realizar determinada tarefa. Existe uma técnica de benchmarking simples e útil que pode ser usada para medir o desempenho de um software. Chama-se Cronômetro Benchmarking. Como o próprio nome já sugere, essa técnica consiste em medir a performance com um cronômetro na mão e apesar de não ter a precisão de milissegundos, ela é bastante útil em diversas situações, como as listadas abaixo (WILSON, 2001, p.21). Medir quanto tempo demora ao lançar um aplicativo Medir o tempo que se leva para abrir um documento grande Medir o tempo que se leva para percorrer uma tabela muito grande de dados
21 20 Medir quanto tempo leva para executar uma consulta de uma tabela de banco de dados complexa. A tabela abaixo faz um comparativo das vantagens e desvantagens de usar o cronometro benchmarking na medição de desempenho de um software: Prós Fácil Não precisa modificar fonte código ou a utilização de instrumentos complexos de software Não vai distorcer os resultados Contras Pode ser Impreciso Difícil de automatizar os testes Sujeito a erro humano Outra técnica recomendada para uma ampla variedade de situações é a de adicionar a funcionalidade de sincronismo ao código que está sendo avaliado. No Java existe a classe java.lang.system que contem vários métodos estáticos uteis incluindo um método chamado currenttimemillis. Esse método retorna uma variável do tipo long que contém o número de milissegundos que se passaram desde a meia noite do dia 01 de janeiro de Portanto para usar esse método para descobrir quanto tempo uma determinada parte do código demora a ser executada, é necessário armazenar o tempo antes e após a seção de código que se quer testar, e depois subtrair o tempo final do inicial. A figura 6 mostra o exemplo dessa técnica em uma classe Java (WILSON, 2001, p.21).
22 21 Figura 6: Técnica de sincronização Fonte: Elaborado pelo autor Essa técnica essencialmente é o mesmo que usar um cronômetro exceto que o computador inicia e para o relógio automaticamente e também faz com que o teste fique automatizado, o que acaba reduzindo o percentual de erro no resultado do teste. Uma boa prática para esse tipo de técnica consiste no encapsulamento, ou seja, criar uma classe que emule o comportamento do cronômetro (figura 7) e fazendo uso dela na parte de código que se deseja testar, isso facilitará a vida do desenvolvedor alem de seguir um dos princípios da Orientação a Objeto que é reutilização de código, pois não terá que replicar o mesmo tipo de teste em diferentes partes do programa e também exclui possíveis erros que poderiam vir a acontecer por desatenção na hora de escrever o teste. A figura 8 demonstra como ficaria o teste anterior, agora fazendo uso de uma classe cronômetro.
23 22 Figura 7: Simula o teste do cronômetro Fonte: Elaborado pelo autor
24 23 Figura 8: Recriação da classe teste com o uso da classe cronômetro Fonte:Elaborado pelo autor Existem várias ferramentas de benchmarks criados pelas comunidades de desenvolvedores Java, projetados para comparar implementações em tempo de execução que podem ser uteis na hora de testar o desempenho de um software. Alguns exemplos dessas soluções são (WILSON, 2001, p.21): SpecJvm2008 desenvolvido pela Standard Performance Evaluation Corporation (SPEC) é utilizado para medir o desempenho de diferentes maquinas virtuais Java. VolanoMark desenvolvido pela Volano, permite determinar a conexão e as limitações de desempenho do hardware, sistema operacional e plataforma Java. SciMark desenvolvido por Roldan Pozo e Bruce Miller, tem como finalidade medir o desempenho de códigos numéricos que ocorrem na engenharia e aplicações cientificas. CaffeineMark desenvolvido pela Pendragon Software Corporation, consiste em uma serie de testes que medem a velocidade dos programas Java rodando em vários hardwares e softwares de configurações diferente.
25 24 Embora essas soluções sejam ótimas para avaliar a aplicação em tempo de execução, faz-se necessário a criação de benchmarks específicos para avaliar o desempenho do software, ou seja, que testem seu próprio código, as vantagens desse tipo de abordagem são que se pode comparar desempenho de soluções alternativas, acompanhar o desempenho e realizar a analise de tendência ao longo do ciclo de desenvolvimento. A comparação, aliás, é o uso mais óbvio dos benchmarks personalizados, por exemplo, quando o desenvolvedor precisa escolher entre dois algoritmos para implementar determinada função, então ele pode criar um ponto de referência e comparar as duas soluções. Uma das grandes vantagens dos benchmarkings é que se pode acompanhar e analisar as tendências do programa ao longo do desenvolvimento, com isso ao adicionarmos novas funcionalidades ou corrigirmos erros encontrados no meio desse processo, pode-se facilmente descobrir o quanto a aplicação ficou mais lenta e ter o real controle de onde isso está ocorrendo. Benchmarks podem ser divididos em duas categorias, microbenchmarks e macro-benchmarks (WILSON, 2001, p.21): Micro-Benchmarks são micro-pontos de referência que muitas vezes podem ser escritos em poucas linhas de código e são tipicamente muito fáceis de descrever. Macro-Benchmarks Realizam testes no sistema como o usuário final vai vê-lo. Para construí-lo é preciso entender como o cliente irá utilizar o produto. Saber analisar e interpretar os resultados gerados nos testes é essencial, é preciso ter em mente que eles geralmente variam de execução para execução, para facilitar a analise é recomendável realizar diversas tiradas de tempo, após colher os dados com tempos diferentes precisa-se realizar a analise estatística, existem muitos tipos de estatísticas que podem ser uteis,
26 25 mas é recomendável que se determine três números chaves, para o melhor caso, pior caso e processo médio, para informar o pior caso basta pegar o pior tempo, o melhor caso pega-se o melhor tempo e o processo médio tira-se uma media do tempos colhidos. Como benchmark sustenta-se em comparações deve-se fazê-las ao logo do desenvolvimento do sistema para que possa acompanhar as mudanças de desempenho Profiling Profiling é uma forma dinâmica de analisar um determinado programa, ou seja, é uma forma de investigar o comportamento de um programa usando informações recolhidas após a execução do mesmo. O objetivo dessa análise é detectar quais seções de um programa precisam ser otimizadas, seja para aumentar a velocidade geral ou diminuir o uso da memória, ou ás vezes ambos. Ferramentas de profiling devem ser capazes de responder algumas perguntas, tais como: quais os métodos que são utilizados com maior frequência, quais métodos estão chamando os métodos mais utilizados, quais o métodos estão alocando mais memória, qual a percentagem de tempo que cada método e utilizado. Essas ferramentas são na maioria das vezes ricas em interfaces e permitem que possa escolher que tipo de teste deseja-se realizar. Profiling pode ajudar ao desenvolvedor identificar se existe algum método critico na aplicação, se este esta tomando a maior parte do tempo de processamento da mesma, então o desenvolvedor poderá direcionar seu esforço para melhorar o desempenho do método avaliado (WILSON, 2001, p.21). Existem dois tipos de abordagens para otimizar a aplicação a qual o desenvolvedor pode fazer uso quando descobre onde esta ocorrendo a queda de desempenho do sistema (WILSON, 2001, p.21). Fazer com que métodos que sejam utilizados com maior frequência tornem-se mais rápidos
27 26 Fazer com que métodos mais lentos sejam chamados com menor frequência. Muitas vezes programadores partem logo para a primeira alternativa, sendo que às vezes é mais fácil descobrir o porquê do método ser chamado com muita freqüência e com isso tentar diminuir o numero de vezes que esse método é acessado. Ferramentas de profiling são interessantes para descobrir o quanto de objetos seu programa tem, e quanto os mesmos estão consumindo de memória, fazendo com que o programador tente minimizar a criação de objetos, muitas vezes a uma relação entre métodos que utilizam muitos objetos e métodos que são chamados várias vezes na aplicação, sempre é bom verificar se todos os objetos criados no método são realmente necessários. Um exemplo comum de criação de muitos objetos em um método e que com o uso dessas ferramentas o programador pode minimizar é quando um método cria um objeto dentro de um laço de repetição, a cada interação será criado um novo objeto, e esse vai sendo alocado na pilha de objetos da jvm fazendo com que o desempenho da aplicação caia, podendo gerar até um estouro de pilha, movendo a criação para fora do laço faz com que o consumo de memória seja reduzido. O vazamento de memória também é um dos problemas críticos quando se está desenvolvendo um sistema, vazamento de memória ocorre quando a memória é alocada, mas não é liberada, embora a maquina virtual Java seja responsável pela liberação de memória através do garbage collector, a mesma não garante que horas isso ocorrerá, o que pode atrapalhar o desempenho do sistema (WILSON, 2001, p.21). O isolamento do vazamento de memória pode ser uma tarefa muito difícil, é ai que o uso de profiling pode tornar-se uma arma a favor do desenvolvedor, as ferramentas são bastante uteis para: Acompanhar o numero de instâncias de todas as classes em determinado momento.
28 27 Isolar um determinado objeto e ver todas as referências que apontam pra ele. Coleta manual de lixo perdido. A primeira etapa para isolar o vazamento é colocar o programa em um estado de stress, ou seja, testá-lo com sua capacidade máxima, após isso, deve-se realizar varias operações para certificar-se se todos os tempos gastos na inicialização foram computados e que todos os objetos necessários foram carregados, após isso retorna o programa ao estado normal, e faz-se um comparativo de desempenho quando o mesmo estava submetido a sua capacidade máxima. Depois, deve-se usar uma ferramenta de análise para determinar o numero de anomalias existentes em cada classe, com o resultado da analise em mãos deve-se fazer o uso da ferramenta de profiling para processar todo o lixo disponível. Então, volta-se a usar o sistema em modo de stress e depois em modo normal, para que sejam feitas novas comparações, se terminado os testes os tempos de processamento e desempenho continuarem quase iguais é sinal que a limpeza de lixo foi bem sucedida Usando HPROF e PERFANAL Hprof é uma ferramenta de profiling para criação de estatísticas sobre o desempenho da CPU e da pilha, ele é um agente incorporado a JVM que é carregado dinamicamente através de linha de comando na sua inicialização e torna-se processo da mesma. Ao fornecer opções HPROF na inicialização, os usuários podem solicitar vários tipos de pilha e / ou recursos de CPU profiling HPROF. Os dados gerados podem ser em forma de texto ou binário, e podem ser usados para rastrear e isolar problemas de desempenho que envolve o uso de memória e de código ineficiente. O arquivo de formato binário do HPROF pode ser usado com ferramentas como HAT (Heap Analysis Toll) para procurar os objetos alocados no HEAP (O'HAIR, 2004). A partir da versão cinco do J2SE o HPROF passou a ser implementado na nova JVM TI (Java Virtual Machine Tool Interface), ele é
29 28 capaz de apresentar estatísticas sobre alocação da pilha e monitorar os perfis de contenção. Perfanal é uma ferramenta baseada em GUI (Interface Gráfica para Usuário) para analisar o desempenho de aplicações na plataforma Java, ele é usado para identificar problemas de desempenho no código e localizar o código que precise de ajustes, ela é uma ferramenta livre, licenciada pela GPL (MEYERS, 2000). O Perfanal tem a característica de simplificar bastante a analise do desempenho por que ele interpreta os dados do perfil analisado e informa o custo total dos métodos, ele apresenta os resultados em forma de gráfico o que ajuda a análise.
30 29 4 Relação de Performance com Implementação de Algoritmos Escolher o algoritmo correto é um fator primordial para obter-se um grande desempenho da aplicação, se escolher o algoritmo errado todo o ajuste feito por menor que seja não produzirá ganho de desempenho satisfatório. Um algoritmo pode ter diferentes comportamentos para diferentes aplicações, ele pode ser eficiente para algumas situações e deficiente para outras. Não existem algoritmos que sejam bons para todos os tipos de situações, deve-se analisar o algoritmo de acordo com o objetivo que se deseja alcançar e escolher a solução que proporcionar melhores resultados. Para facilitar esse tipo de escolha deve-se fazer uso de técnicas para comparação de soluções como a já mencionada Benchmark, após decidir qual algoritmo usar, deve-se levar o espaço do problema em consideração. Espaço do problema é um conjunto de problemas com os quais o algoritmo será apresentado, em outras palavras são as situações com o qual o algoritimo irá se deparar para que consiga resolver um determinado problema. Muitas vezes pode-se atingir a solução mais eficiente restringindo o algoritmo a tratar apenas o problema do espaço definido em vez de usar o algoritmo mais geral, ou seja, o que o programa não vai fazer é tão importante quanto ao que o programa faz. Algoritmos recursivos podem ser usados em muitos casos para resolver problemas lineares complexos, mas ela pode ser uma pratica não muito recomendada em se tratando de algoritmos com muitas chamadas a função recursiva, com isso ocorre o aumento de consumo de memória e consequentemente a performance da aplicação diminui.
31 30 Cada chamada sucessiva de uma função recursiva cria um novo quadro de pilha, se a função é chamada muitas vezes também pode fazer com que o programa funcione com a memória sobrecarregada. O exemplo disso é o algorítimo usado para inverter uma string (figura 9) Figura 9: Método recursivo para inverter String Fonte: Elaborado pelo autor Se passarmos uma seqüência muito grande de strings para o algoritmo inverter ele pode gerar um erro de estouro de pilha (stackoverflowerror) conforme a figura 10. Figura 10: Exceção lançada após estouro de pilha Fonte: Laskowski, 2010 Algoritmos não são apenas soluções bem definidas para tarefas normais, ao construir uma aplicação o desenvolvedor deve sempre perder um tempo a mais para analisar o algoritmo correto que utilizará, pois a escolha
32 31 errada no começo pode fazer com que todo o sistema tenha um desempenho não satisfatório.
33 32 5 Relação de Performance com Estruturas de Dados A seleção de estrutura de dados adequada é tão importante quanto a escolha do algoritmo. As estruturas de dados são normalmente conhecidas como vetores, listas, filas etc. A plataforma Java possui suas próprias implementações para algumas estruturas tais como ArrayList (listas), LinkedList (filas) SortedList( lista ordenada). Todas essas classes são implementações da interface Collection (coleções). Coleção é um objeto que agrupa múltiplos elementos em uma única unidade e são usadas para armazenar, recuperar e manipular dados. Ela também é usada para transmitir dados a partir de um método para outro. Coleções normalmente representam itens de dados que formam um grupo natural, tais como (WILSON, 2001, p.122). Coleção de carros em uma concessionária. Coleção de livros de uma biblioteca. Coleção de animais em um zoológico. A sua estrutura de uma coleção é composta de uma arquitetura unificada para representar e manipular coleções trazendo a vantagem de reduzir o esforço de programação, aumentando a performance. A estrutura foi projetada para: Promover o reuso de software. Reduzir o esforço na concepção e de aprender novas APIs. Habilitar a coleta de dados a ser manipulado independente da sua representação. Facilitar a interoperabilidade entre APIs independentes.
34 33 Coleções oferecem uma alta performance aliada com uma implementação de ótima qualidade das estruturas de dados, coleções ajudam a melhorar a qualidade e desempenho do software (WILSON, 2001, p.122). Por ser uma estrutura pronta e desenvolvida para que o programador não utilize seu tempo implementando funcionalidades para melhorar o desempenho, ou seja, reescrevendo uma estrutura que já existe e está otimizada. O uso dela acaba facilitando a vida do desenvolvedor para que ele utilize o seu tempo para dedicar-se a melhoria da qualidade e desempenho do resto da aplicação. Sua estrutura e baseada em seis interfaces como demonstrado no diagrama de classes contido na figura 11. Figura 11: Diagrama de classe Fonte: Elaborado pelo autor Cada tipo de estrutura de dados se adéqua mais a determinado tipo de tarefa, entender o que cada estrutura de dados faz ajuda ao desenvolvedor na escolha de qual será a melhor para resolver seu problema, conseqüentemente ajudará a obter um maior desempenho da aplicação. Para algumas interfaces, a estrutura oferece múltiplas implementações concretas. A lista (List) é uma interface que estende de Coleção, ela é ordenada e pode conter elementos repetidos, ao usar uma lista o desenvolvedor tem o pleno controle sobre onde cada elemento é inserido,
PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software
PROCESSO DE DESENVOLVIMENTO DE SOFTWARE Introdução Modelos de Processo de Desenvolvimento de Software Os modelos de processos de desenvolvimento de software surgiram pela necessidade de dar resposta às
Leia maisSistemas Operacionais
Sistemas Operacionais Aula 6 Estrutura de Sistemas Operacionais Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso
Leia maisNa medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.
1 Introdução aos Sistemas de Informação 2002 Aula 4 - Desenvolvimento de software e seus paradigmas Paradigmas de Desenvolvimento de Software Pode-se considerar 3 tipos de paradigmas que norteiam a atividade
Leia maisISO/IEC 12207: Gerência de Configuração
ISO/IEC 12207: Gerência de Configuração Durante o processo de desenvolvimento de um software, é produzida uma grande quantidade de itens de informação que podem ser alterados durante o processo Para que
Leia maisOrientação a Objetos
1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou
Leia maisSistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com
Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,
Leia maisHardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)
Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,
Leia maisO CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE
O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE Renan Leme Nazário, Ricardo Rufino Universidade Paranaense (Unipar) Paranavaí PR - Brasil renazariorln@gmail.com, ricardo@unipar.br Resumo. Este artigo
Leia maisProf. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO
Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.
Leia maisIntrodução à Linguagem Java
Introdução à Linguagem Java Histórico: Início da década de 90. Pequeno grupo de projetos da Sun Microsystems, denominado Green. Criar uma nova geração de computadores portáveis, capazes de se comunicar
Leia maisIFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira
IFPE Disciplina: Sistemas Operacionais Prof. Anderson Luiz Moreira SERVIÇOS OFERECIDOS PELOS SOS 1 Introdução O SO é formado por um conjunto de rotinas (procedimentos) que oferecem serviços aos usuários
Leia maisPrevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki
Prevayler Perola André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Prevayler é a implementação em Java do conceito de Prevalência. É um framework que prega uma JVM invulnerável
Leia maisProfessor: Curso: Disciplina:
Professor: Curso: Disciplina: Aula 1 Turma: Esp. Marcos Morais de Sousa Sistemas de informação Engenharia de Software I Dinâmica da disciplina, plano de curso e avaliação 03º semestre Prof. Esp. Marcos
Leia maisENGENHARIA DE SOFTWARE I
ENGENHARIA DE SOFTWARE I Prof. Cássio Huggentobler de Costa [cassio.costa@ulbra.br] Twitter: www.twitter.com/cassiocosta_ Agenda da Aula (002) Metodologias de Desenvolvimento de Softwares Métodos Ágeis
Leia maisMetodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi
Metodologias de Desenvolvimento de Sistemas Analise de Sistemas I UNIPAC Rodrigo Videschi Histórico Uso de Metodologias Histórico Uso de Metodologias Era da Pré-Metodologia 1960-1970 Era da Metodologia
Leia maisAlgoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br
(Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução
Leia mais10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO
10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO UMA DAS GRANDES FUNÇÕES DA TECNOLOGIA É A DE FACILITAR A VIDA DO HOMEM, SEJA NA VIDA PESSOAL OU CORPORATIVA. ATRAVÉS DELA, ELE CONSEGUE
Leia maisMÓDULO 9 METODOLOGIAS DE DESENVOLVIMENTO DE SISTEMAS
MÓDULO 9 METODOLOGIAS DE DESENVOLVIMENTO DE SISTEMAS O termo metodologia não possui uma definição amplamente aceita, sendo entendido na maioria das vezes como um conjunto de passos e procedimentos que
Leia maisCapítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho
20 Capítulo 3 Avaliação de Desempenho Este capítulo aborda como medir, informar e documentar aspectos relativos ao desempenho de um computador. Além disso, descreve os principais fatores que influenciam
Leia maisBRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:
BRAlarmExpert Software para Gerenciamento de Alarmes A TriSolutions conta com um produto diferenciado para gerenciamento de alarmes que é totalmente flexível e amigável. O software BRAlarmExpert é uma
Leia maisSatélite. Manual de instalação e configuração. CENPECT Informática www.cenpect.com.br cenpect@cenpect.com.br
Satélite Manual de instalação e configuração CENPECT Informática www.cenpect.com.br cenpect@cenpect.com.br Índice Índice 1.Informações gerais 1.1.Sobre este manual 1.2.Visão geral do sistema 1.3.História
Leia mais3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio
32 3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio Este capítulo apresenta o framework orientado a aspectos para monitoramento e análise de processos de negócio
Leia maisPlanejando o aplicativo
Um aplicativo do Visual FoxPro geralmente inclui um ou mais bancos de dados, um programa principal que configura o ambiente de sistema do aplicativo, além de uma interface com os usuários composta por
Leia maisSistemas Distribuídos
Sistemas Distribuídos Modelo Cliente-Servidor: Introdução aos tipos de servidores e clientes Prof. MSc. Hugo Souza Iniciando o módulo 03 da primeira unidade, iremos abordar sobre o Modelo Cliente-Servidor
Leia maisUNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação
SOFT DISCIPLINA: Engenharia de Software AULA NÚMERO: 10 DATA: / / PROFESSOR: Andrey APRESENTAÇÃO O objetivo desta aula é apresentar e discutir os conceitos de coesão e acoplamento. DESENVOLVIMENTO Projetar
Leia maisItinerários de Ônibus Relatório Final
CENTRO UNIVERSITÁRIO SENAC Itinerários de Ônibus Relatório Final Grupo 5 Caio Roque Daniel Nunes Elise Roese José Caneiro Marcos Grignani São Paulo Junho de 2007 1 ÍNDICE 1. Introdução... 3 2. Desenvolvimento...
Leia maisAspectos técnicos do desenvolvimento baseado em componentes
Aspectos técnicos do desenvolvimento baseado em componentes Um novo processo de desenvolvimento O uso de componentes traz mudanças no processo de desenvolvimento Além de desenvolver um produto, queremos
Leia maisProcessos e Threads (partes I e II)
Processos e Threads (partes I e II) 1) O que é um processo? É qualquer aplicação executada no processador. Exe: Bloco de notas, ler um dado de um disco, mostrar um texto na tela. Um processo é um programa
Leia maisGerenciamento de Problemas
Gerenciamento de Problemas O processo de Gerenciamento de Problemas se concentra em encontrar os erros conhecidos da infra-estrutura de TI. Tudo que é realizado neste processo está voltado a: Encontrar
Leia maisConceitos Básicos de Rede. Um manual para empresas com até 75 computadores
Conceitos Básicos de Rede Um manual para empresas com até 75 computadores 1 Conceitos Básicos de Rede Conceitos Básicos de Rede... 1 A Função de Uma Rede... 1 Introdução às Redes... 2 Mais Conceitos Básicos
Leia maisNotas da Aula 17 - Fundamentos de Sistemas Operacionais
Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.
Leia maisTRABALHO COM GRANDES MONTAGENS
Texto Técnico 005/2013 TRABALHO COM GRANDES MONTAGENS Parte 05 0 Vamos finalizar o tema Trabalho com Grandes Montagens apresentando os melhores recursos e configurações de hardware para otimizar a abertura
Leia maisOTIMIZAÇÃO E PERFORMANCE DE BANCO DE DADOS UTILIZANDO SQL TUNING
OTIMIZAÇÃO E PERFORMANCE DE BANCO DE DADOS UTILIZANDO SQL TUNING Jéssica Correa dos Santos¹, Alexandre Paulino Sierra da Silva¹ ¹Universidade Paranaense (Unipar) Paranavai-PR-Brasil jessica_07correa@hotmail.com,
Leia maisSISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores
SISTEMAS OPERACIONAIS Maquinas Virtuais e Emuladores Plano de Aula Máquinas virtuais Emuladores Propriedades Benefícios Futuro Sistemas de Computadores Os sistemas de computadores são projetados com basicamente
Leia maisEsta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi
5 Conclusão Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi permitir que scripts Lua instanciem e usem
Leia maisEscalonamento no Linux e no Windows NT/2000/XP
Escalonamento no Linux e no Windows NT/2000/XP 1 Escalonamento no Linux Os requisitos do escalonador do Linux eram: Apresentar boa performance em programas interativos, mesmo com carga elevada; Distribuir
Leia maisMetodologia e Gerenciamento do Projeto na Fábrica de Software v.2
.:: Universidade Estadual de Maringá Bacharelado em Informática Eng. de Software III :. Sistema de Gerenciamento de Eventos - Equipe 09 EPSI Event Programming System Interface Metodologia e Gerenciamento
Leia mais5 Mecanismo de seleção de componentes
Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações
Leia maisGlossário Apresenta a definição dos termos, siglas e abreviações utilizadas no contexto do projeto Citsmart.
Apresenta a definição dos termos, siglas e abreviações utilizadas no contexto do projeto Citsmart. Versão 1.6 15/08/2013 Visão Resumida Data Criação 15/08/2013 Versão Documento 1.6 Projeto Responsáveis
Leia maisSistemas Operacionais
Sistemas Operacionais Gerenciamento de Memória Norton Trevisan Roman Marcelo Morandini Jó Ueyama Apostila baseada nos trabalhos de Kalinka Castelo Branco, Antônio Carlos Sementille, Paula Prata e nas transparências
Leia maisDesenvolvendo Websites com PHP
Desenvolvendo Websites com PHP Aprenda a criar Websites dinâmicos e interativos com PHP e bancos de dados Juliano Niederauer 19 Capítulo 1 O que é o PHP? O PHP é uma das linguagens mais utilizadas na Web.
Leia maisAULA 5 Sistemas Operacionais
AULA 5 Sistemas Operacionais Disciplina: Introdução à Informática Professora: Gustavo Leitão Email: gustavo.leitao@ifrn.edu.br Sistemas Operacionais Conteúdo: Partições Formatação Fragmentação Gerenciamento
Leia maisEverson Scherrer Borges João Paulo de Brito Gonçalves
Everson Scherrer Borges João Paulo de Brito Gonçalves 1 Tipos de Sistemas Operacionais Os tipos de sistemas operacionais e sua evolução estão relacionados diretamente com a evolução do hardware e das
Leia maisSistemas de Informação I
+ Sistemas de Informação I Processo de software I Ricardo de Sousa Britto rbritto@ufpi.edu.br + O que é Engenharia de Software n Definição dada pela IEEE [IEE93]: n Aplicação de uma abordagem sistemática,
Leia maisSistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com
Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação
Leia maisReferências internas são os artefatos usados para ajudar na elaboração do PT tais como:
Plano de Teste (resumo do documento) I Introdução Identificador do Plano de Teste Esse campo deve especificar um identificador único para reconhecimento do Plano de Teste. Pode ser inclusive um código
Leia maisARCO - Associação Recreativa dos Correios. Sistema para Gerenciamento de Associações Recreativas Plano de Desenvolvimento de Software Versão <1.
ARCO - Associação Recreativa dos Correios Sistema para Gerenciamento de Associações Recreativas Versão Histórico da Revisão Data Versão Descrição Autor Página
Leia maisSistema de Controle de Solicitação de Desenvolvimento
Sistema de Controle de Solicitação de Desenvolvimento Introdução O presente documento descreverá de forma objetiva as principais operações para abertura e consulta de uma solicitação ao Setor de Desenvolvimento
Leia maisPlano de Gerenciamento do Projeto
Projeto para Soluções Contábeis 2015 Plano de Gerenciamento do Projeto Baseado na 5ª edição do Guia PMBOK Brendon Genssinger o e Elcimar Silva Higor Muniz Juliermes Henrique 23/11/2015 1 Histórico de alterações
Leia mais1 http://www.google.com
1 Introdução A computação em grade se caracteriza pelo uso de recursos computacionais distribuídos em várias redes. Os diversos nós contribuem com capacidade de processamento, armazenamento de dados ou
Leia maisFBV - Linguagem de Programação II. Um pouco sobre Java
FBV - Linguagem de Programação II Um pouco sobre Java História 1992: um grupo de engenheiros da Sun Microsystems desenvolve uma linguagem para pequenos dispositivos, batizada de Oak Desenvolvida com base
Leia maisSistema Operacional Correção - Exercício de Revisão
Prof. Kleber Rovai 1º TSI 22/03/2012 Sistema Operacional Correção - Exercício de Revisão 1. Como seria utilizar um computador sem um sistema operacional? Quais são suas duas principais funções? Não funcionaria.
Leia mais3 SCS: Sistema de Componentes de Software
3 SCS: Sistema de Componentes de Software O mecanismo para acompanhamento das chamadas remotas se baseia em informações coletadas durante a execução da aplicação. Para a coleta dessas informações é necessário
Leia maisArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource www.netsource.com.br Rev: 02
ArpPrintServer Sistema de Gerenciamento de Impressão By Netsource www.netsource.com.br Rev: 02 1 Sumário INTRODUÇÃO... 3 CARACTERÍSTICAS PRINCIPAIS DO SISTEMA... 3 REQUISITOS DE SISTEMA... 4 INSTALAÇÃO
Leia maisSistemas Operacionais
UNIVERSIDADE BANDEIRANTE DE SÃO PAULO INSTITUTO POLITÉCNICO CURSO DE SISTEMAS DE INFORMAÇÃO Sistemas Operacionais Notas de Aulas: Tópico 33 e 34 Virtualização São Paulo 2009 Virtualização Ao falar em virtualização,
Leia maisBACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia
O Sistema Operacional que você usa é multitasking? Por multitasking, entende-se a capacidade do SO de ter mais de um processos em execução ao mesmo tempo. É claro que, num dado instante, o número de processos
Leia maisBarra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas
Microsoft Power Point 2003 No Microsoft PowerPoint 2003, você cria sua apresentação usando apenas um arquivo, ele contém tudo o que você precisa uma estrutura para sua apresentação, os slides, o material
Leia maisTaxa de Gravação da Memória RAM (MegaBytes / segundo) G5 2.7 Ghz (Mac) Linux Kernel 2.6 2799 1575
21 4 Análise É necessária uma análise criteriosa, que busque retornar as questões primordiais sobre o que é realmente preciso para a aquisição de uma plataforma de produção gráfica digital profissional.
Leia maisManual SAGe Versão 1.2 (a partir da versão 12.08.01)
Manual SAGe Versão 1.2 (a partir da versão 12.08.01) Submissão de Relatórios Científicos Sumário Introdução... 2 Elaboração do Relatório Científico... 3 Submissão do Relatório Científico... 14 Operação
Leia maisO Rational Unified Process (RUP) é um processo de desenvolvimento de software inspirado no
1.1 RATIONAL UNIFIED PROCESS (RUP) O Rational Unified Process (RUP) é um processo de desenvolvimento de software inspirado no processo que atende pelo nome de Processo Unificado (ou UP do inglês Unified
Leia maisGerenciamento de software como ativo de automação industrial
Gerenciamento de software como ativo de automação industrial INTRODUÇÃO Quando falamos em gerenciamento de ativos na área de automação industrial, fica evidente a intenção de cuidar e manter bens materiais
Leia maisSegundo Pré-teste. Data de realização. 18 de Novembro de 2007. Local.
Segundo Pré-teste Data de realização. 18 de Novembro de 2007. Local. Duas salas de aula da Pós-graduação do Departamento de Arquitetura e Urbanismo da EESC/USP. Duração: 4 horas. Dos objetivos. Envolveu
Leia maisA memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande
A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande região de armazenamento formada por bytes ou palavras, cada
Leia maisIntrodução ao Modelos de Duas Camadas Cliente Servidor
Introdução ao Modelos de Duas Camadas Cliente Servidor Desenvolvimento de Sistemas Cliente Servidor Prof. Esp. MBA Heuber G. F. Lima Aula 1 Ciclo de Vida Clássico Aonde estamos? Page 2 Análise O que fizemos
Leia maisTESTES AUTOMATIZADOS COM JUNITE MOCKITO
TESTES AUTOMATIZADOS COM JUNITE MOCKITO Jaime William Dias 12, Dener Barranco 1, Douglas Delapria 1 1 Universidade Paranaense (Unipar) 2 Universidade Estadual de Maringá (UEM) Paranavaí PR Brasil dener_barranco@hotmail.com,
Leia maisIntrodução a listas - Windows SharePoint Services - Microsoft Office Online
Page 1 of 5 Windows SharePoint Services Introdução a listas Ocultar tudo Uma lista é um conjunto de informações que você compartilha com membros da equipe. Por exemplo, você pode criar uma folha de inscrição
Leia maisArquitetura de Computadores. Introdução aos Sistemas Operacionais
Arquitetura de Computadores Introdução aos Sistemas Operacionais O que é um Sistema Operacional? Programa que atua como um intermediário entre um usuário do computador ou um programa e o hardware. Os 4
Leia maisESTUDO DE CASO WINDOWS VISTA
ESTUDO DE CASO WINDOWS VISTA História Os sistemas operacionais da Microsoft para PCs desktop e portáteis e para servidores podem ser divididos em 3 famílias: MS-DOS Windows baseado em MS-DOS Windows baseado
Leia maisMódulo 4. Construindo uma solução OLAP
Módulo 4. Construindo uma solução OLAP Objetivos Diferenciar as diversas formas de armazenamento Compreender o que é e como definir a porcentagem de agregação Conhecer a possibilidade da utilização de
Leia maisAlgoritmos. Objetivo principal: explicar que a mesma ação pode ser realizada de várias maneiras, e que às vezes umas são melhores que outras.
6 6 NOME DA AULA: 6 Algoritmos Duração da aula: 45 60 minutos Tempo de preparação: 10-25 minutos (dependendo da disponibilidade de tangrans prontos ou da necessidade de cortá-los à mão) Objetivo principal:
Leia maisTópicos de Ambiente Web. Modulo 2 Processo de desenvolvimento de um site Professora: Sheila Cáceres
Tópicos de Ambiente Web Modulo 2 Processo de desenvolvimento de um site Professora: Sheila Cáceres Roteiro Motivação Desenvolvimento de um site Etapas no desenvolvimento de software (software:site) Analise
Leia maisGerência de Memória RAM em Computadores com Mais de 4GB O sistema Windows x86 (32bits) não tem capacidade de reconhecer, fisicamente, mais que 3,X GB de RAM, a não ser que seja ativado, manualmente, o
Leia maisSistemas Operacionais
Sistemas Operacionais Sistemas Operacionais Prof. Marcelo Sabaris Carballo Pinto Gerenciamento de Dispositivos Gerenciamento de Dispositivos de E/S Introdução Gerenciador de Dispositivos Todos os dispositivos
Leia maisUFG - Instituto de Informática
UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 10 Persistência de Dados
Leia mais4 Estrutura do Sistema Operacional. 4.1 - Kernel
1 4 Estrutura do Sistema Operacional 4.1 - Kernel O kernel é o núcleo do sistema operacional, sendo responsável direto por controlar tudo ao seu redor. Desde os dispositivos usuais, como unidades de disco,
Leia maiswww.leitejunior.com.br 29/06/2012 14:30 Leite Júnior QUESTÕES CESPE BACKUP
QUESTÕES CESPE BACKUP QUESTÃO 01 - Analise as seguintes afirmações relativas a cópias de segurança. I. No Windows é possível fazer automaticamente um backup, em um servidor de rede, dos arquivos que estão
Leia maisMANUAL DE IMPLANTAÇÃO SISTEMA DE INVENTÁRIO CACIC GOVERNO FEDERAL SOFTWARE PÚBLICO
MANUAL DE IMPLANTAÇÃO SISTEMA DE INVENTÁRIO CACIC Configurador Automático e Coletor de Informações Computacionais GOVERNO FEDERAL SOFTWARE PÚBLICO software livre desenvolvido pela Dataprev Sistema de Administração
Leia maisConsiderações no Projeto de Sistemas Cliente/Servidor
Cliente/Servidor Desenvolvimento de Sistemas Graça Bressan Graça Bressan/LARC 2000 1 Desenvolvimento de Sistemas Cliente/Servidor As metodologias clássicas, tradicional ou orientada a objeto, são aplicáveis
Leia maisAnálise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)
Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 1 Prof. Cristóvão Cunha Objetivos de aprendizagem
Leia maisDesenvolvimento Web TCC-00.226 Turma A-1
Desenvolvimento Web TCC-00.226 Turma A-1 Conteúdo Introdução ao Ambiente de Desenvolvimento Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.2/tcc-00.226
Leia mais1 Inicie um novo. Guia de Referência Rápida de Gerenciamento de Projeto para o Project 2007. projeto
Guia de Referência Rápida de Gerenciamento de Projeto para o Project 2007 1 Inicie um novo Antes de começar um novo, uma organização deve determinar se ele se enquadra em suas metas estratégicas. Os executivos
Leia maisSphinx Scanner Informações gerais V 5.1.0.8
Sphinx Scanner Informações gerais V 5.1.0.8 Pré-requisitos: Possuir modalidade scanner no software Sphinx A SPHINX Brasil propõe uma solução de leitura automática de questionários por scanner. O Sphinx
Leia maisVocê consegue dirigir seu carro sem um painel de controle? Você consegue gerenciar um Service Desk sem Indicadores?
Você consegue dirigir seu carro sem um painel de controle? Você consegue gerenciar um Service Desk sem Indicadores? Será que está acabando a gasolina? Qual o consumo médio do carro na Estrada ou na Cidade?
Leia maisComparativo de desempenho do Pervasive PSQL v11
Comparativo de desempenho do Pervasive PSQL v11 Um artigo Pervasive PSQL Setembro de 2010 Conteúdo Resumo executivo... 3 O impacto das novas arquiteturas de hardware nos aplicativos... 3 O projeto do Pervasive
Leia maisModelo Cascata ou Clássico
Modelo Cascata ou Clássico INTRODUÇÃO O modelo clássico ou cascata, que também é conhecido por abordagem top-down, foi proposto por Royce em 1970. Até meados da década de 1980 foi o único modelo com aceitação
Leia maisINTRODUÇÃO E CONFIGURAÇÃO DO PRIMEFACES MOBILE EM APLICAÇÕES JSF
INTRODUÇÃO E CONFIGURAÇÃO DO PRIMEFACES MOBILE EM APLICAÇÕES JSF Guilherme Macedo, Jaime Willian Dias Universidade Paranaense (Unipar) Paranavaí PR Brasil guilhermemacedo28@gmail.com, jaime@unipar.br Resumo.
Leia maisARQUITETURA DE COMPUTADORES
ARQUITETURA DE COMPUTADORES Desempenho Prof Daves Martins Msc Computação de Alto Desempenho Email: daves.martins@ifsudestemg.edu.br Fundamentos de Organização de Computadores Desempenho Avaliação de Desempenho
Leia maisMultiplexador. Permitem que vários equipamentos compartilhem um único canal de comunicação
Multiplexadores Permitem que vários equipamentos compartilhem um único canal de comunicação Transmissor 1 Receptor 1 Transmissor 2 Multiplexador Multiplexador Receptor 2 Transmissor 3 Receptor 3 Economia
Leia maisEntendendo como funciona o NAT
Entendendo como funciona o NAT Vamos inicialmente entender exatamente qual a função do NAT e em que situações ele é indicado. O NAT surgiu como uma alternativa real para o problema de falta de endereços
Leia maisOrganização de Computadores 1
Organização de Computadores 1 4 SUPORTE AO SISTEMA OPERACIONAL Prof. Luiz Gustavo A. Martins Sistema Operacional (S.O.) Programa responsável por: Gerenciar os recursos do computador. Controlar a execução
Leia maisPlanejamento - 7. Planejamento do Gerenciamento do Risco Identificação dos riscos. Mauricio Lyra, PMP
Planejamento - 7 Planejamento do Gerenciamento do Risco Identificação dos riscos 1 O que é risco? Evento que representa uma ameaça ou uma oportunidade em potencial Plano de gerenciamento do risco Especifica
Leia maisSistemas Operacionais
Sistemas Operacionais Gerência de processos Controle e descrição de processos Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Sumário Representação e controle de processos pelo SO Estrutura
Leia maisIntrodução a Informática - 1º semestre AULA 02 Prof. André Moraes
Introdução a Informática - 1º semestre AULA 02 Prof. André Moraes 3 MÁQUINAS VIRTUAIS Em nossa aula anterior, fizemos uma breve introdução com uso de máquinas virtuais para emularmos um computador novo
Leia maisPós Graduação Engenharia de Software
Pós Graduação Engenharia de Software Ana Candida Natali COPPE/UFRJ Programa de Engenharia de Sistemas e Computação FAPEC / FAT Estrutura do Módulo Parte 1 QUALIDADE DE SOFTWARE PROCESSO Introdução: desenvolvimento
Leia mais