乐趣区

关于java:JVM-内存区域java运行时数据区

依据《java 虚拟机标准》,java 虚拟机所治理的内存区域如下图所示:

线程共享的内存区域,存储的是对象的实例。

从回收内存的角度看,因为大部分的垃圾回收器都是基于分代回收实践进行垃圾回收的,所以能够将其分为新生代,老年代等。但当初 hotspot 外面也呈现了很多不采纳分代回收的新垃圾回收器,所以上述划分仅针对经典的基于分代回收的垃圾回收器

从分配内存的角度看,所有线程共享的对可划分为多个线程公有的调配缓冲区,用来晋升对象调配是的效率

  • 办法区

线程共享的内存区域,用于存储已被虚拟机加载的类型信息、常量、动态变量、及时编译器编译后的代码缓存等数据。永恒代和元空间都是 hotspot 虚拟机中对办法区的一个实现,在 jdk1.8 就用元空间取代了永恒代,彻底废除了永恒代。

  • 程序计数器

线程公有的,记录了以后线程执行到了哪一步,如正在执行的是一个 java 办法,则记录的是正在执行的虚拟机字节码指令的地址

为什么须要?须要在线程的切换后复原到正确的执行地位;程序控制流如分支,循环,跳转,异样解决,线程复原都须要依赖于这个程序计数器来实现

  • 虚拟机栈

线程公有的,生命周期与线程雷同,当调用一个办法时,java 虚拟机就会创立一个栈帧,这个栈帧中蕴含着局部变量表,操作数栈,动静连贯,办法进口等信息。从一个办法的被调用到执行结束的过程就对应着栈帧在虚拟机中从入栈到出栈的过程。

  • 本地办法栈

线程公有的,与虚拟机栈相似,只不过他是为执行本地办法(native)提供服务的。《java 虚拟机标准》并没有规定其实现形式,hotspot 虚拟机间接将本地办法栈与虚拟机栈合二为一

退出移动版