1.JVM(java虚拟机)
全称 java virtual macine ,一种能够运行java字节码的虚拟机,作为一种编程语言的虚拟机,实际上不只是专用于java语言,只要是生成的编译文件匹配JVM对加载编译文件格式要求,任何语言都可以由JVM编译运行。简单来说,就是一次编译,多次运行。
分为三分部:
(1)类加载子系统
也就是.class文件
(2)运行时数据区(内在结构)
分类五部分:
a. 方法区(method area)
类的所有字段和字节码,以及一些特殊方法;如构造器,接口代码也在这里定义。简单来说,所有定义的方法的信息都保存在该区域,静态变量,常,类的信息(构造方法,接口定义),运行时常量池都存在方法区中。虽然JAVA虚拟机规范把方法区描述为堆的一个逻辑分区,但是它却有一个别名叫NON-Heap(非堆),目的可能是为了和java的堆区分开。
b.堆(Heap)
虚拟机启动时自动分配创建,用于存放对象的实例,几乎所有的对象都在堆上分配内在,当对象无法在该空间申请到内在将抛出ourOfMoryErroy异常,同时也是垃圾收集器管理的主要区域。
同时又分为新生代,老年代和元空间。