面试题:Java是如何管理内存的?
答案:Java的内存管理就是对象的分配和释放问题。在Java中,程序员需要通过关键字new 为每个对象申请内存空间,所有的对象在堆中分配空间。另外,对象的释放是有GC决定和执行的。在Java中,内存的分配是由程序完成的。而内存的释放室友GC完成的,这种收支两条线的方法确实简化了程序员的工作。但同时,它也加重了JVM的工作。这也是Java程序运行速度较慢的原因之一。因为GC为了能够正确释放对象,必须监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,GC都需要进行监控。
监视对象状态是为了更加准确、及时地释放对象,而释放对象的根本原则就是该对象不再被引用。
为了更好的理解GC的工作原理,我们可以将对象考虑为有向图的顶点,将引用关系考虑为图的有向边,有向边从引用者指向被引用对象。另外,每个线程对象可以作为一个图的起始顶点,例如,大多程序从main进程开始执行,那么该图就是以main进程顶点开始的一棵根树。在这个有向图中,根顶点可达的对象都是有效对象,GC将不回收这些对象。如果某个对象与这个根顶点不可达,那么我们认为这个对象不再被引用,可以被GC回收。
更多,Java视频,Java教程尽在极悦Java培训,关注极悦官方微信,获得一手Java面试题。