Jvm相关知识(面试高级必备)

news2024/9/23 11:21:37
  • 类的实例化顺序

先静态、先父后子

先静态:父静态>子静态

优先级:父类>子类 静态代码块>非静态代码块>构造函数

一个类的实例化过程:

①.父类的static代码块,当前类的static;

②.顺序执行父类的普通代码块;

③.父类的构造函数;

④.子类的普通代码块;

⑤.子类(当前类)的构造函数,按顺序执行;

⑥.子类方法的执行;

  • jvm内存分配

根据jvm规范,jvm内存共分为虚拟机栈、堆、方法区、程序计数器和本地方法栈五个部分。
在这里插入图片描述

  1. .方法区:主要存储类信息,常量池(static常量和static变量),编译后的代码(字节码)等信息;

  2. .堆:初始化的对象,成员变量(非static变量),所有的对象实例和数组都要在堆上分配;

  3. .栈:栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上存储局部变量表,操作数栈,方法出口等信息,局部变量表存放的是八大基础类型加一个应用类型,所以还是一个指向地址的指针;

  4. .程序技术器:记录当前线程执行的行号;

  5. .本地方法栈:主要为Native方法服务。

Java8的内存分带改进

从永久代到元空间,在小范围自动拓展永生代避免溢出。

JVM垃圾回收机制,何时触发MinorGC等操作
分代垃圾回收机制:不同的对象生命周期不同。把不同生命周期的对象放在不同代上,不同代上采用最合适的垃圾回收方式进行回收。

JVM中共划分为三个代:年轻代、年老代和持久代。

年轻代:存放所有新生成的对象;

年老代:在年轻代中经历了N次垃圾回收仍然存活的对象,将被放在年老代中,故都是一些生命周期较长的对象;

持久代:用于存放静态文件,如Java类、方法等。

新生代的垃圾回收器命名为“Minor Gc”,老生代的垃圾回收器命名为“Full Gc 或 Major Gc”。其中在System.gc()强制执行的是Full Gc。

判断对象是否需要回收的两种方法:

①.引用计数

当某个对象的引用数为0时,便可以进行垃圾回收。

这种方法的最大缺点是无法检测出循环引用。如父对象有一个对子对象的引用,子对象反过来引用父对象。这样,它们的引用计数 永远也不可能为0.

②.可达性分析算法

可达性分析算法是从离散数学中的图论引入的,程序把所有的引用关系看做一张图,从一个节点GC ROOT开始,寻找对应的引用节点找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是没有引用的节点,即无用的节点,无用的节点将会被判定为垃圾回收的对象。
在这里插入图片描述

  • 触发GC的条件

①.GC在优先级最低的线程中运行,一般在没有应用程序即没有应用线程在运行时被调用;

②.Java堆内存不足时,GC会被调用。

  • JVM中完整的GC流程

①.对象优先在新生代中分配,如果内存不足,Minor GC;

②.大对象(需要大量连续内存空间)直接进入老年代;长期存活的对象进入老年代。如果对象在新生代经过一次 Minor GC回收仍然存活,年龄+1.若年龄超过一定限制(15),则晋升为老年代。

  • 你知道哪几种垃圾回收器,各自的优缺点是什么?
    在这里插入图片描述

Eden和Survivor的分配比例

默认比例8:1。大部分对象都是朝生夕死。

复制算法的基本思想就是将内存分为两块,每次只使用其中的一块,当这一块内存用完,就会将活着的对象复制到另一块上。复制算法不会产生内存碎片。

Java内存模型,以及在并发中的应用

Java内存模型的主要目标:定义程序中各个变量的访问规则。

Java 线程之间的通讯有java内存模型控制。

所有变量的存储都在主内存,每个线程都有自己的工作内存,线程的工作内存中保存了被线程引用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,不同的线程之间无法直接访问对方工作内存中的变量,线程之间变量的传递必须通过主内存来传递。
在这里插入图片描述
线程间的通讯:

①.首先,线程A把本地内存中更新的变量刷新到主内存中;

②.然后,线程B在主内存中读取线程A已经更新过的变量。

  • volatile的语义,用volatile修饰的变量一定是线程安全吗?

一个变量被定义为volatile后,有两重含义:

①.保证此变量对所有线程的可见性,当一个线程修改了此变量,新值对于其它线程都是立即得知的,普通变量需要通过主内存来传递;

②.禁止指令的重排优化。

Valtile 修饰的变量不一定是线程安全的,eg非原子操作a++等。

对象之间的引用有哪些?

对象之间的引用主要有:强引用、弱引用、软引用和虚引用。

强引用:new出的对象之间的引用,只要强引用还在,就永远不会被回收;

弱引用:非必须的对象,对象能存活到下一次垃圾收集之前;

软引用:引用但非必须的对象,内存溢出异常之前回收;

虚引用:对生存时间无影响, 在垃圾回收事得到通知。

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

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

相关文章

python实操之网络爬虫介绍

一、什么是网络爬虫 网络爬虫,也可以叫做网络数据采集更容易理解。它是指通过编程向网络服务器(web)请求数据(HTML表单),然后解析HTML,提取出自己想要的数据。 它包括了根据url获取HTML数据、解…

安捷伦E8362C网络分析仪40GHz

安捷伦E8362C网络分析仪 E8362C 是 Agilent 的 40 GHz 网络分析仪。网络分析仪是一种功能强大的仪器,可以以无与伦比的精度测量射频设备的线性特性。许多行业使用网络分析仪来测试设备、测量材料和监控信号的完整性。 附加功能: 10 MHz 至 20 GHz 123 d…

java-IO

JAVA IO - java io可以让我们用标准的读写操作来完成对不同设备的读写数据工作. - java将IO按照方向划分为输入与输出,参照点是我们写的程序. - 输入:用来读取数据的,是从外界到程序的方向,用于获取数据. - 输出:用来写出数据的,是从程序到外界的方向,用于发送数据. java将…

Dubbo源码解析第一期:如何使用Netty4构建RPC

一、背景 早期学习和使用Dubbo的时候(那时候Dubbo还没成为Apache顶级项目),写过一些源码解读,但随着Dubbo发生了翻天覆地的变化,那些文章早已过时,所以现在计划针对最新的Apache Dubbo源码来进行“阅读理解…

关于eNSP中主机/PC与USG网络不可达的解决方案

check points:主机防火墙、网段、接口配置、ping权限、接口安全域; 1、主机 确认当前在联网络的属性(专用网络/公共网络),本机防火墙有无放通;检查 eNSP内防火墙 接口配置:IP地址是否配置到了正…

浅谈AcrelEMS-CIA机场智慧能源管平台解决方案-安科瑞 蒋静

1 概述 机场智慧能源管平台解决方案对机场范围内变电站内的高低压配电设备 、 发电机、变压器 、UPS、EPS 、广场照明 、 室内照明 、通风及排水等机电设备进行实时分布式监控和集中管理 , 实现无人值守 , 确保高速公路安全畅通 , 提高 自动化管理水平 , 降低机电设备的运行维…

插入排序(一)——直接插入排序与希尔排序

目录 一.前言 二.排序的概念及其运用 1.1排序的概念 1.2 常用排序算法 三.常用排序算法的实现 3.1 插入排序 3.1.1 基本思想 3.1.2 直接插入排序 3.1.3 希尔排序(缩小增量排序) 四.全部代码 sort.c sort.h test.c 五.结语 一.前言 本文我们…

Android.mk和Android.bp的区别和转换详解

Android.mk和Android.bp的区别和转换详解 文章目录 Android.mk和Android.bp的区别和转换详解一、前言二、Android.mk和Android.bp的联系三、Android.mk和Android.bp的区别1、语法:2、灵活性:3、版本兼容性:4、向后兼容性:5、编译区…

【数据结构】快速排序,归并排序

快速排序 1.hoare版本 根据动图的演示,整理的思路如下, 1.定义left,right,key。key默认是左边第一个元素,像两个指针,左边找比key大的,右边找比k小的,找到的话,交换二者,往返这个过…

限流算法之流量控制的平滑之道:滑动时间窗算法

文章目录 引言简介优点缺点样例样例图样例代码 应用场景结论 引言 在互联网应用中,流量控制是一个重要的组件,用于防止系统过载和保护核心资源。常见的限流算法包括固定窗口算法和滑动时间窗算法。本文将重点介绍滑动时间窗算法,并分析其优缺…

Spring Boot程序的打包与运行:构建高效部署流程

引言 在现代应用开发中,高效的打包和部署流程对于项目的开发、测试和上线至关重要。Spring Boot作为一种快速开发框架,提供了方便的打包工具和内嵌式的Web服务器,使得打包和运行变得更加简单。本文将研究在Spring Boot应用中如何进行打包&am…

java8 列表通过 stream流 根据对象属性去重的三种实现方法

java8 列表通过 stream流 根据对象属性去重的三种实现方法 一、简单去重 public class DistinctTest {/*** 没有重写 equals 方法*/SetterGetterToStringAllArgsConstructorNoArgsConstructorpublic static class User {private String name;private Integer age;}/*** lombo…

梁山泊国潮风礼盒,传承经典,贺礼新春

在春节来临之际,梁山泊隆重推出新年中国红礼盒酒,为您传递新年的祝福与关爱。这款酒以其独特的魅力,为您带来美好的祝愿和愉悦的享受。中国风国潮礼盒采用中国传统红色为主色调,象征着吉祥、喜庆和繁荣。红色的背景上,…

探索curl的高级应用:HTTP请求的大师级技巧

探索curl的高级应用:HTTP请求的大师级技巧 引言高级用法概览1. HTTP请求与响应处理2. 身份验证与安全3. 进阶技巧4. Cookie管理与会话保持5. 脚本自动化 HTTP请求与响应处理1. 自定义请求头2. 发送数据3. 处理响应 身份验证与安全1. 基本认证2. 摘要认证3. HTTPS安全…

禅道使用之项目的过程管理

目录 一.禅道介绍 二.禅道下载 三. 禅道的使用 3.1.禅道管理员管理账号 3.2.禅道管理产品经理角色操作 3.3.禅道管理项目经理角色操作 3.4.禅道管理测试主管角色操作 3.5.禅道管理产品经理发布版本 好啦今天就这里了哦!!!希望能帮到你…

Unity-Arduino Bluetooth Plugin蓝牙插件使用时需要注意的一些事项(附插件下载链接)

一些参考链接 1.Android 无法扫描蓝牙设备踩坑 2.权限相关 1-首先要明确你的蓝牙设备是经典蓝牙还是低功耗(BLE)蓝牙: 转载:Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别 2.如果是BLE蓝牙,需要打勾…

Github 2024-01-20开源项目日报 Top10

根据Github Trendings的统计,今日(2024-01-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4Jupyter Notebook项目2Lua项目1C项目1PHP项目1Vue项目1非开发语言项目1C项目1 PhotoMaker: 定制逼…

nvm, node.js, npm, yarn 安装配置

文章目录 nvm 安装node.js 安装npm yarn 配置 nvm 安装 nvm 是一个 node.js 管理工具,可以快捷下载安装使用多个版本的node.js linux 命令行输入: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bashwget -qO- https…

程序员的福利到了,轮转数组,经典算法实战

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

ES框架详解

ES框架详解 1、全文检索的介绍 ​ 那么对于一般的公司,初期是没有那么多数据的,所以很多公司更倾向于使用传统的数据库:mysql;比如我们要查找关键字”传智播客“,那么查询的方式大概就是:select * from table where …