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

  • 类的实例化顺序

先静态、先父后子

先静态:父静态>子静态

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

一个类的实例化过程:

①.父类的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.mzph.cn/news/634507.shtml

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

相关文章

freeswitch on centos dockerfile模式

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 centos7 docker上编译安装fs的流程记录,本文使用dockerfile模式。 环境 docker engine:Version 24.0.6 centos docker:7 freeswitch:v1.6.20 dockerfile 创建空目录…

力扣电话号码的组合

文章目录 题目说明做题思路代码实现代码解析 题目链接 题目说明 首先我们先分析一下这个题目题目中说呢先给出一个字符串这个字符串其实就是这个九键数字我们要按照要求将数字所代表的字符进行自由组合形成一个字符串并且这个字符串的长度和输入的数字字符串长度相同&#xff0…

第11章 GUI Page500~504 步骤三十二:打开画板文件02

各个图元类新增GetTypeName_Static(),并将原来的GetTypeName()改为调用静态方法实现: 直线: 圆: 十字: 矩形: 文字: tool_4_save_load.hpp添加两行 tool_4_save_load.cpp增加: 增加…

【资治通鉴】古代纪年法 ( 天干地支纪年法 | 木星纪年法 | 太岁纪年法 | 星次 | 天球 | 黄道带 | 四象二十八星宿 )

文章目录 一、天干地支纪年法二、木星纪年法1、星次2、天球3、黄道带 三、太岁纪年法四、四象二十八星宿1、四象与二十八星宿关联2、二十八星宿与星次关联3、西游记中的二十八星宿 2024 年 使用 天干地支纪年法是 甲辰年 , 使用 太岁纪年法是 阏逢执徐 ; 一、天干地支纪年法 天…

建筑能源管理系统

建筑能源管理系统是一种集成了先进的监测、控制、分析和优化技术的智能化系统,旨在提高建筑能源效率,降低能源消耗,减少环境污染,并为用户提供舒适、安全的建筑环境。通过监测建筑内的各种能源消耗情况,如电力、热水、…

arthas(阿尔萨斯)日常java代码调优使用命令

官方项目文档:https://gitee.com/arthas/arthas (最权威的教学还是得官网,这里仅作简单记录) 1:启动 java -jar arthas-boot.jar 2:查看cpu占用排名前三 thread -3 3:查看指定id thread 203 4:查…

数据结构day1

1.思维导图 2.定义一个简单宏或宏函数,实现两个数交换。 3.定义字符类型指针,指针指向n个连续堆区内存,输入,计算字符串长度 定义函数,实现内存申请 定义函数,解释字符串长度 定义函数,释放内…

河南文旅火爆出圈,来了解小魔推短视频矩阵的魅力!

最近几天四川文旅的抖音账号,1天发视频六十多条,增长粉丝20w,另外河北文旅抖音账号,一天发视频七十多条,增长粉丝30w,更有河南文旅抖音账号,单日发布上百条视频,实现涨粉15w&#xf…

最长上升子序列模型(LIS)

最长上升子序列模型就像它的名字一样,用来从区间中找出最长上升的子序列。它主要用来处理区间中的挑选问题,可以处理上升序列也可以处理下降序列,原序列本身的顺序并不重要。 模型 895. 最长上升子序列(活动 - AcWing&#xff0…

mysql原理--事务的隔离级别与 MVCC

1.事前准备 为了故事的顺利发展,我们需要创建一个表: CREATE TABLE hero (number INT,name VARCHAR(100),country varchar(100),PRIMARY KEY (number) ) EngineInnoDB CHARSETutf8;然后向这个表里插入一条数据:INSERT INTO hero VALUES(1, 刘…

如何才能拥有比特币 - 01 ?

如何才能拥有BTC 在拥有 BTC 之前我们要先搞明白 BTC到底保存在哪里?我的钱是存在银行卡里的,那我的BTC是存在哪里的呢? BTC到底在哪里? 一句话概括,BTC是存储在BTC地址中,而且地址是公开的,…

HTML111111111

在线编辑器 在线 HTML 空元素 没有内容的 HTML 元素被称为空元素。空元素是在开始标签中关闭的。 即使 在所有浏览器中都是有效的,但使用 其实是更长远的保障。 HTML 水平线 标签在 HTML 页面中创建水平线。 hr 元素可用于分隔内容。 HTML 折行 如果您希望…

CentOS上安装Mellanox OFED

打开Mellanox官网下载驱动 Linux InfiniBand Drivers 点击下载链接跳转至 Tgz解压缩执行 ./mlnxofedinstall发现缺少模块 # ./mlnxofedinstall Logs dir: /tmp/MLNX_OFED_LINUX.11337.logs General log file: /tmp/MLNX_OFED_LINUX.11337.logs/general.log Verifying KMP rpm…

【分布式技术】Elastic Stack部署,实操logstash的过滤模块常用四大插件

目录 一、Elastic Stack,之前被称为ELK Stack 完成ELK与Filebeat对接 步骤一:安装nginx做测试 步骤二:完成filebeat二进制部署 步骤三:准备logstash的测试文件filebeat.conf 步骤四:完成实验测试 二、logstash拥有…

时序分解 | Matlab实现CEEMDAN+PE自适应噪声完备集合经验模态分解+排列熵计算

时序分解 | Matlab实现CEEMDANPE自适应噪声完备集合经验模态分解排列熵计算 目录 时序分解 | Matlab实现CEEMDANPE自适应噪声完备集合经验模态分解排列熵计算效果一览基本介绍程序设计参考资料 效果一览 基本介绍 CEEMDANPE自适应噪声完备集合经验模态分解排列熵计算 运行环境m…

云轴科技ZStack 助力广西某地级市建设市级警务云视频系统

某市属于广西壮族自治区辖地级市,省域副中心城市,选择云轴科技ZStack 超融合解决方案支撑警务云视频监控联网管理系统(警务云视频系统),实现了该市对各辖区视频资源统一管理;同时也满足了该市警务云视频系统…

Git教程学习:01 Git简介与安装

目录 1 版本控制1.1 什么是版本控制系统?1.2 本地版本控制系统1.3 集中式版本控制系统1.4 分布式版本控制系统 2 Git简史3 Git的安装3.1 在Linux上安装3.2 初次运行Git前的配置 1 版本控制 1.1 什么是版本控制系统? 版本控制系统(Version Control Syst…

2.【C语言】(函数指针||sizeof||笔试题)

0x01.函数指针 void test(const char* str) {printf("%s\n", str); }int main() {void (*pf)(const char*) test;//pf是函数指针变量void (*pfarr[10])(const char*);//pfarr是存放函数指针的数组void (*(*p)[10])(const char*) &pfarr;//p是指向函数指针数组…

时空预测 | 基于图神经网络的时空预测

引言 时间序列是用于记录动态系统测量的主要数据类型,由物理传感器和在线过程(虚拟传感器)大量生成。因此,时间序列分析对于解锁可用数据中隐含的信息财富至关重要。随着图神经网络(GNNs)的最新进展&#x…

根据基因名批量查找它的Uniprot编号

背景: 前几天老师交给我一个任务,给我一个基因列表,让我查找它们所编码的蛋白质的蛋白质序列。我上了一下uniprot数据库,发现这个任务可以分成两步: 找到这个基因在Uniprot数据库中所对应的蛋白质编码根据蛋白质编码…