JVM学习笔记(2)——运行时数据区概述及线程-创新互联
在上一篇中我们讲了JVM的类加载子系统,现在我们就来到了运行时数据区。而不同版本的JVM对于内存的划分方式和管理机制存在着部分差异(最典型的就是方法区实现的差异),本文针对经典的Hotspot jvm进行讨论,对运行时数据区做一个总体的概述
创新互联拥有一支富有激情的企业网站制作团队,在互联网网站建设行业深耕十多年,专业且经验丰富。十多年网站优化营销经验,我们已为超过千家中小企业提供了网站设计制作、网站建设解决方案,定制网站制作,设计满意,售后服务无忧。所有客户皆提供一年免费网站维护!
一个JVM进程中只有一个Runtime实例,即运行时环境,就相当于运行时数据区。其中
方法区和堆:是线程共享的区域,整个运行时数据区中只有一份。垃圾回收主要针对的区域就是堆空间,其次是方法区
程序计数器、本地方法栈和虚拟机栈:是每个线程都有一份,是各个线程私有的,
方法区:存储类信息。
堆:存储所有对象的区域,是垃圾回收的主要工作区域。
直接内存:非jvm内存的堆外内存,NIO操作时会用到
程序计数器:存储线程中要执行的下一条指令的地址,如果下一条是本机方法,则pc寄存器中的值将未定义。jvm中唯一不会产生内存溢出的地方。
Java虚拟机栈:当Java中方法执行时,会形成一个栈帧压入栈中,栈帧中包括局部变量表、操作数栈和方法出口等,方法执行完毕则弹出栈。
本地方法栈:和Java虚拟机栈相似,这是调用本地Native方法形成的栈。
- 在Hotspot JVM中,每个线程与操作系统中的线程直接映射。当一个Java线程准备好执行后,此时操作系统的一个本地线程也同时创建。Java线程执行终止后,本地线程也会回收。
- 操作系统负责将所有线程安排调度到一个可用的CPU上。一旦本地线程初始化成功,它就会调用Java线程的run方法。
- JVM中的线程分为守护线程和普通线程,当程序中最后一个非守护线程终止后,JVM也会进行终止
JVM的系统线程主要分为以下几种,其中GC线程就是典型的守护线程
后文将再对JVM内存中的五个区域进行详述
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享标题:JVM学习笔记(2)——运行时数据区概述及线程-创新互联
文章链接:http://scyanting.com/article/djgcgj.html