Java入门之了解JVM(26)

在程序运行期间,JIT(即时编译器)会对程序进行优化,如会将执行频率高的代码,按照方法为单位的原则进行编译运行(编译出来的代码存放在方法区),其中就包含了内存逃逸分析,内存逃逸分析的目的主要是为了减轻内存堆分配压力,内存逃逸分析主要通过分析方法内的对象是否能够“逃逸”,如果不能“逃逸”则启用栈内分配内存“逃逸”指的是什么?

通俗点解释,就是方法内的对象,是否能够逃到方法以外;即在方法内生成的对象是否被return返出去又或者是否用通过赋值传递出去

关于什么是“垃圾”和垃圾回收算法

什么是垃圾

java不像C/C++一样需要手动管理内存,这是因为这些工作都交给JVM的垃圾回收机制来完成了,那么JVM到底时如何判断一个对象是“垃圾”(无用的对象)的?针对什么是垃圾,JVM有2种算法可做到如下

1)引用计数器算法:

即通过对象是否被引用来判断是否为垃圾,但这种算法有个问题,就是当两个垃圾互相引用对象,那么引用计数器算法就无法标记这两个垃圾,而且在极端的情况下,很多无用的对象之间相互引用,就无法将其标记了,也就无法这些对象清除,这就是引用计数器算法的弊端,因此目前JVM并没有使用这种算法,而是使用可达性分析算法;

推荐阅读