以上就是整个编译的过程了小编接下来介绍类加载:编译将程序编译成字节码之后下一步就是类加载到内存的过程。
满洲网站制作公司哪家好,找
成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、
响应式网站设计等网站项目制作,到程序开发,运营维护。
成都创新互联公司于2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选
成都创新互联公司。
类加载的过程是在虚拟机内存的方法区进行这地方涉及到虚拟机内存。虚拟机内存区域划分为:程序计数器、栈、本地方法栈、堆、方法区(部分区域为运行时常量池)、直接内存。
程序计数器
程序计数器是一块较小的内存空间它可以看做是当前线程所执行的字节码的行号指示器。在JVM概念模型中字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。
栈
栈用于存储局部变量表、操作数栈、动态链接、方法出口等信息其中局部变量表存放了编译期克制的各种基本数据类型、对象引用它与程序计数器一样都是线程私有的。
本地方法栈
本地方法栈与上面介绍的虚拟机栈作用相似它们的区别不过是虚拟机栈为虚拟机执行Java方法(字节码)服务,而本地方法栈则为虚拟机使用的Native方法服务甚至有的虚拟机会把这两块合二为一。
堆
堆是JVM管理内存的一块它是被所有线程共享的一块区域,它的唯一目的是存放对象实例几乎所有的对象实例都在这里分配内存这地方也是垃圾收集管理的主要区域,从内存回收角度看现在垃圾收集器都采用分代收集算法,所以Java堆还可以进一步细分:新生代和老年代、而新生代进一步细分:Eden空间、FromSurvivor空间、To Survivor空间。为了效率考虑堆还可能划分为多个线程私有的分配缓冲区(TLAB)无论如何划分,都与存放内容无关无论哪个区域存放的依然是对象实例它们存在的目的只是为了更好的回收和分配内存而已。
网站栏目:Java虚拟机--一段Java程序的生命史(三)
链接分享:
http://cqcxhl.com/article/chcghe.html