2020年12月15日

JVM - 垃圾回收算法

摘要: 总结 N代表内存的大小。 复制算法只访问一半的内存,所以它最快; 标记清除要遍历一整个内存N; 标记压缩除了遍历一遍内存N,还要走一遍移动的过程; 1. 标记-清除算法(Mark-Sweep) 算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 阅读全文

posted @ 2020-12-15 22:54 frank_cui 阅读(116) 评论(0) 推荐(0)

JVM - 怎么判断对象是否可以被回收? GC Roots?

摘要: 一般有两种方法来判断: 引用计数器:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题; 可达性分析:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何 阅读全文

posted @ 2020-12-15 22:11 frank_cui 阅读(307) 评论(0) 推荐(0)

JVM - 栈上分配 + 逃逸分析 + 标量替换

摘要: 栈上分配 虚拟机提供的一种优化技术,基本思想是,对于线程私有的对象,将它打散分配在栈上,而不分配在堆上。好处是对象跟着方法调用自行销毁,不需要进行垃圾回收,可以提高性能。栈上分配需要的技术基础,逃逸分析。逃逸分析的目的是判断对象的作用域是否会逃逸出方法体。注意,任何可以在多个线程之间共享的对象,一定 阅读全文

posted @ 2020-12-15 21:30 frank_cui 阅读(813) 评论(0) 推荐(0)

JVM - 方法调用方式(静态分配,动态分配)

摘要: 总结 静态分配,用于方法的重载 动态分配,用于方法的多态 请看蓝色的标记部分: 当通过h1, h2去调用共同的接口方法时,就是常见的多态应用。这时是动态分配,看“实际类型 Actual Type”。 当把h1, h2作为参数传给“重载的方法”时,这时是静态分配,要看“静态类型 Static Type 阅读全文

posted @ 2020-12-15 20:42 frank_cui 阅读(334) 评论(0) 推荐(0)

JVM - native方法

摘要: 阅读全文

posted @ 2020-12-15 12:39 frank_cui 阅读(104) 评论(0) 推荐(0)

JVM - 类加载机制

摘要: 总结 1. 加载阶段 (Loading) 简单描述: 在Java程序运行之前JVM会把编译完成的.class二进制文件加载到内存,后续提供程序使用,这里用到的就是类加载器ClassLoader(JVM - 双亲委派机制 Parent-Delegation Model)。 详细描述: 虚拟机需要完成以 阅读全文

posted @ 2020-12-15 00:36 frank_cui 阅读(59) 评论(0) 推荐(0)

JVM - 类加载器 ClassLoader + 双亲委派机制 Parent-Delegation Model

摘要: 1. 双亲委派模型 不是继承关系,而是委托关系。 从Java虚拟机的角度来讲,只存在两种不同的类加载器: 一种是启动类加载器(Bootstrap ClassLoader),仅按照文件名识别,如rt.jar,名字不符合的类库即使放在lib目录中也不会被加载。这个类加载器使用C++语言实现,是虚拟机自身 阅读全文

posted @ 2020-12-15 00:27 frank_cui 阅读(176) 评论(0) 推荐(0)

导航

levels of contents