JavaRush /Blogue Java /Random-PT /Pausa para café #60. Como funciona a coleta de lixo em Ja...

Pausa para café #60. Como funciona a coleta de lixo em Java (JVM). 15 perguntas importantes sobre Spring em uma entrevista técnica

Publicado no grupo Random-PT

Como funciona a coleta de lixo em Java (JVM)

Fonte: Zona D

Processo de coleta de lixo em Java

A coleta de lixo Java aloca e libera memória automaticamente, para que os desenvolvedores não precisem escrever um programa separado para gerenciar a memória, o que é um dos principais benefícios da programação em Java. Cada vez que um programa Java é executado na JVM, objetos são criados no heap e representam uma parte da memória alocada para o programa. Com o tempo, alguns itens não serão mais necessários. O coletor de lixo encontra esses objetos não utilizados e os remove para liberar memória. Pausa para café #61.  Como funciona a coleta de lixo em Java (JVM).  15 perguntas importantes sobre Spring em uma entrevista técnica - 1O coletor de lixo, após avaliar o heap de memória, determinará quais objetos estão em uso e quais não estão, e removerá os objetos não utilizados. Um objeto usado ou referenciado significa que alguma parte do seu programa ainda mantém um ponteiro para esse objeto. Se um objeto não estiver mais em uso ou não for mais referenciado, ele não será mais referenciado por nenhuma parte do programa. Assim, a memória usada por um objeto não referenciado pode ser liberada realizando a coleta de lixo. Pausa para café #61.  Como funciona a coleta de lixo em Java (JVM).  15 perguntas importantes sobre Spring em uma entrevista técnica - 2A liberação de memória pode ser descrita por três processos principais:
  1. Marcação.
  2. Remoção normal.
  3. Remoção com compactação.
Marcação é o processo de identificação de partes da memória que são ou não usadas pelo coletor de lixo. A rotulagem é geralmente o primeiro passo. A exclusão normal é o processo de exclusão de objetos que não são referenciados, deixando objetos referenciados e ponteiros no espaço livre. Exclusão de compactação - Além de excluir objetos não referenciados, compacta os objetos referenciados restantes, movendo os objetos juntos para tornar a nova alocação de memória muito mais fácil e rápida.

Memória heap JVM

Pausa para café #61.  Como funciona a coleta de lixo em Java (JVM).  15 perguntas importantes sobre Spring em uma entrevista técnica - 3

Geração jovem

Os objetos recém-criados começam na Geração Jovem. Também é chamado de berçário porque novos objetos começam a morar aqui. Young Generation é dividido em Eden Space, onde todos os novos objetos começam, e dois Survivor Spaces, onde os objetos são movidos para fora do Eden após sobreviverem em um único ciclo de coleta de lixo. Eles causam nova coleta de lixo quando os objetos são coletados pelo coletor de lixo da Geração Jovem. Eden Space Todos os novos objetos são criados primeiro no Eden Space. A coleta de lixo secundária será acionada quando atingir um limite determinado pela JVM. Os objetos mencionados são movidos do Eden Space para o primeiro save space ('Eden' e 'from' -> 'to'). Objetos não referenciados são removidos quando o Eden Space é limpo. Sobrevivente 0 (S0) e Sobrevivente 1 (S1) Ambos os campos sobreviventes (De e para) começam em branco. Quando a coleta de lixo ocorre novamente, todos os objetos referenciados são movidos para o espaço restante. Quando a coleta de lixo termina, os lugares (nomes) do sobrevivente “de” e “para” são trocados. Se durante a coleta de lixo anterior S1 estava na função “para”, agora S1 está cheio e passa a ser “de”. Conseqüentemente, se S0 estiver vazio, então se tornará “para”.

Velha Geração

Após uma pequena coleta de lixo, quando os objetos obsoletos atingem um determinado limite de idade (o limite padrão para JVMs modernas é definido como 15 ciclos de coleta de lixo), eles, junto com os objetos de longa vida, passam da geração mais jovem para a antiga. À medida que pequenos coletores de lixo continuarem a surgir, os objetos continuarão a se mover para o espaço da Velha Geração, ele começará a encher e ocorrerá uma grande coleta de lixo. A coleta de lixo básica ocorre quando os objetos são coletados pelo coletor de lixo da Antiga Geração. Pausa para café #61.  Como funciona a coleta de lixo em Java (JVM).  15 perguntas importantes sobre Spring em uma entrevista técnica - 4

Geração Permanente

Metadados como classes e métodos são armazenados na Geração Permanente. As classes que não são mais utilizadas podem ser removidas pelo coletor de lixo. Durante uma coleta de lixo completa, são coletados objetos não utilizados de todas as gerações.Pausa para café #61.  Como funciona a coleta de lixo em Java (JVM).  15 perguntas importantes sobre Spring em uma entrevista técnica - 5

Tipos de coleta de lixo

As coletas de lixo que limpam várias partes do heap costumam ser chamadas de coletas de lixo Menores, Principais e Completas. Mas como os termos Minor, Major e Full são amplamente utilizados sem a devida definição, veremos a explicação de todos esses tipos de coleta de lixo.

Coleta de Lixo Menor

A coleta de lixo do espaço Geração Jovem é chamada de Coleta de Lixo Menor. Este tipo de build é sempre acionado quando a JVM não consegue alocar espaço para um novo objeto, ou seja, quando o Eden Space está cheio. Assim, quanto maior a taxa de seleção, maior a frequência com que ocorre a Coleta de Lixo Menor.

Coleta de lixo principal

A Coleta de Lixo Principal limpa o Tenured (espaço antigo). Como a Velha Geração é maior, as assembleias ocorrem com menos frequência do que a Geração Jovem. Quando objetos desaparecem da Geração Antiga, dizemos que ocorreu uma “grande coleta de lixo”. O colecionador da Velha Geração tentará prever quando precisará começar a colecionar para evitar falhas de promoção da Geração Jovem. Os coletores monitoram o limite de preenchimento da Geração Antiga e começam a coletar quando esse limite é excedido. Caso esse limite não seja suficiente para atender aos requisitos da promoção, é lançada a “Coleta Completa de Lixo”.

Coleta completa de lixo

A coleta completa de lixo limpa todo o grupo - tanto espaços novos quanto antigos. Muitas pessoas ficam confusas entre Major (apenas geração OLD) e Full GC (Young + OLD (Heap)). A Coleta Completa de Lixo inclui a promoção de todos os objetos vivos, da geração mais jovem à mais velha, após a montagem e compactação da geração mais velha. Uma coleta completa de lixo será uma parada para o Stop-the-World. Ele garante que novos objetos não sejam alocados e que os objetos não fiquem indisponíveis enquanto o coletor estiver em execução.

15 perguntas importantes sobre Spring em uma entrevista técnica

Fonte: Dev.to Spring Framework é um framework universal para a plataforma Java. Sua funcionalidade principal pode ser usada por qualquer aplicativo Java e existem extensões para a criação de aplicativos da web baseados em Java EE. Aqui está uma lista de perguntas e respostas da entrevista relacionadas à codificação Spring. Esperamos que eles ajudem você a se preparar para sua entrevista técnica em 2021.Pausa para café #61.  Como funciona a coleta de lixo em Java (JVM).  15 perguntas importantes sobre Spring em uma entrevista técnica - 6

1. O que é a Primavera?

Resposta: Spring é uma estrutura de código aberto para o desenvolvimento de aplicativos Java. Os principais recursos do Spring Framework podem ser usados ​​para desenvolver qualquer aplicativo Java, e extensões também estão disponíveis para criar aplicativos da web baseados na plataforma Java EE. A estrutura Spring visa tornar o J2EE mais fácil de usar no desenvolvimento e melhorar as práticas de programação, incorporando um modelo baseado em POJO (Plain Old Java Object).

2. Qual é o escopo padrão de um bean no framework Spring?

Resposta: O escopo padrão de um bean é Singleton (padrão de design).

3. O que é fiação Bean?

Resposta: Bean wire é o ato de criar associações entre componentes de aplicação (beans) em um contêiner Spring.

4. O que é Spring Security?

Resposta: Spring Security é um módulo separado da estrutura Spring que se concentra em fornecer métodos de autenticação e autorização para aplicativos Java. Ele também corrige as vulnerabilidades de segurança mais comuns, como ataques CSRF. Para usar Spring Security em aplicações web, você pode começar com uma anotação simples: @EnableWebSecurity.

5. O que está contido na definição de um bean?

Resposta: Uma definição de bean contém informações chamadas metadados de configuração que o contêiner precisa saber o seguinte:
  • Como criar um feijão;
  • Detalhes do ciclo de vida do feijão;
  • dependências de feijão.

6. O que é Spring Boot?

Resposta: Spring Boot é um projeto que fornece um conjunto pré-configurado de estruturas para reduzir a configuração padrão para que você possa colocar um aplicativo Spring em funcionamento com o mínimo de código.

7. O que é DispatcherServlet e para que é utilizado?

Resposta: DispatcherServlet é uma implementação do padrão de design Front Controller que lida com todas as solicitações da web recebidas para um aplicativo Spring MVC. O padrão Front Controller (Enterprise Application Design Pattern) é um padrão comum em aplicativos da web cuja tarefa é pegar a solicitação inteira e encaminhá-la para vários componentes do aplicativo para processamento real. No Spring MVC, DispatcherServlet é usado para encontrar o controlador correto para lidar com a solicitação. Isso é feito usando mapeamento de manipulador: por exemplo, a anotação @RequestMapping.

8. Spring-mvc.jar é necessário no caminho de classe ou faz parte do spring-core?

Resposta: Spring-mvc.jar faz parte do spring-core, o que significa que se você quiser usar a estrutura Spring MVC em seu projeto Java, deverá incluir spring-mvc.jar no caminho de classe do seu aplicativo. Em um aplicativo da web Java, spring-mvc.jar geralmente é colocado na pasta /WEB-INF/lib.

9. Quais são os benefícios de usar o Spring?

Resposta: Abaixo está uma lista de alguns benefícios do uso do Spring Framework:
  • Leve – Spring é relativamente leve quando se trata de tamanho e transparência. A versão básica do Spring Framework tem cerca de 2 MB.
  • Inversão de controle (IOC) - O acoplamento fraco é obtido no Spring usando a técnica de inversão de controle. Os objetos fornecem suas dependências em vez de criar ou procurar objetos dependentes.
  • Orientado a aspectos - Spring oferece suporte à programação orientada a aspectos e garante um desenvolvimento consistente, desacoplando a lógica de negócios do aplicativo dos serviços do sistema.
  • Containers - Spring Container cria objetos, os une, os configura e os gerencia desde a criação até o descarte.
  • MVC Framework - Spring web framework é um framework web MVC bem projetado que fornece uma alternativa para frameworks web como Struts ou outros frameworks web excessivamente projetados ou menos populares.
  • Gerenciamento de transações - Spring possui uma interface de gerenciamento de transações consistente que pode ser dimensionada para transações locais (por exemplo, usando um único banco de dados) ou transações globais (por exemplo, usando JTA).
  • Tratamento de exceções - Spring fornece uma API conveniente para converter exceções específicas de tecnologia (como aquelas lançadas por JDBC, Hibernate ou JDO) em exceções consistentes e não verificadas.

10. O que são feijões de primavera?

Resposta: Spring beans são instâncias de objetos gerenciados pelo Spring Container. Eles são criados e conectados pela estrutura e colocados em uma “bolsa de objetos” (contêiner) de onde você poderá recuperá-los posteriormente. A fiação é o que constitui a injeção de dependência. Isso significa que você pode simplesmente dizer “Eu preciso disso” e a estrutura seguirá certas regras para obter esse objeto.

11. Qual é a finalidade do módulo Core Container?

Resposta: O contêiner do kernel fornece a funcionalidade principal da estrutura Spring. O componente principal do contêiner principal é o BeanFactory, uma implementação do padrão Factory. BeanFactory usa controle de inversão para separar as dependências de configuração e especificação do aplicativo do código real do aplicativo.

12. O que é um contexto de aplicação?

Resposta: À primeira vista, o contexto do aplicativo é o mesmo do bean factory. Ambos carregam definições de bean, agrupam os beans e os distribuem mediante solicitação. Mas também fornece:
  • Uma ferramenta para resolução de mensagens de texto, incluindo suporte para internacionalização.
  • Uma maneira comum de carregar recursos de arquivo.
  • Eventos para beans registrados como ouvintes.

13. Como integrar Java Server Faces (JSF) com Spring?

Resposta: JSF e Spring compartilham alguns dos mesmos recursos, especialmente na área de serviços de Inversão de Controle. Ao declarar beans gerenciados JSF no arquivo de configuração faces-config.xml, você permite que o FacesServlet instancie esse bean na inicialização. Suas páginas JSF têm acesso a esses beans e a todas as suas propriedades. JSF e Spring podem ser integrados de duas maneiras: DelegatingVariableResolver : Spring vem com um resolvedor de variável JSF que permite usar JSF e Spring juntos. DelegatingVariableResolver primeiro delega a pesquisa de valores ao intérprete padrão da implementação JSF subjacente e, em seguida, ao "contexto de negócios" do Spring WebApplicationContext. Isso facilita a injeção de dependências em beans gerenciados por JSF. FacesContextUtils : um VariableResolver personalizado funciona bem ao mapear suas propriedades para beans em faces-config.xml. Mas se você precisar capturar um bean, a classe FacesContextUtils facilita isso. É semelhante ao WebApplicationContextUtils, exceto que aceita um parâmetro FacesContext em vez de um parâmetro ServletContext.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. O que é a estrutura Spring MVC?

Resposta: A estrutura Spring Web MVC fornece uma arquitetura de controlador de visualização de modelo e componentes pré-construídos que podem ser usados ​​para desenvolver aplicativos da web flexíveis e pouco acoplados. O padrão MVC resulta na separação de diferentes aspectos de um aplicativo (lógica de entrada, lógica de negócios e lógica de UI), ao mesmo tempo que permite um acoplamento fraco entre esses elementos.

15. Como funciona o tratamento de eventos no Spring?

Resposta: O processamento no ApplicationContext é fornecido por meio da classe ApplicationEvent e da interface ApplicationListener . Ou seja, se um bean implementar ApplicationListener , então toda vez que um ApplicationEvent for publicado no ApplicationContext , esse bean será registrado. Obrigado pela leitura e boa sorte com sua entrevista técnica!
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION