ENTENDENDO A PERFORMANCE

Tamanho: px
Começar a partir da página:

Download "ENTENDENDO A PERFORMANCE"

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. 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 mais

Sistemas Operacionais

Sistemas 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 mais

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Na 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 mais

ISO/IEC 12207: Gerência de Configuração

ISO/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 mais

Orientação a Objetos

Orientaçã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 mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas 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 mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (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 mais

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

O 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 mais

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Prof. 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 mais

Introdução à Linguagem Java

Introduçã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 mais

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

IFPE. 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 mais

Prevayler. 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 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 mais

Professor: Curso: Disciplina:

Professor: 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 mais

ENGENHARIA DE SOFTWARE I

ENGENHARIA 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 mais

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

Metodologias 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 mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos 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 mais

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO

10 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 mais

MÓDULO 9 METODOLOGIAS DE DESENVOLVIMENTO DE SISTEMAS

MÓ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 mais

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

Capí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 mais

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

BRAlarmExpert. 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 mais

Saté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 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 mais

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

3 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 mais

Planejando o aplicativo

Planejando 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 mais

Sistemas Distribuídos

Sistemas 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 mais

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

UNIVERSIDADE 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 mais

Itinerários de Ônibus Relatório Final

Itinerá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 mais

Aspectos técnicos do desenvolvimento baseado em componentes

Aspectos 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 mais

Processos e Threads (partes I e II)

Processos 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 mais

Gerenciamento de Problemas

Gerenciamento 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 mais

Conceitos 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 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 mais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Notas 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 mais

TRABALHO COM GRANDES MONTAGENS

TRABALHO 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 mais

OTIMIZAÇÃO E PERFORMANCE DE BANCO DE DADOS UTILIZANDO SQL TUNING

OTIMIZAÇÃ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 mais

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores

SISTEMAS 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 mais

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

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 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 mais

Escalonamento no Linux e no Windows NT/2000/XP

Escalonamento 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 mais

Metodologia e Gerenciamento do Projeto na Fábrica de Software v.2

Metodologia 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 mais

5 Mecanismo de seleção de componentes

5 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 mais

Glossário Apresenta a definição dos termos, siglas e abreviações utilizadas no contexto do projeto Citsmart.

Glossá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 mais

Sistemas Operacionais

Sistemas 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 mais

Desenvolvendo Websites com PHP

Desenvolvendo 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 mais

AULA 5 Sistemas Operacionais

AULA 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 mais

Everson Scherrer Borges João Paulo de Brito Gonçalves

Everson 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 mais

Sistemas de Informação I

Sistemas 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 mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas 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 mais

Referências internas são os artefatos usados para ajudar na elaboração do PT tais como:

Referê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 mais

ARCO - 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 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 mais

Sistema de Controle de Solicitação de Desenvolvimento

Sistema 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 mais

Plano de Gerenciamento do Projeto

Plano 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 mais

1 http://www.google.com

1 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 mais

FBV - Linguagem de Programação II. Um pouco sobre Java

FBV - 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 mais

Sistema Operacional Correção - Exercício de Revisão

Sistema 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 mais

3 SCS: Sistema de Componentes de Software

3 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 mais

ArpPrintServer. 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 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 mais

Sistemas Operacionais

Sistemas 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 mais

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

BACHARELADO 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 mais

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Barra 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 mais

Taxa de Gravação da Memória RAM (MegaBytes / segundo) G5 2.7 Ghz (Mac) Linux Kernel 2.6 2799 1575

Taxa 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 mais

Manual 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) 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 mais

O Rational Unified Process (RUP) é um processo de desenvolvimento de software inspirado no

O 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 mais

Gerenciamento de software como ativo de automação industrial

Gerenciamento 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 mais

Segundo 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. 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 mais

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

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 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 mais

Introdução ao Modelos de Duas Camadas Cliente Servidor

Introduçã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 mais

TESTES AUTOMATIZADOS COM JUNITE MOCKITO

TESTES 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 mais

Introdução a listas - Windows SharePoint Services - Microsoft Office Online

Introduçã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 mais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Arquitetura 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 mais

ESTUDO DE CASO WINDOWS VISTA

ESTUDO 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 mais

Módulo 4. Construindo uma solução OLAP

Mó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 mais

Algoritmos. 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.

Algoritmos. 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 mais

Tó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 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 mais

Gerê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 mais

Sistemas Operacionais

Sistemas 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 mais

UFG - Instituto de Informática

UFG - 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 mais

4 Estrutura do Sistema Operacional. 4.1 - Kernel

4 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 mais

www.leitejunior.com.br 29/06/2012 14:30 Leite Júnior QUESTÕES CESPE BACKUP

www.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 mais

MANUAL DE IMPLANTAÇÃO SISTEMA DE INVENTÁRIO CACIC GOVERNO FEDERAL SOFTWARE PÚBLICO

MANUAL 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 mais

Considerações no Projeto de Sistemas Cliente/Servidor

Consideraçõ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 mais

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)

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) 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 mais

Desenvolvimento Web TCC-00.226 Turma A-1

Desenvolvimento 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 mais

1 Inicie um novo. Guia de Referência Rápida de Gerenciamento de Projeto para o Project 2007. projeto

1 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 mais

Sphinx Scanner Informações gerais V 5.1.0.8

Sphinx 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 mais

Você 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? 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 mais

Comparativo de desempenho do Pervasive PSQL v11

Comparativo 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 mais

Modelo Cascata ou Clássico

Modelo 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 mais

INTRODUÇÃO E CONFIGURAÇÃO DO PRIMEFACES MOBILE EM APLICAÇÕES JSF

INTRODUÇÃ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 mais

ARQUITETURA DE COMPUTADORES

ARQUITETURA 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 mais

Multiplexador. Permitem que vários equipamentos compartilhem um único canal de comunicação

Multiplexador. 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 mais

Entendendo como funciona o NAT

Entendendo 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 mais

Organização de Computadores 1

Organizaçã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 mais

Planejamento - 7. Planejamento do Gerenciamento do Risco Identificação dos riscos. Mauricio Lyra, PMP

Planejamento - 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 mais

Sistemas Operacionais

Sistemas 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 mais

Introdução a Informática - 1º semestre AULA 02 Prof. André Moraes

Introduçã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 mais

Pós Graduação Engenharia de Software

Pó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