JVM

 

 

 黄色的是线程私有,绿色的是共享的;

本地方法栈(线程私有):登记native 方法,在Executino Engine 执行时加载本地方法库

程序计数器(线程私有):就是一个指针,指向方法区中方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计。

方法区(线程共享):类的所有字段和方法字节码,以及一些特殊方法和构造函数,接口代码也在此定义,简单说,所有定义的方法的信息都保存在该区域,静态变量+常量+类信息【构造方法/接口定义】+运行时常量池 都存在方法区中,虽然java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-heap(非堆),目的应该是与java 堆区分开来。

 

Java(虚拟) 栈 (线程私有):java 线程执行方法的内存模型,一个线程对应一个栈,每个方法在执行的同时都会创建一个栈桢(用于存储局部变量表,操作数栈,动态链接,方法出口等信息)不存在垃圾回收问题,只要线程一结束该栈就释放,生命周期和线程一致。

程序计数器: 指向当前线程所执行的字节码指令的(地址)行号

 

堆(线程共享):虚拟机启动时创建,用于存放对象实例,几乎所有的对象(包含常量池)都在堆上分配内存,当对象无法再该空间申请到内存是将抛出OutOfMemoryError异常,同时也是垃圾收集器管理的主要区域,可通过 -Xmx -Xms 参数来分别指定最大堆和最小堆

 

posted @ 2019-07-28 19:50  lynee  阅读(94)  评论(0)    收藏  举报