qq376324789

                            JVM笔记

     java代码执行分为两部分:javac编译     java执行

    代码并不是由上往下执行的,会经过编译期重排序进行优化,存在依赖关系的代码不会被重排序,保证了代码最终执行结果的正确性!

     java虚拟机规范,运行时数据区通常包括:

             程序计数器(Program Counter Register)

             java栈(VM  Stack)

             本地方法栈(Native Method Stack)

             方法区(Method  Area)

             堆(Heap)

 

    * 不同的虚拟机厂商有不同的实现方式

 

程序计数器:

    程序计数器是用来指示执行哪条指令的,每个线程都需要有自己独立的程序计数器,并且不能互相被干扰,否则会影响正常的执行顺序。

 

java栈

    也就是我们常说的栈,函数中定义的基本类型变量,对象的引用变量都在函数的栈内存中分配,栈内存中的数据,没有默认初始值,需要手动设置。

 

本地方法栈

    本地方法栈和java栈的作用和原理非常相似,区别只不过是java栈是为执行java方法服务的,而本地方法栈则是为执行本地方法服务的

 

方法区

    方法区在jvm中也是一个非常重要的区域,它与堆一样,是被线程共享的区域,在方法区中,存储了每个类的信息(包含类的名称,方法信息,字段信息)、静态变量、常量以及编译器编译后的代码等。

 

    堆内存用来存放new创建的对象,堆内存中的实体是用来封装数据的,这些数据都有默认初始值,堆内存中的实体不再被指向时 ,jvm会启动垃圾回收机制。 

 

运行类过程:方法区找到方法--堆中实例化对象--调用栈(指向堆中实例)

相关文章: