标签:安全 等于 多个 rom 因此 接口 垃圾 实现类 搜索
1.类装载子系统:装载具有合适名称的类或者接口
2.执行引擎:负责执行包含在已装载类或接口中的指令。
每个jvm中都会包含:
方法区(持久代),java堆(heap),java栈(stack),指令计数器(寄存器),本地方法栈。
java堆:保存对象实例。
java栈:保存基本类型,返回结果,非基本类型数据在堆中的指针。
方法区:保存类信息,静态变量,或者是被定义为final的常量。
其中方法区与堆为线程共享。
程序计数器、虚拟机栈、本地方法栈是每个线程私有的内存空间,随线程而生,随线程而亡。例如栈中每一个栈帧中分配多少内存基本上在类结构去诶是哪个下来时就已知了,因此这3个区域的内存分配和回收都是确定的,无需考虑内存回收的问题。
但方法区和堆就不同了,一个接口的多个实现类需要的内存可能不一样,我们只有在程序运行期间才会知道会创建哪些对象,这部分内存的分配和回收都是动态的,GC主要关注的是这部分内存
判断一个对象已死的方法:可达性分析。
所有已生成的对象都是一个称为“GC Roots"的子树,从GC roots开始往下搜索,搜索经过的路径成为引用链。当一个对象到GC roots没有可用引用链时,就称这个对象是不可达的。
Java技术体系中所提倡的自动内存管理最终可以归结为自动化的解决2个问题:给对象分配内存以及回收分配给对象的内存。
大多数情况下,对象在新生代Eden区分配。当Eden区没有足够的内存时,虚拟机将发起一次Minor GC。
大对象是指需要大量连续内存空间的Java对象(例如很长的字符串以及数组)。
JVM为每个对象定义一个对象年龄计数器。
标签:安全 等于 多个 rom 因此 接口 垃圾 实现类 搜索
原文地址:http://www.cnblogs.com/haolan/p/7707924.html