Android开发之Java基础JVM和ClassLoader以及类加机制面试题

本文深入探讨了Java内存模型,包括程序计数器、虚拟机栈、本地方法栈、方法区和堆的组成,以及类加载机制。重点讲述了双亲委派模型的工作原理。此外,还详细阐述了Java垃圾回收的可达性分析算法,明确了哪些对象可以作为GCRoot,并介绍了标记清除和复制算法的优缺点。
摘要由CSDN通过智能技术生成

在面试中被问到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.复制算法  优点:按照顺序分配内存空间即可,实现简单运行高效不用考虑内存碎片  缺点:可用内存大小为原来的一半,对象存活率高时会频繁进行复制

将现有空间分为两块,每次之使用其中的一块,在垃圾回收时将正在使用中的内存中存活的对象复制到未被使用的内存块中,之后清除正在使用的内存块中的所有对象,交换两个内存的角色完成垃圾回收

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值