[JVM知识点梳理]JVM之内存管理机制

2019-03-15  本文已影响0人  满天星爱我

运行时内存区域划分

Java源文件(.java文件)会被Java编译器编译为字节码文件(.class文件),再由JVM中的类加载器去加载各个类的字节码文件,加载完成后交给JVM执行引擎执行。

在Java程序执行过程中,会动态地将内存划分为如下几大区域:

其中这些区域又可划分为两大类

程序计数器

在Java的内存分配中有这么一段话:

如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值为空。

上述这句话引入了一个问题:

我们知道,程序计数器用来存放字节码指令的地址;通过这个地址,虚拟机就能知道执行到哪里,以下下一步执行什么,但是调用native方法,值就变空了,那么机器不就直接崩溃了吗?

解释:当线程中调用native方法的时候,则重新启动一个新的线程,那么新的线程的计数器为空则不会影响当前线程的计数器,相互独立。而调用此方法的线程就会处于阻塞状态,直到另外一个线程执行结束才会恢复到运行状态

虚拟机栈

上面提到了栈帧,那么什么是栈帧呢
解释:栈帧用来存储局部变量表操作栈动态链接方法出口等信息。

局部变量表

栈异常

本地方法栈

Java堆

方法区

运行时常量池

对象访问

主流访问方式有两种:句柄和直接指针

上一篇 下一篇

猜你喜欢

热点阅读