anúncios

segunda-feira, 25 de novembro de 2024

Entendendo a JVM

O que é a JVM e por que ela é tão importante?

A Java Virtual Machine (JVM) é um dos pilares mais importantes da linguagem Java. Ela permite que o Java alcance seu objetivo principal de ser portável, com o famoso lema "Write Once, Run Anywhere" (Escreva uma vez, execute em qualquer lugar).

Mas o que exatamente é a JVM? Em resumo, é uma máquina virtual que interpreta e executa o bytecode Java (arquivos .class), traduzindo-o para instruções compreensíveis pelo sistema operacional e hardware subjacente.

Graças à JVM, aplicações Java podem ser executadas em diferentes plataformas sem que o código precise ser reescrito, garantindo portabilidade, segurança e eficiência.

Arquitetura da JVM: Explorando os Componentes Internos

A JVM é composta por várias partes que trabalham juntas para executar programas Java.

  1. Class Loader (Carregador de Classes)
  2. O Class Loader é responsável por carregar os arquivos .class na memória no momento da execução. Ele organiza e gerencia as classes em diferentes níveis:

    • Bootstrap Class Loader:
    • Carrega as classes fundamentais do Java.

    • Extension Class Loader:
    • Lida com bibliotecas adicionais.

    • Application Class Loader:
    • Carrega as classes da aplicação.

  3. Área de Memória da JVM
  4. A memória da JVM é organizada em várias áreas, cada uma com uma função específica:

    • Heap:
    • Onde os objetos e instâncias são armazenados.

    • Stack:
    • Armazena frames de métodos em execução e variáveis locais.

    • Method Area:
    • Contém metadados das classes e bytecode.

    • PC Register:
    • Rastrea a posição atual da instrução sendo executada em cada thread.

    • Native Method Stack:
    • Suporte para métodos escritos em linguagens nativas, como C ou C++.

  5. Execution Engine (Motor de Execução)
  6. Essa é a parte da JVM que transforma o bytecode em instruções executáveis.

    • Interpretador:
    • Executa o bytecode linha a linha.

    • JIT Compiler (Just-In-Time):
    • Compila o bytecode em código nativo para acelerar a execução.

  7. Native Interface
  8. Permite que o Java interaja com bibliotecas nativas do sistema, facilitando a execução de código fora da JVM.

  9. Garbage Collector (Coletor de Lixo)
  10. Um recurso essencial da JVM que gerencia automaticamente a memória, removendo objetos não utilizados e evitando problemas como vazamentos de memória (memory leaks).

Como a JVM executa o código?

O processo de execução de um programa Java na JVM segue estas etapas:

  • O compilador Java (javac) converte o código-fonte (.java) em bytecode (.class).
  • O Class Loader carrega o bytecode na memória da JVM.
  • O Motor de Execução interpreta ou compila o bytecode para código nativo.
  • O código nativo é executado pelo hardware subjacente.

Diferenciando JVM, JRE e JDK

Ao trabalhar com Java, você encontrará três termos comuns:

JVM (Java Virtual Machine): É o ambiente de execução para programas Java.

JRE (Java Runtime Environment): Inclui a JVM e bibliotecas padrão necessárias para rodar aplicações.

JDK (Java Development Kit): Inclui o JRE, ferramentas de desenvolvimento (compilador, depurador, etc.) e bibliotecas adicionais.

Benefícios da JVM

  • Portabilidade:
  • O bytecode é independente de plataforma, e a JVM específica de cada sistema operacional cuida da execução.

  • Eficiência:
  • O JIT Compiler otimiza o desempenho em tempo de execução.

  • Segurança:
  • Oferece isolamento entre o código Java e o hardware real, protegendo contra execuções maliciosas.

  • Multithreading:
  • Suporte nativo para execução simultânea de threads.

  • Gerenciamento de Memória:
  • O Garbage Collector simplifica o desenvolvimento e reduz problemas como vazamentos de memória.

Considerações finais

A Java Virtual Machine é a espinha dorsal do Java. Sua arquitetura robusta e características inovadoras garantem que aplicações sejam executadas de forma confiável, segura e eficiente em diferentes plataformas.

Entender como a JVM funciona não é apenas importante para desenvolvedores Java, mas também para quem deseja otimizar aplicações, resolver problemas de desempenho ou explorar áreas como DevOps e segurança.

Feito!

quarta-feira, 13 de novembro de 2024

Comparativo entre MySQL e MariaDB: Aprenda como usá-los em containers Docker com DBeaver

MySQL e MariaDB são dois dos bancos de dados relacionais mais populares no mercado, amplamente usados em sistemas de produção. Ambos são Sistemas de Gerenciamento de Banco de Dados (SGBDs) que suportam operações complexas e escaláveis, atendendo a várias necessidades de armazenamento e manipulação de dados. Porém, eles têm diferenças notáveis, desde seu licenciamento até características de desempenho e inovação.

Neste artigo, vamos explorar as diferenças entre MySQL e MariaDB, explicar suas origens e uso, e demonstrar como configurar ambos em containers Docker para facilitar o desenvolvimento e o gerenciamento de banco de dados. Também abordaremos como conectá-los ao DBeaver para visualização e administração.

O que é um banco de dados e um SGBD?

Um banco de dados é uma coleção organizada de dados que permite o armazenamento e a recuperação rápida de informações. Para gerenciar, organizar e manipular esses dados de forma eficiente, usamos um Sistema de Gerenciamento de Banco de Dados (SGBD), que é um software que interage com os dados e com o usuário, facilitando operações como consultas, atualizações e análises.

Existem dois tipos principais de banco de dados:

Relacionais: Organizam os dados em tabelas com colunas e linhas, como o MySQL, MariaDB, PostgreSQL, Oracle, MS SQL Server. São ideais para dados estruturados e complexos.

NoSQL: São não-relacionais e oferecem maior flexibilidade para trabalhar com dados sem estrutura rígida, como JSON ou dados hierárquicos. Exemplos incluem MongoDB, Cassandra.

MySQL vs MariaDB:

MySQL foi desenvolvido inicialmente pela empresa sueca MySQL AB e se tornou rapidamente popular por sua velocidade e simplicidade. Em 2008, foi adquirido pela Oracle, o que gerou preocupação na comunidade de código aberto sobre o futuro do projeto. Em resposta, Michael Widenius, um dos fundadores do MySQL, criou um fork chamado MariaDB, que manteve o foco em ser completamente livre e aberto, além de adicionar inovações.

Principais Diferenças entre MySQL e MariaDB

Característica MySQL MariaDB
Licenciamento GPL para Community Edition e versão comercial pela Oracle GPL, totalmente de código aberto
Mecanismo de Armazenamento InnoDB Aria (padrão) e InnoDB opcional
Replicação e Clustering Replicação Master-Slave, Master-Master Suporta Galera Cluster para replicação síncrona
Suporte JSON Suporte nativo Suporte nativo e melhorias de desempenho
Otimizações de Desempenho Foco em InnoDB e otimizações internas Aria, cache de subconsultas e consultas paralelas otimizadas
Recuperação de Crashes InnoDB com recuperação automática Aria com recuperação rápida e segura
Novos Recursos Suporte a JSON e novos tipos de dados Compatibilidade com PL/SQL e ColumnStore
Atualizações e Inovações Focada em estabilidade com novas funcionalidades controladas Atualizações frequentes com inovações rápidas

Instalando e executando o MySQL E MariaDB no Docker

Execute no terminal Linux (Debian e derivados), se caso ainda não tiver o Docker instalado.

$ sudo apt update

$ sudo apt install docker.io docker-compose

Caso você ainda usa Windows, então segue os procedimentos para poder conseguir reproduzir os procedimentos desse artigo no seu computador Janeleiro!

Habilitar o WSL2:

Abra o PowerShell como administrador e execute:

wsl --install

O comando acima instala automaticamente o WSL e a versão Ubuntu padrão. Caso queira instalar uma distribuição específica, como o Ubuntu LTS, ela pode ser encontrada na Microsoft Store.

Configurar o WSL2:

Verifique a versão do WSL para garantir que é o WSL2. Para isso, execute:

wsl --set-default-version 2

Isso configura o WSL para rodar como WSL2 por padrão, o que melhora a performance e compatibilidade com o Docker.

Instalar o Docker Desktop

Baixe e instale o Docker Desktop para Windows. Durante a instalação, marque a opção para Usar WSL2 em vez de Hyper-V.

Depois de instalado, o Docker Desktop detectará automaticamente o WSL2, permitindo executar containers diretamente no ambiente Ubuntu do WSL.

Com o Docker configurado, você poderá seguir os mesmos comandos descritos no artigo para executar containers de MySQL e MariaDB usando o terminal do Ubuntu no WSL2.

Para desenvolvedores que buscam um ambiente mais próximo dos servidores de produção e com maior controle do sistema, migrar para uma distribuição Linux pode ser uma excelente opção. Muitos profissionais encontram no Linux uma plataforma robusta e personalizável para desenvolvimento!

Configurando MySQL e MariaDB com Docker

O uso de Docker para configurar e executar MySQL e MariaDB em containers é uma prática cada vez mais comum. Docker simplifica o processo de instalação e oferece portabilidade, ideal para ambientes de desenvolvimento e testes.

Executando MySQL com Docker

Para criar um container Docker para MySQL, execute:

docker run --name mysql-docker -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=banco1 -p 3306:3306 -v mysql_data:/var/lib/mysql -d mysql:latest

Executando MariaDB com Docker

Para iniciar MariaDB em um container, use:

docker run --name mariadb-container -e MARIADB_ROOT_PASSWORD=secret -e MARIADB_DATABASE=banco2 -p 3307:3306 -v mariadb_data:/var/lib/mysql -d mariadb:latest

Conectando ao MySQL e MariaDB com DBeaver

DBeaver é uma ferramenta gráfica popular para gerenciar SGBDs, incluindo MySQL e MariaDB.

Execute no terminal Linux (Debian e derivados), se ainda não tiver instalado o DBeaver.

$ sudo apt install dbeaver-ce

Configurando conexão com MySQL no DBeaver

No DBeaver, vá em Database > New Database Connection.

Escolha MySQL na lista e configure:

Host: 127.0.0.1

Porta: 3306

Database: banco1

Username: root

Password: secret

Clique em Test Connection para verificar se a conexão com o container MySQL está funcionando.

Configurando conexão com MariaDB no DBeaver

No DBeaver, vá em Database > New Database Connection.

Escolha MariaDB e configure:

Host: 127.0.0.1

Porta: 3307

Database: banco2

Username: root

Password: secret

Após a configuração, você poderá gerenciar ambos os bancos de dados diretamente pelo DBeaver.

Clique em Test Connection para verificar a conexão com o container MariaDB.

Considerações finais

Tanto MySQL quanto MariaDB oferecem recursos poderosos e são amplamente utilizados em aplicações de produção. MariaDB é a escolha mais flexível e totalmente aberta, enquanto MySQL continua popular devido ao suporte e estabilidade oferecidos pela Oracle. A escolha entre MySQL e MariaDB depende das necessidades específicas do seu projeto, especialmente em relação ao licenciamento e aos recursos avançados. A configuração de ambos via Docker é simples e oferece um ambiente isolado para testes, desenvolvimento e operação.

Feito!

terça-feira, 12 de novembro de 2024

Instalando driver da NVIDIA no Ubuntu

O presente post, irá orientá-lo na instalação do driver NVIDIA no Ubuntu 24.04 e 24.10, permitindo que você aproveite ao máximo o desempenho da sua GPU NVIDIA. O processo inclui a verificação do driver recomendado para o seu sistema, instalação do driver, configuração do Secure Boot (se aplicável) e uma verificação final para garantir que o driver esteja ativo.

Atualizar o sistema

No terminal, execute os comandos abaixo para garantir que o sistema esteja atualizado:

$ sudo apt update

$ sudo apt upgrade


Verificar o driver NVIDIA compatível

Para ver qual versão do driver é recomendada para o seu hardware, use o comando:

$ ubuntu-drivers devices

Esse comando exibirá uma lista de drivers disponíveis e o driver recomendado para o seu sistema.

Instalar o Driver Recomendado

Substitua XXX pelo número da versão do driver recomendada (por exemplo, 560 ou outra) conforme indicado no passo anterior.

$ sudo apt install nvidia-driver-XXX

Durante a instalação, será solicitado que você crie uma senha para ativação do MOK (Machine Owner Key), necessária se o Secure Boot estiver ativado.

Ativar o Driver NVIDIA com Secure Boot

Após instalar o driver, reinicie o sistema:

$ sudo reboot

Quando o sistema reiniciar, será exibida a tela de gerenciamento MOK (Machine Owner Key). Siga estas instruções:

Selecione "Continue" para avançar no processo de inscrição da chave.

Escolha "Enroll MOK" para inscrever a nova chave.

Digite a Senha: Insira a senha que você configurou durante a instalação do driver.

Confirme a Inscrição: Siga as instruções para concluir a inscrição da chave.

Após essa etapa, o sistema aceitará os módulos do kernel assinados, permitindo o carregamento correto do driver NVIDIA mesmo com o Secure Boot ativado. Reinicie o sistema novamente para aplicar as alterações.

Verificar a instalação

Depois de reiniciar, use o comando abaixo para verificar se o driver está ativo:

$ nvidia-smi

Este comando deve exibir informações sobre a GPU NVIDIA, confirmando que o driver foi instalado corretamente.

Verificar o Estado do Secure Boot Para confirmar se o Secure Boot está habilitado, execute:

$ mokutil --sb-state

A saída deverá indicar "SecureBoot enabled" se o Secure Boot estiver ativo.

Feito!