目前内存的动态分配与内存回收技术已经相当成熟,那为什么我们还要去了解GC和内存分配呢?答案很简单:当需要排查各种内存溢出,内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。
有三部分内存区域:程序计数器,虚拟机栈,本地方法栈,它们随线程而生,随线程而灭。栈中的栈帧随着方法的进入和退出而有条不紊的进行着岀栈和如栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多的考虑回收的问题,因为随着方法结束了或者线程结束了,内存自然就跟着回收了。 而java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序运行期间才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的是这部分内存。
时间: 2024-10-07 13:45:11