备战- Java虚拟机
备战- Java虚拟机
试问岭南应不好,却道,此心安处是吾乡。
简介:备战- Java虚拟机
一、运行时数据区域
程序计算器、Java 虚拟机栈、本地方法栈、堆、方法区
在Java 运行环境参考链接:https://www.cnblogs.com/taojietaoge/p/10264416.html。
直接内存
在 JDK 1.4 中新引入了 NIO 类,它可以使用 Native 函数库直接分配堆外内存,然后通过 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在堆内存和堆外内存来回拷贝数据。
二、垃圾收集
垃圾收集主要是针对堆和方法区进行。程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后就会消失,因此不需要对这三个区域进行垃圾回收。
引用计数算法
为对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。
在两个对象出现循环引用的情况下,此时引用计数器永远不为 0,导致无法对它们进行回收。正是因为循环引用的存在,因此 Java 虚拟机不使用引用计数算法。
1 public class Test { 2 3 public Object instance = null; 4 5 public static void main(String[] args) { 6 Test a = new Test(); 7 Test b = new Test(); 8 a.instance = b; 9 b.instance = a; 10 a = null; 11 b = null; 12 doSomething(); 13 } 14 }