Android开发之Java基础JVM和ClassLoader以及类加机制面试题
在面试中被问到Java相关的东西非常多:
首先说下Java内存模型:
主要由:
程序计数器,Java虚拟机栈,本地方法栈=>被线程私有
方法区 堆组成=>被线程共有
Java类加载机制ClassLoader
主要分为:启动类加载器(C,C++编写的),系统类加载器,扩展类加载器(也可以自定义加载器)
在Java中class字节码文件什么时候被JVM加载进内存呢?
分为两种情况,1,当调用类构造器 2.调用类中的静态变量或者静态方法
在Java中JVM默认的加载机制叫做双亲委派机制是Java推荐的机制,并不是强制的机制,如果我们需要打破这种加载机制可以自定义类加载器,重写loadClass方法即可。
什么是双亲委派机制呢?
当类加载器收到加载类或者资源请求时,通常来说首先会委托给自己的父类去加载,只有当父类找不到指定类或者资源时,才会执行自身的类加载过程就叫做双亲委派机制。
Java垃圾回收机制:
在Java垃圾回收中主要有一种叫做可达性分析,首先以GCRoot为根节点向下查找,能被GCRoot直接或间接引用到的对象为可用对象,相反不能被GCRoot直接或间接引用到的对象会被Java虚拟机当作垃圾在不确定的时间被回收掉。
问题:那些对象可以作为GCRoot?
1.Java虚拟机栈中引用的对象
2.方法区中静态引用的对象
3.仍处于存活中的线程对象
4.Native方法中引用的JNI对象
Java垃圾回收算法:
1.标记清除算法 优点:实现简单不需要将对象进行移动 缺点:需要中断进程内其它组件的执行
第一步标记mark,第二步清除swipe
首先以GCRoot为根节点向下查找不能直接俄或间接被GCRoot引用到的对象会被标记视并且为垃圾被GC在不确定的时间被回收
2.复制算法 优点:按照顺序分配内存空间即可,实现简单运行高效不用考虑内存碎片 缺点:可用内存大小为原来的一半,对象存活率高时会频繁进行复制
将现有空间分为两块,每次之使用其中的一块,在垃圾回收时将正在使用中的内存中存活的对象复制到未被使用的内存块中,之后清除正在使用的内存块中的所有对象,交换两个内存的角色完成垃圾回收
Android开发之Java基础JVM和ClassLoader以及类加机制面试题相关推荐
- Android开发之Java基础面试题抽象类和接口的区别
抽象类和接口的区别? 三个方面说: 1.成员特点: 抽象类:成员变量,可以是变量也可以是常量成员方法:可以是抽象方法,也可以是非抽象方法构造方法:有构造方法接口:成员变量,只有常量没有构造方法成员方法 ...
- android语音播放工具类,Android开发之MediaPlayer多媒体(音频,视频)播放工具类
本文实例讲述了Android开发之MediaPlayer多媒体(音频,视频)播放工具类.分享给大家供大家参考,具体如下: package com.android.imooc.chat; import ...
- android java设计模式,Android开发之Java设计模式基础篇
今日我们就Android开发中的一些设计模式做一些 根底性的 主宰,本次就Android项 目标架构设计 有关内容做 综合: 1. 静态工厂 步骤 静态工厂 步骤 可以算是工厂 步骤加单例模式的整合在 ...
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天就他们的子类在标准情况和多线 ...
- Android工程师进阶第一课 夯实Java基础 JVM内存模型和GC回收机制
开篇词:跳出舒适区,走在Android行业的前端 你好,我是姜新星,一个深耕 Andorid 领域的老工程师. 记得 2010 年毕业典礼上,某位老师说"你们是最幸福的一届毕业生,正好赶上中 ...
- 安卓开发之Java基础(1)——第一个Java程序
1.计算机软件和硬件: ①计算机软件可以使计算机按照事先预定好的顺序额完成特定的功能,按照功能可以划分为:系统软件{DOS(Disk Operating System).Windows.Linux. ...
- Android开发之Java的IO流读写的十种方法
直接上代码: package com.xiayiye.honorfirst.io;import java.io.BufferedInputStream; import java.io.Buffered ...
- Android开发之Java和Kotlin混合开发互相跳转报错的问题
老套路报错如下: 关于这个错误我检查了不知道多少遍了,包路径啥的XML配置也都是没问题.我思来想去最后发现是Kotlin环境的问题: 我的项目是个Java版本的项目,然后再Java项目里面新建的Kot ...
- Android开发之Java和Calendar日期上一年,上一个月,前一天,前一周的方法
公司做的项目要求选择日期可以选择上一个月的,很简单,但是涉及到临界日期,例如跨年 直接的问题从2019.1.1往前一个月那就不简单了,于是找到相关方法自己尝试下.理解出了两个往前一年的区别 看下图: ...
最新文章
- flash流媒体资料
- windows 报错 没有文件扩展.vbs的脚本引擎 解决方法
- 音视频技术开发周刊 63期
- 前端学习(2871):Vue路由权限『前后端全解析』2
- 2021中国新锐品牌发展研究:食品饮料行业报告
- Python网络编程之socketserver实现多并发
- 从头到尾谈一下HTTPS
- 数据库优化之简单理解
- 蒙特卡洛模型之神奇的布丰投针实验
- API激光跟踪仪SDK基础使用
- EMD、EEMD模态混叠、端点效应及改进研究(转)
- BP神经网络学习与代码预演
- 企业招聘大数据人才 看重的是哪些方面?
- 【文学欣赏】《卖米》北京大学首届校园原创文学大赛一等奖
- 整合UWALOHA和VBF
- pixel 刷入自己编译的Android 8.0 安装Xposed 显示 Verified Boot (dm-verity) prevents the device from booting
- CST——贴片天线仿真
- Keil5 平台 S3C2440裸机程序开发-----中断系统/UART
- 【数据结构】红黑树前置知识——4阶B树
- matplotlib的Text、FontProperties对象、字体(font)属性|中文字体的设置|图像标题、label字体的设置
热门文章
- 《c语言从入门到精通》看书笔记——第8章 数组
- html折叠菜单列子,基于Vue.js+bootstrap4的左侧可伸缩式菜单
- linux让脚本在指定时间运行程序,如何限制Linux命令程序运行的时间
- php中for循环控制讲解,PHP教程第九讲——PHP开发基础:PHP的循环控制语句
- oracle long类型转换成字符串_数值类型在计算机中的保存形式以及类型转换的思考和尝试...
- Java中的注解--annotation
- 第一次作业(李奇峰 201731062426)
- sqlserver 2014 删除主键约束
- 查询进程打开的文件(转)
- k8s总结(脑图图片)