JVM的初识

最近感觉自己的脚步跟不上自己的思想,可能自己有些浮了。所以想静下来巩固自己学习的一些基础知识。


JVM的基础架构图(初次画图):


我们今天主要就是说明内存区域区域是如何对应我们代码。简单的一个例子,

public static void main(String[] args) {

Student stu=new Student();

}

首先代码会被加载到方法区(main方法),然后new Student()则会被分配到堆内存中,再然后stu引用Student这个对象则会分配到栈中。计算器的功能则是负责代码是如何一步步运行的(个人理解)。


重点来了解一下JVM中的堆内存的结构。拷贝二张图


jdk1.7


jdk1.8

从上面的图中我们可以很清晰的看出堆内存划分的规则,Young Gen我们称之的年轻代,被划分三块,Eden、S0、S1。Old Memory我们称之老年代,加上我们称之永久代的区域Perm(jdk1.8之后就不存在,只有元空间,使用堆外内存)。

我们new的对象是如何在这个区域执行流转?我们大概的流程说明一下,Object--->Eden随着Eden的对象越来越多,就会将Eden的一直常驻对象转移到S0区域(minor GC),随之S0区域中也慢慢装下的时候,也会将一些不用的对象清除并转移剩下的对象到S1区域。在这个过程中,有些对象可能就一直在Young区域中我们就会将其转移到Old区域中。随着old区域也慢慢的装不下的时候,就会发生major GC。

(仅作为自己的学习总结,如果有不对的地方也欢迎大家的指正。)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容