jvm几个常见面试题整理

news2024/9/25 21:29:33
1. Full GC触发机制有如下5种情况。
  • (1)调用System.gc()时,系统建议执行Full GC,但是不必然执行。
  • (2)老年代空间不足。
  • (3)方法区空间不足。
  • (4)老年代的最大可用连续空间小于历次晋升到老年代对象的平均大小就会进行Full GC。
  • (5)由Eden区、S0(From)区向S1(To)区复制时,如果对象大小大于S1区可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小。
2.大对象直接分配到老年代的几种方式
  • 担保机制。minor gc后,survivor区空间不能容纳全部存活对象
  • 大对象直接进入老年代。比如很长的字符串,或者很大的数组等。
  • 长期存活的对象进入老年代。在堆中分配内存的对象,其内存布局的对象头中(Header)包含了 GC 分代年龄标记信息。如果对象在 eden 区出生,那么它的 GC 分代年龄会初始值为 1,每熬过一次 Minor GC 而不被回收,这个值就会增加 1 岁。当它的年龄到达一定的数值时(jdk1.7 默认是 15 岁),就会晋升到老年代中。
  • 动态对象年龄判定。当 Survivor 空间中相同年龄所有对象的大小总和大于 Survivor 空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,而不需要达到默认的分代年龄。
3.java虚拟机中堆与栈的关系

堆中存放的是对象,栈帧中保存的是对象引用,这个引用指向对象在堆中的位置。

4.栈顶缓存(Top-of-Stack Cashing,ToS)技术

HotSpot虚拟机的设计者提出了栈顶缓存(Top-of-Stack Cashing,ToS)技术。所谓栈顶缓存技术就是当一个栈的栈顶或栈顶附近元素被频繁访问,就会将栈顶或栈顶附近的元素缓存到物理CPU的寄存器中,将原本应该在内存中的读、写操作分别变成了寄存器中的读、写操作,从而降低对内存的读、写次数,提升执行引擎的执行效率。

5.栈帧的内部结构
  • 局部变量表(Local Variables)。

局部变量表最基本的存储单元是slot(变量槽)。局部变量表中存放编译期可知的各种基本数据类型(8 种)、引用(reference)类型、return Address类型的变量。

  • 操作数栈(Operand Stack)(或表达式栈)。
  • 动态链接(Dynamic Linking)(或指向运行时常量池的方法引用)。
  • 方法返回地址(Return Address)(或方法正常退出或异常退出的定义)。
  • 一些附加信息。例如,对程序调试提供支持的信息。

6、为对象分配内存:线程本地分配缓存区 TLAB(Thread Local Allocation Buffer,TLAB)

TLAB表示JVM为每个线程分配了一个私有缓存区域,这块缓存区域包含在Eden区内。简单说TLAB就是在堆内存中的Eden区分配了一块线程私有的内存区域。

(1)从内存模型角度来看,新生代区域继续对Eden区域进行划分,JVM为每个线程分配了一个私有缓存区域。

(2)多线程同时分配内存时,使用TLAB可以避免一系列的非线程安全问题,同时还能够提升内存分配的吞吐量,因此我们可以将这种内存分配方式称为快速分配策略

(3)所有Open JDK衍生出来的JVM都提供了TLAB的设计。

为什么有TLAB呢?原因如下。

(1)堆区是线程共享区域,任何线程都可以访问到堆区中的共享数据。

(2)由于对象实例的创建在JVM中非常频繁,因此在并发环境下从堆区中划分内存空间是线程不安全的。

(3)为避免多个线程操作同一地址,需要使用加锁等机制,进而影响分配速度。

7 使用“+”或String类的concat()方法拼接字符串是否存在字符串常量池中

(1)字符串常量池中不会存在相同内容的字符串常量。

(2)字面常量字符串与字面常量字符串的“+”拼接结果仍然在字符串常量池。

(3)字符串“+”拼接中只要其中有一个是变量或非字面常量,结果不会放在字符串常量池中。

(4)凡是使用concat()方法拼接的结果也不会放在字符串常量池中。

(5)如果拼接的结果调用intern()方法,则主动将常量池中还没有的字符串对象放入池中,并返回此对象地址。

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

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

相关文章

前端vite+vue3——自动化配置路由布局

文章目录 ⭐前言💖vue3系列文章 ⭐ 自动化配置路由💖引入vite版本自定义目录映射💖自动化读取文件下的路由💖main入口加载路由💖入口app.vue配置💖layout基础布局配置💖效果 ⭐总结⭐结束 ⭐前言…

python实现中国剩余定理

中国剩余定理又称孙子定理,是数论中一个重要定理。最早可见于我国的数学著作《孙子算经》卷下“物不知数”问题,原文如下: 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?即…

车载网络测试 - 总线基础 - CAN总线负载计算

我想做过CAN总线测试的都有遇到过拉高总线负载相关的测试,这个时候我们一般都会通过增加报文的数量或者减小报文的周期来实现,但是CAN总线上的负载到底是如何计算的呢?我想很多人都会有这个疑问吧,那么今天我们一起来看下如何计算…

CX341A 安装驱动与刷固件

参考 驱动安装1 DPDK编译:支持Mellanox 25Gbps网卡 - 知乎 NVIDIA Mellanox CX网卡固件、驱动系列操作 - 知乎 驱动安装2 Mellanox网卡驱动安装指南 Mellanox OFED_崇尚匀速 追求极致的技术博客_51CTO博客 驱动与固件: 家用万兆网络指南 6 - 比…

当前的脑机交互更像是自动化交互,而不是智能化交互

脑机交互是指通过直接连接人类大脑与外部设备,实现人与计算机、机器或其他设备之间的交互。目前的脑机交互技术还存在许多挑战和限制,因此可以说脑机交互还远远不成熟。当前的脑机交互更像是自动化交互,而不是智能化交互。 目前的脑机交互技术…

ArcGIS学习(六)地理数据库

ArcGIS学习(六)地理数据库 上个任务我们讲了一个非常重要的知识点一一坐标系。这个任务我们带来另外一个很重要的知识点一一地理数据库。 地理数据库的内容相比于坐标系简单很多! 首先,先让我们来学习下地理数据库的理论。 ArcGIS 中的地理数据库(Geodatabase)是一个用…

Verilog刷题笔记22

题目: Build a priority encoder for 8-bit inputs. Given an 8-bit vector, the output should report the first (least significant) bit in the vector that is 1. Report zero if the input vector has no bits that are high. For example, the input 8’b100…

2019年江苏省职教高考计算机技能考试——一道程序改错题的分析

题目:函数将str字符串中的5个数字字符串转换为整数,并保存在二维数组m的最后一行,各元素为3、-4、16、18、6。并经函数move处理后,运行结果如下: 18 6 3 -4 16 16 18 6 3 -4 -4 16 …

Spark安装(Yarn模式)

一、解压 链接:https://pan.baidu.com/s/1O8u1SEuLOQv2Yietea_Uxg 提取码:mb4h tar -zxvf /opt/software/spark-3.0.3-bin-hadoop3.2.tgz -C /opt/module/spark-yarn mv spark-3.0.3-bin-hadoop3.2/ spark-yarn 二、配置环境变量 vim /etc/profile…

macbook电脑如何永久删除app软件?

在使用MacBook的过程中,我们经常会下载各种App来满足日常的工作和娱乐需求。然而,随着时间的积累,这些App不仅占据了宝贵的硬盘空间,还可能拖慢电脑的运行速度。那么,如何有效地管理和删除这些不再需要的App呢&#xf…

【51单片机】外部中断和定时器中断

目录 中断系统中断介绍中断概念 中断结构及相关寄存器中断结构中断相关寄存器 外部中断实验外部中断配置软件设计实验现象 定时器中断定时器介绍51 单片机定时器原理51 单片机定时/计数器结构51 单片机定时/计数器的工作方式 定时器配置硬件设计软件设计实验现象 中断系统 本章…

运维必会篇-日志(错误日志,二进制日志,查询日志,慢查询日志)

日志 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过 程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日 志。 该日志是默认开启的&#x…

SpringBoot 事务管理Transactional 数据回滚 数据一致性

介绍 SpringBoot当中的事物他保证了一致性,要么全部一起成功(提交),要么一起失败,失败(回滚)后数据会回到当初的样子,是一组操作的集合。 事物类型 开启事物提交事物回滚事物 案…

计算机毕业设计 | SSM超市进销存管理系统(附源码)

1,绪论 1.1 开发背景 世界上第一个购物中心诞生于美国纽约,外国人迈克尔库伦开设了第一家合作商店,为了更好地吸引大量客流量,迈克尔库伦精心设计了低价策略,通过大量进货把商品价格压低,通过商店一次性集…

面试经典150题——两数之和 II - 输入有序数组

"The only limit to our realization of tomorrow will be our doubts of today." - Franklin D. Roosevelt 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 暴力求解的思路就是通过两次for循环,外层循环遍历整个数组,内层循环遍…

蓝桥杯Web应用开发-CSS3 新特性【练习二:获得焦点验证】

页面上有一个姓名输入框和一个密码输入框&#xff0c;当聚焦输入框时&#xff0c;输入框的背景颜色会发生改变&#xff0c; 新建一个 index3.html 文件&#xff0c;在其中写入以下内容。 <!DOCTYPE html> <html lang"en"><head><meta charset&…

画出TCP三次握手和四次挥手的示意图,并且总结TCP和UDP的区别

三次握手 第一次握手&#xff1a;客户端发送SYN包&#xff08;SYN1, seq0&#xff09;给服务器&#xff0c;并进入SYN_SENT状态&#xff0c;等待服务器返回确认包。第二次握手&#xff1a;服务器接收到SYN包&#xff0c;确认客户端的SYN&#xff0c;发送ACK包&#xff08;ACK1 …

c语言--指针数组(详解)

目录 一、什么是指针数组&#xff1f;二、指针数组模拟二维数组 一、什么是指针数组&#xff1f; 指针数组是指针还是数组&#xff1f; 我们类比一下&#xff0c;整型数组&#xff0c;是存放整型的数组&#xff0c;字符数组是存放字符的数组。 那指针数组呢&#xff1f;是存放…

css绘制向左三角形_纯css 实现三角形

首先这个思路的讲解 就是用到了 border 边框这个属性 一个div 可以设置四边边框 我们先把其他三条边都去掉 只留下一个边框 其他 在设置底边框的宽度 再把内容区域设置为0 就可以了 下面是代码 <div></div>div {width:0;height:0;border-top:30px solid red ;bor…

Django前后端分离之后端实践

django-admin startproject djweb 生成djweb项目 django-admin startapp news 生成news应用 配置models文件 class NewInfo(models.Model):title models.CharField(max_length30)content models.TextField()b_date models.DateField()read models.IntegerFie…