3.Java面试题—JVM基础、内存管理、垃圾回收

news2024/9/29 9:19:16

七、JVM

一、JVM 基础

一篇文章掌握整个JVM,JVM超详细解析!!!

什么是Java虚拟机?

  • Java虚拟机(JVM) 是用来 解析和运行Java程序 的一种 虚拟机
  • 编译器Java ⽂件 编译成 平台无关Java 字节码文件 (.class),对应平台 JVM字节码文件 翻译成 机器指令 并运⾏。

Java对象 创建过程?

  • 加载类
  • 分配内存
  • 初始化默认值
  • 设置对象头: 运行时数据(GC标志位等)、对象指针数组长度
  • 执行初始化方法

对象有哪几种引用?

  • 强引用:代码中普遍存在的 赋值引用强引用 关联的对象,不会被 垃圾收集器 回收。
  • 软引用强引用对象 置空 (NULL),保留 软引用软引用 关联的对象,二次回收 时进行回收。
  • 弱引用强引用对象 置空 (NULL),保留 软引用弱引用 关联的对象,会被 垃圾收集器 回收。
  • 虚引用:最弱的⼀种 引用关系,不会影响对象的 ⽣存时间

二、内存管理

说⼀下 JVM 的内存区域 (堆 和 栈)?

  • 程序计数器:保存当前线程所正在执行的 字节码指令的地址(行号)
  • 栈内存线程私有。方法执行时,Java 虚拟机栈 会同步创建⼀个 栈帧,⽤来存储 局部变量表操作数栈 等。
  • 堆内存线程共享堆内存 用于存放 对象实例 (垃圾收集器 管理的内存区域,也称 GC堆)。
  • 方法区线程共享。存储已被 虚拟机 加载的 类信息常量静态变量 等数据。
    在这里插入图片描述

内存溢出 和 内存泄漏 是什么意思?

  • 内存泄露:申请的 内存空间 没有被正确释放,导致 内存被占⽤
  • 内存溢出:就是申请的内存超过了 可用内存内存不够了

内存泄漏可能由哪些原因导致呢?

  • 静态集合类:静态集合的 生命周期JVM ⼀致,所以静态集合 引用的对象 不能被释放
  • 单例模式
  • 连接(IO/数据)未释放

Java 堆的内存分区了解吗?

  • Java 堆 划分为 新生代老年代 两个区域。
  • 新⽣代 存放 存活时间短 的对象,每次 垃圾回收 后存活的对象,将会逐步存放到 老年代
  • 新⽣代 又可以分为三个区域:edenfromto,⽐例是 8:1:1

对象什么时候会进⼊⽼年代?

三、垃圾回收

垃圾收集算法了解吗?

  • 标记-清除算法
  • 标记-整理算法
  • 复制

知道有哪些垃圾收集器吗?

  • CMS收集器老年代的收集器,采⽤ 标记-清除算法回收停顿时间 最短。
  • G1收集器:开创了 局部收集的设计思路基于Region 的内存布局形式

什么是 Stop The World?

垃圾回收 时,会涉及 对象的移动。为了保证 对象引用 的正确性,必须 暂停所有线程,这样的停顿被称为 Stop The World。简称 STW


Minor GC、Major GC、Full GC 都是什么意思?

  • Minor GC (新生代GC)Minor GC 非常频繁回收速度 也比较快。
  • Major GC (老年代GC):通常执行 Major GC 会连着 Minor GC 一起执行。Major GC速度 要比 Minor GC 慢的多。
  • Full GC:对整个 Java 堆⽅法区 进行 垃圾回收

Minor GC 什么时候触发?

新创建的对象 优先在 新生代 Eden 区 进行分配,如果 Eden 区 没有足够的空间时,就会触发 Minor GC 来清理新生代。


Major GC 和 Full GC 触发条件一般为:

  • 晋升到老年代的对象 平均大小 > 老年代 剩余空间
  • Minor GC 后存活的对象超过了老年代剩余空间。
  • 老年代空间不足
  • 执行 System.gc()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/789433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式:QT Day1

一、手动实现登录框 源码&#xff1a; widge.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> //用于打印输出 #include <QIcon> //图标头文件 #include <QPushButton> //按钮类头文件 #includ…

Hadoop 之 Spark 配置与使用(五)

Hadoop 之 Spark 配置与使用 一.Spark 配置1.Spark 下载2.单机测试环境配置3.集群配置 二.Java 访问 Spark1.Pom 依赖2.测试代码1.计算 π 三.Spark 配置 Hadoop1.配置 Hadoop2.测试代码1.统计字符数 一.Spark 配置 环境说明环境版本AnolisAnolis OS release 8.6Jdkjava versi…

【node.js】01-fs读写文件内容

目录 一、fs.readFile() 读取文件内容 二、fs.writeFile() 向指定的文件中写入内容 案例&#xff1a;整理txt 需求&#xff1a; 代码&#xff1a; 一、fs.readFile() 读取文件内容 代码&#xff1a; //导入fs模块&#xff0c;从来操作文件 const fs require(fs)// 2.调…

ClickHouse(一):ClickHouse介绍及OLAP场景特征

目录 1. ClickHouse与其特性 ​​​​​​​2. 什么是ClickHouse ​​​​​​​3. OLAP场景的特征 进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; ​​​​​​​1. ClickHouse与其特性 …

刷题小总结

数组 数组是存放在连续内存空间上的相同类型数据的集合。 经典题目&#xff1a; 二分查找 双指针法 滑动窗口 模拟行为 链表 链表的种类主要为&#xff1a;单链表&#xff0c;双链表&#xff0c;循环链表链表的存储方式&#xff1a;链表的节点在内存中是分散存储的&…

php项目内存飚高处理与优化

公司服务器最近内存占用超过阈值一直报警 经过排查,内存占用很多&#xff0c;剩余很少 free -m 排查代码无太多冗余和缓存 最后和运维一起排查&#xff0c;发现宝塔安装后带的gitlab的进程很吃内存&#xff0c;赶紧停用&#xff0c;并卸载无用的软件 最后内存降下来了

大数据Flink(四十九):框架版本介绍和编程语言选择

文章目录 框架版本介绍和编程语言选择 一、框架版本介绍 二、编程语言选择 框架版本介绍和编程语言选择

Udp编程 - 客户端和服务端的注意事项

网上有很多教程&#xff0c;他们说发送使用sendto,接收使用recvfrom就可以&#xff0c;确实如此。但是你会用吗? 我们以QT(C)为例,来使用这个udp实现自发自收的功能(途中我们会用到QThread来开启我们的线程) 服务端(线程) #include "udpserverthread.h" #include …

MySQL数据库配置及创建用户和授权

注意&#xff1a; 都是基于MySQL8.0以上版本 1、检查是否安装过sql [rootlocalhost ~]# rpm -[qa](https://so.csdn.net/so/search?qqa&spm1001.2101.3001.7020) | grep mysql[rootlocalhost ~]# rpm -qa | grep [mariadb](https://so.csdn.net/so/search?qmariadb&…

Day 66-68 主动学习之ALEC

代码&#xff1a; package dl;import java.io.FileReader; import java.util.*; import weka.core.Instances;/*** Active learning through density clustering.*/ public class Alec {/*** The whole dataset.*/Instances dataset;/*** The maximal number of queries that …

修改密码和再次确认密码的js和element-ui的使用

<template><div><!-- plan的插槽 --><plan title"修改密码"><!-- 插槽的名字 --><span slot"header">修改密码</span><el-form:model"ruleForm2"status-icon:rules"rules2"ref"rul…

微服务安全简介

​由于其可扩展性、灵活性和敏捷性&#xff0c;微服务架构已经变得越来越受欢迎。然而&#xff0c;随着这种架构的分布和复杂性增加&#xff0c;确保强大的安全措施变得至关重要。微服务的安全性超越了传统的方法&#xff0c;需要采用全面的策略来保护免受不断演变的威胁和漏洞…

Linuxの Shell 函数、$(())、$( )、``与${ }

删除 # 标准定义 function funName () {....[return int;]}# 简写 function 可以省略 funName () {....[return int;] }# 简写 &#xff08;&#xff09; 可以省略 function funName {....[return int;] }## 函数调用 # 直接 函数名即可 无参数 funName # 参数 函数名即…

基本排序算法

目录 一&#xff0c;插入排序 二&#xff0c;希尔排序 三&#xff0c;选择排序 四&#xff0c;冒泡排序 五&#xff0c;快排 5.1 Hoare法 5.2 挖坑法 5.3 指针法 5.4 非递归写法 六&#xff0c;归并排序 6.1 递归 6.2 非递归 一&#xff0c;插入排序 基本思想&…

蓝牙HID配对过程

配对通常调用分两步 &#xff11;. Bluetooth AdapterService.cancelDiscovery btif_dm_cancel_discovery BTfM_CancelInquiry BTA_DM_SEARCH_CANCEL_CMPL_EVT BTM_BLI_INQ_CANCEL_EVT BTM_BLI_INQ_DONE_EVT discovery_state_changed_cb btif_dm_cancel_discovery BTA_DM_SE…

ElasticSearch学习--自动补全

目录 自定义分词器 介绍 配置自定义分词器 拼音分词器的问题​编辑 总结 DSL自动补全查询 RestAPI实现自动补全 自定义分词器 介绍 自定义分词器只在当前库中有效 配置自定义分词器 拼音分词器的问题 总结 DSL自动补全查询 RestAPI实现自动补全

VLAN---虚拟局域网

VLAN— 虚拟局域网 LAN—局域网 MAN—城域网 WAN—广域网 1.一个VLAN相当于是一个广播域 VLAN—通过路由器和交换机协同工作后&#xff0c;将原本的一个广播域逻辑上&#xff0c;拆 分为多个虚拟的广播域。 VLAN配置&#xff1a; 1.创建VLAN VID—VLAN ID------用来区分和…

1、传统锁回顾(Jvm本地锁,MySQL悲观锁、乐观锁)

目录 1.1 从减库存聊起1.2 环境准备1.3 简单实现减库存1.4 演示超卖现象1.5 jvm锁1.6 三种情况导致Jvm本地锁失效1、多例模式下&#xff0c;Jvm本地锁失效2、Spring的事务导致Jvm本地锁失效3、集群部署导致Jvm本地锁失效 1.7 mysql锁演示1.7.1、一个sql1.7.2、悲观锁1.7.3、乐观…

行为型设计模式之观察者模式【设计模式系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everythi…

Alluxio技术分析

Alluxio技术分析 Alluxio: A Virtual Distributed File System Alluxio主要解决的基于磁盘的分布式存储层性能低下的问题&#xff0c;通过alluxio提供的分布式内存来加速数据分析。 Alluxio的这种通过内存加速数据的想法其实是有明确的使用场景的&#xff1a; Immutable da…