当前位置: 首页 > news >正文

网站用户体验优化方案/最有效的免费推广方法

网站用户体验优化方案,最有效的免费推广方法,永康高端网站建设,网站开发验证码的有效性什么是是可达性分析算法? 现代虚拟机基本都是采用可达性分析算法来判断对象是否存活,可达性算法的原理是以一系列叫做 GC Root 的对象为起点出发,引出它们指向的下一个节点,再以下个节点为起点,引出此节点指向的下一…

什么是是可达性分析算法?

现代虚拟机基本都是采用可达性分析算法来判断对象是否存活,可达性算法的原理是以一系列叫做  GC Root  的对象为起点出发,引出它们指向的下一个节点,再以下个节点为起点,引出此节点指向的下一个结点。这样通过 GC Root 串成的一条线就叫引用链),直到所有的结点都遍历完毕,如果相关对象不在任意一个以 GC Root 为起点的引用链中,则这些对象会被判断为垃圾对象,会被 GC 回收。

如图示,如果用可达性算法即可解决上述循环引用的问题,因为从GC Root 出发没有到达 a,b,所以 a,b 可回收。

a, b 对象可回收,就一定会被回收吗?

并不是,对象的 finalize 方法给了对象一次垂死挣扎的机会,当对象不可达(可回收)时,当发生GC时,会先判断对象是否执行了 finalize 方法,如果未执行,则会先执行 finalize 方法,我们可以在此方法里将当前对象与 GC Roots 关联,这样执行 finalize 方法之后,GC 会再次判断对象是否可达,如果不可达,则会被回收,如果可达,则不回收!

注意: finalize 方法只会被执行一次,如果第一次执行 finalize 方法此对象变成了可达确实不会回收,但如果对象再次被 GC,则会忽略 finalize 方法,对象会被回收!这一点切记!

GC Roots 到底是什么东西呢,哪些对象可以作为 GC Root 呢?

  • 虚拟机栈(栈帧中的本地变量表)中引用的对象

  • 本地方法栈中 JNI(即一般说的 Native 方法)引用的对象

  • 方法区中类静态属性引用的对象

  • 方法区中常量引用的对象

便于记忆,称他为两栈两方法!下面我们一一介绍一下:

1、虚拟机栈中引用的对象

如下代码所示,a 是栈帧中的本地变量,当 a = null 时,由于此时 a 充当了 GC Root 的作用,a 与原来指向的实例 new Test() 断开了连接,所以对象会被回收。

publicclass Test {public static  void main(String[] args) {Test a = new Test();a = null;}
}

2、方法区中类静态属性引用的对象

如下代码所示,当栈帧中的本地变量 a = null 时,由于 a 原来指向的对象与 GC Root (变量 a) 断开了连接,所以 a 原来指向的对象会被回收,而由于我们给 s 赋值了变量的引用,s 在此时是类静态属性引用,充当了 GC Root 的作用,它指向的对象依然存活!

public class Test {public static Test s;public static  void main(String[] args) {Test a = new Test();a.s = new Test();a = null;}
}

3、方法区中常量引用的对象

如下代码所示,常量 s 指向的对象并不会因为 a 指向的对象被回收而回收

public class Test {public static final Test s = new Test();public static void main(String[] args) {Test a = new Test();a = null;}
}

4、本地方法栈中 JNI 引用的对象

这是简单给不清楚本地方法为何物的童鞋简单解释一下:所谓本地方法就是一个 java 调用非 java 代码的接口,该方法并非 Java 实现的,可能由 C 或 Python等其他语言实现的, Java 通过 JNI 来调用本地方法, 而本地方法是以库文件的形式存放的(在 WINDOWS 平台上是 DLL 文件形式,在 UNIX 机器上是 SO 文件形式)。通过调用本地的库文件的内部方法,使 JAVA 可以实现和本地机器的紧密联系,调用系统级的各接口方法,还是不明白?见文末参考,对本地方法定义与使用有详细介绍。

当调用 Java 方法时,虚拟机会创建一个栈桢并压入 Java 栈,而当它调用的是本地方法时,虚拟机会保持 Java 栈不变,不会在 Java 栈祯中压入新的祯,虚拟机只是简单地动态连接并直接调用指定的本地方法。

JNIEXPORT void JNICALL Java_com_pecuyu_jnirefdemo_MainActivity_newStringNative(JNIEnv *env, jobject instance,jstring jmsg) {
...// 缓存String的classjclass jc = (*env)->FindClass(env, STRING_PATH);
}

如上代码所示,当 java 调用以上本地方法时,jc 会被本地方法栈压入栈中, jc 就是我们说的本地方法栈中 JNI 的对象引用,因此只会在此本地方法执行完成后才会被释放。

 

http://www.jmfq.cn/news/4944295.html

相关文章:

  • 做购物类网站有哪些/医疗器械龙头股
  • 网页设计与网站建设案例教程/宁波seo基础入门
  • 设计师招聘网站有哪些/怎样制作一个自己的网站
  • 推广网站怎么建/seo优化主要工作内容
  • 珠海网站推广/郑州网络营销公司哪个好
  • 网站建设方案案例/网络营销策划方案800字
  • 网站建设长春/百度学术官网论文查重免费
  • 南昌企业做网站设计/hao123网址导航
  • 国内建网站流程/各大搜索引擎提交入口
  • 做机械的外贸网站/长沙百度关键词排名
  • 网站开发需要准备什么/网络营销推广系统
  • 公司网站建设技术/seo产品推广
  • 广东品牌网站建设平台/搜索引擎网站
  • vue.js 可以做网站吗/如何做好网络营销管理
  • 网站建站公司排名/搜狗网
  • 平台网站的建设需求/做网站设计的公司
  • 阿里服务器怎么做网站服务器吗/高级搜索
  • 网站的功能建设/龙岗网站推广
  • 珠海营销网站建设/个人网站推广
  • 组织建设是什么/网站seo排名培训
  • 车机油哪个网站做的好/it培训班
  • 长沙网上商城网站建设方案/百度数据分析工具
  • 成都 网站建设 公司/全球网站流量排名查询
  • 广西网络网站建设/推广资源网
  • 广州疫情最新动态知乎/企业站seo外包
  • 如何建设移动端网站/网站建设方案开发
  • 单页网站模板做seo/宁波 seo排名公司
  • 网站字体字号/网络广告宣传平台
  • 淘宝客建立网站/可以访问违规网站的浏览器
  • 梁山做网站价格/优化大师软件大全