首先是通过网上图片自己所画的java虚拟机内存图
1.程序计数器
程序计数器与线程的相关的
当一个线程停止工作后,在次启动该线程,线程是如何回到上一次停止工作的地方,此时便应用到了程序计数器
2.本地方法栈
它就是与外界一些关联,比如操作系统之类
提供一些Native方法服务
3.虚拟机栈
虚拟机栈中储存的是局部变量,操作数表,动态连接,方法出口等等
每个方法被执行时会创建一个对应的线帧
方法的调用就是将该线帧压入栈,当该方法调用完后线帧出栈
在这个区域中可以抛出两个异常分别是:
StackOverflowError异常:线程请求的栈深度大于虚拟机所允许的深度
OutOfMemoryError异常:如果虚拟机可动态扩展,如果扩展时无法申请到足够的内存时会抛出
4.堆
堆就是存放new出来的东西,所有的new出来的实例对象都存放在堆中
堆中没有内存可以分配时会抛出OutOfMemoryError异常
堆也是垃圾收集器管理的主要区域
5.方法区
方法区是储存被虚拟机加载的类信息,常量,静态变量,编译器编译后的代码
永生代便在方法区内
前3个是线程不共享,后边两个是线程共享
这篇文章用于自己学习,对jvm有一定的印象
这篇文章讲的比较详细