Android面试题——JVM

news2024/11/16 17:58:23

Android平台的虚拟机是基于栈的吗?

在这里插入图片描述
在这里插入图片描述

JVM运行时数据区

在这里插入图片描述

运行时栈

在这里插入图片描述

基于栈的虚拟机

在这里插入图片描述
在这里插入图片描述
第0行表示将一个Int型的1推送至操作数栈栈顶,程序计数器指向第0行。第一行字节码表示将栈顶的int型数值存入第一个本地变量,这两行代码就进行了给局部变量赋值的操作,第二三行同理。第4、5行表示将局部变量表的数入栈,第六行表示将栈顶两int型数值相加并将结果压入栈顶。第七行表示将单字节常量(-128~127)9推送至栈顶,因为这个字节占用两个字节码单元,所以下一行的行号是 9。9表示将栈顶两个数相乘并放入栈顶,第a行表示将栈顶的数存入本地变量。从这些操作我们可以看出都是操作操作数栈的。

Dalvik虚拟寄存器

JVM基于栈则意味着需要去栈中读写数据,所需的指令会更多,这样会导致速度变慢,对于性能有限的移动设备,显然不是很适合的。DVM是基于寄存器的,它没有基于栈的虚拟机在复制数据时而使用的大量的出入栈指令,同时指令更紧凑、更简洁。但是由于显式指定了操作数,所以基于寄存器的指令会比基于栈的指令要大,但是由于指令数量的减少,总的代码数不会增加多少.
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

各自特点

在这里插入图片描述

如何看待基于栈的虚拟机?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如何看待基于寄存器的虚拟机

在这里插入图片描述

为什么dex文件比class文件更适合移动端

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

class文件结构

在这里插入图片描述
在这里插入图片描述
· u1:1字节,无符号类型。
· u2:2字节,无符号类型。
· u4:4字节,无符号类型。
· u8:8字节,无符号类型。

文件头

在这里插入图片描述

常量池

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类信息

在这里插入图片描述

字段表

在这里插入图片描述

方法表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

属性信息

在这里插入图片描述

dex文件

在这里插入图片描述

class文件 vs dex文件

在Java SE程序中,Java类被编译成一个或多个.class文件,并打包成jar文件,而后JVM 会通过相应的.class 文件和jar 文件获取相应的字节码。执行顺序为.java 文件→.class文件→.jar文件,而DVM会用dx工具将所有的.class文件转换为一个.dex文件,然后DVM会从该.dex文件读取指令和数据。执行顺序为.java文件→.class文件→.dex文件。
jar文件里面包含多个.class文件,每个.class文件里面包含了该类的常量池、类信息、属性等。当JVM加载该.jar文件的时候,会加载里面的所有的.class文件,JVM的这种加载方式很慢,对于内存有限的移动设备并不合适。而在.apk文件中只包含了一个.dex文件,这个.dex文件将所有的.class里面所包含的信息全部整合在一起了,这样再加载就加快了速度。.class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的.class文件整合到.dex文件中,减少了I/O操作,加快了类的查找速度。
在这里插入图片描述
在这里插入图片描述

索引区

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

你能不能自己写一个叫做java.lang.Object的类?

在这里插入图片描述
在这里插入图片描述

字节码加载

在这里插入图片描述

方法区

在这里插入图片描述

方法区实现

在这里插入图片描述

Java程序的双亲委派模型

在这里插入图片描述

Android程序的双亲委派模型

在这里插入图片描述
在这里插入图片描述

ClassLoader源码

在这里插入图片描述
在这里插入图片描述

加载自己写的Object类

在这里插入图片描述

双亲委派模型的好处

在这里插入图片描述

为什么要打破双亲委派模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

所有被new出来的实例,都是放在堆中的吗?

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

GC为什么会导致应用程序卡顿?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分代回收

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

垃圾检测算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

垃圾回收算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Android平台虚拟机中的CG又是怎样的?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

双重检测的单例,为什么还要加volatile关键字?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【开源硬件】STM32F030R8T6系统板

【开源硬件】STM32F030R8T6系统板✅STM32F030R8T6系统板兼容极海APM32F030R8T6 🔰支持stm32cubemx工程配置成STM32F030R8T6生成的MDK工程,经过Keil编译后可以直接使用ST-Link v2烧录器上传到极海APM32F030R8T6芯片当中,完全做到平替使用&…

[Java·算法·中等]LeetCode22. 括号生成

每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2分析思路3题解3👉️ 力扣原文 题目 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 输入:n 3 输出&…

Unity Lighting -- 配置阴影

本笔记使用URP管线进行说明 配置渲染管线阴影参数 在项目窗口中,主菜单中选择Edit -> ProjectSettings,然后选择Quality,查看当前项目所使用的URP资源,目前例子所使用的资源为UniversalRP_HighQuality资源 在工程窗口中,会有对应的渲染管…

1060:均值

一。题目 1060:均值 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 101855 通过数: 62518 【题目描述】 给出一组样本数据,包含n个浮点数,计算其均值,精确到小数点后4位。 【输入】 输入有两行,第一行包含…

【Echarts】在Vue中使用Echarts

在Vue中使用Echarts引入第三方库vue-echartsvue-echarts安装与使用vue2中使用Echartsvue-echarts安装vue2中使用Echartsvue3中使用Echartsvue-echarts安装vue3中使用Echarts引入第三方库vue-echarts Vue是数据驱动dom,改变数据让图表自动根据数据变化更新&#xff…

Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法(亲测有效)

关于/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28’ not found出现报错,建议不要使用源码包去编译并升级。在下文有分享一个使用官方的Debian软件包去升级使用的方法。仅供参考! 环境 # uname -a Linux Ubuntu 5.4.0-144-generic #161~18.04.…

ubuntu server 18.04使用tensorflow进行ddqn训练全过程

0. 前言 需要使用ddqn完成某项任务,为了快速训练,使用带有GPU的服务器进行训练。记录下整个过程,以及遇到的坑。 1. 选择模板代码 参考代码来源 GitHub 该代码最后一次更新是Mar 24, 2020。 环境配置: python3.8 运行安装脚本…

超全的命令(代码)执行漏洞无回显的姿势总结(附带详细代码和测试分析过程)

目录 漏洞代码 突破方式 重定向 dnslog外部通信 burpsuite burpcollaborator外部通信 日志监听 netcat监听 反弹shell的各种姿势 漏洞代码 <?php shell_exec($_GET[a]); ?>这里使用了无回显的shell执行函数shell_exec&#xff0c;给html目录的权限是777 突破方…

C++之多态 虚函数表

多态 多态是在不同继承关系的类对象&#xff0c;去调用同一函数&#xff0c;产生了不同的行为。 需要区分一下&#xff1a;1、菱形虚拟继承&#xff0c;是在继承方式前面加上virtual&#xff1b; class Person {}; class Student : virtual public Person {}; class Teacher…

【深蓝学院】手写VIO第2章--IMU传感器--笔记

0. 内容 1. 旋转运动学 角速度的推导&#xff1a; 左ω∧\omega^{\wedge}ω∧&#xff0c;而ω\omegaω是在z轴方向运动&#xff0c;θ′[0,0,1]T\theta^{\prime}[0,0,1]^Tθ′[0,0,1]T 两边取模后得到结论&#xff1a; 线速度大小半径 * 角速度大小 其中&#xff0c;对旋转矩…

Spring Security 实现自定义登录和认证(1):使用自定义的用户进行认证

1 SpringSecurity 1.1 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>1.2 编写配置类 在spring最新版中禁用了WebSecurityConfigurerAdapter…

04-项目立项:项目方案、可行性分析、产品规划、立项评审

文章目录4.1 项目方案立项阶段4.2 可行性分析4.3 产品规划4.4 立项评审4.4.1 立项说明书的主要内容4.4.2 立项评审流程章节总结4.1 项目方案 学习目标&#xff1a; 能够输出产品项目方案 项目开发设计流程的主要阶段&#xff1a; 立项阶段 → 设计阶段 → 开发阶段 → 测试阶…

机器学习 | 实验一:线性回归

文章目录&#x1f4da;描述&#x1f4da;数据&#x1f4da;监督学习问题&#x1f4da;二维线性回归&#x1f4da;理解J(θ)⭐️对应笔记 单变量线性回归多变量线性回归 &#x1f4da;描述 第一个练习将提供线性回归练习。这些练习已经在Matlab上进行了广泛的测试。但它们也应该…

Spring Boot @Aspect 切面编程实现访问请求日志记录

aop切面编程想必大家都不陌生了&#xff0c;aspect可以很方便开发人员对请求指定拦截层&#xff0c;一般是根据条件切入到controller控制层&#xff0c;做一些鉴权、分析注解、获取类名方法名参数、记录操作日志等。 在SpringBoot中使用aop首先是要导入依赖如下&#xff1a; …

软工2023个人作业二——软件案例分析

项目内容这个作业属于哪个课程2023年北航敏捷软件工程这个作业的要求在哪里个人作业-软件案例分析我在这个课程的目标是学习并掌握现代软件开发和项目管理技术&#xff0c;体验敏捷开发工作流程这个作业在哪个具体方面帮助我实现目标从软件工程角度分析比较我们所熟悉的软件&am…

Doris集成Spark读写的简单示例

Doris集成Spark读写的简单示例 文章目录Doris集成Spark读写的简单示例0、写在前面1、Spark Doris Connector介绍2、基本示例2.1 提前准备表和数据2.2 新建项目2.3 使用SQL方式进行读写2.3.1 代码2.3.2 相关Error2.4 使用DataFrame方式读写数据&#xff08;**batch**&#xff09…

CS5261typec转HDMI|CS5260typec转VGA视频转换方案参考设计与PCB板开发

CS5261typec转HDMI|CS5260typec转VGA视频转换方案参考设计与PCB板开发 CS5261 CS5260分别是Type-C转HDMI或者VGA高性能 视频转换芯片&#xff0c;CS5261 是Type-C转HDMI 4K30HZ转换芯片 CS5260是Type-C转VGA 转换芯片。CS5261与CS5260两种芯片的功能和参数特性如下&#xff1…

热乎的面经——初出茅庐

⭐️前言⭐️ 本篇文章记录博主与2023.03.04面试上海柯布西公司&#xff0c;一面所被问及的面试问题&#xff0c;回答答案仅供参考。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录收获&am…

EdgeYOLO学习笔记

EdgeYOLO学习笔记 EdgeYOLO: An Edge-Real-Time Object Detector Abstract 本文基于最先进的YOLO框架&#xff0c;提出了一种高效、低复杂度、无锚的目标检测器&#xff0c;该检测器可以在边缘计算平台上实时实现。为了有效抑制训练过程中的过拟合&#xff0c;我们开发了一种…

git分支

分支什么是分支在版本控制过程中&#xff0c;同时推进多个任务&#xff0c;为每个任务&#xff0c;我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来&#xff0c;开发自己分支的时候&#xff0c;不会影响主线分支的运行。对于初学…