JVM内存结构——运行时数据区】的更多相关文章

在Java虚拟机规范中将Java运行时数据划分为6种,分别为: PC寄存器(程序计数器) Java栈 堆 方法区 运行时常量池 本地方法栈 一.PC寄存器(程序计数器) PC寄存器(Program Counter Register)严格来说是一个数据结构,它用于保存当前正常执行的程序的内存地址. 线程私有. 每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄存器.PC寄存器里保存有当前正在执行的JVM指令的地址. 每个线程都需要一个独立的程序计数器,各条线程之间…
运行时数据区(runtime data area) jvm定义了几个运行时数据区,这些运行时数据区存储的数据,供开发者的应用或者jvm本身使用.按线程共享与否可以分为线程间共享和线程间独立. 线程间独立的运行时数据区 线程间独立的区域随线程的创建而创建,随线程销毁而销毁.线程独立的区域内存储的数据只有该线程能够访问,对其他线程是不可见的. 程序计数器寄存器(pc Register) 每个线程都有自己的pc(程序计数器)register(寄存器).在任意时点上,jvm中的线程只能执行一个类的一个方…
JMM(内存模型)  1.’主内存+每个线程有自己的内存 JVM运行时数据区 包含:1.程序计算器(每个线程自带):2.JAVA-STACK(每个线程自带):3.本地方法stack:4.堆:5.方法区: 1.程序计算器(每个线程自带) 2.JAVA-STACK(每个线程自带)1:局部变量表2:操作数栈3:动态链接4:方法出口 3.本地stack(每个线程自带) 4.堆(共享) 5.方法区(共享)1:类信息1.1.运行时常量池 2:常量3:静态变量  帮助分析的图…
前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机,他终归要运行在物理机上 在操作系统中体现出来的也就是一个进程 操作系统会给他分配资源,割一块内存作为他的地盘 class文件是静态的,想要运行程序,JVM需要将class文件中的信息加载到加载到他的地盘 然后处理他可以处理的数据类型的数据   JVM将这块内存按照功能进行了更细的划分,不过终究是一个…
JVM 内存区域 (运行时数据区域) 链接:https://www.jianshu.com/p/ec479baf4d06 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都各有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁.根据<Java 虚拟机规范(Java SE 8版)>的规定,Java 虚拟机所管理的内存将会包括以下几个运行时数据区域.如图:   程序…
在接下来的几天想总结下,JVM相关的一些内容,比如下面的这三个内容算是比较核心知识点了 1.运行时数据区域: 在运行时数据区里存储类Class文件元数据(方法区),对象和数组(堆),方法参数局部变量(栈)等. 2.垃圾回收机制: java 语言的优势之一就是它的自动内存管理,主要回收运行时数据区域的堆内存里的数据 3.类加载机制: 虚拟机首先需要把编译完成的字节码文件通过类加载器来加载到运行时数据区域 一个段Java代码的生命周期都会少不了上图这几个步骤,也就是Java代码首先会被编译成字节码文…
不同于C,C++程序,Java程序的内存管理工作由Java虚拟机(JVM)接管,这减低了java程序员的负担,但如果出现内存泄露与溢出问题如报OutOfMemory,StackOverFlow异常错误时,如果不了解JVM虚拟机的内存管理细节,往往很难快速定位错误. JVM在运行时会把其所管理的内存分为几个不同的数据区域,分别为:程序计数器,虚拟机栈,本地方法栈,堆,方法区等.这些区域存放的数据不同,功能也不同. JVM管理的内存包含以下几个运行时数据区: 1.程序计数器 程序计数器是一块较小的内…
Java虚拟机的内存区域也叫做java运行时数据区,共分为五个部分:程序计数器,方法区,本地方法栈,虚拟机栈和堆.方法区和堆是线程之间所共有的,程序计数器,本地方法栈,虚拟机栈是线程私有的.其中虚拟机栈和堆是程序员日常谈论最多也是最关注的一部分. 程序计数器:程序计数器就是指向当前线程要执行的字节码.字节码解释器通过改变这个值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等都需要依赖计数器来完成.每一个线程都拥有一个计数器,互不影响.(注:如果线程正在执行的是一个java…
来源 JVM会在会在执行Java程序过程中把所管理的内存划分为若干区域,主要包括程序计数器(Program Counter Register),虚拟机栈(VM Stack),本地方法栈(Native Method Stack),堆区(Heap)以及方法区(Method Area).其中前面3个是线程隔离的数据区,即各个线程均有一份,而后两者是共享区,即所有线程均共享同一份.接下来,我们分别来看一下这些线程隔离的数据区. 首先是程序计数器. 用于指示一个线程运行到哪个地方了,因为多个线程时,A线程…
JVM运行时区域各线程共享的区域包括堆区和方法区. 堆区 堆区最最主要的功能是存储对象实例[上篇也提到过],因此Java垃圾回收的主要战场就是在堆区,因此也有称为GC堆区.如果堆区的内存不够会出现OutOfMemory异常. 为了方便回收,堆区可以细分为新生代和老年代.顾名思义,新生代里都是新创建的或者年龄不大的对象,新生代区又有三个区域,eden区,s0区和s1区.绝大多数情况新生对象都是在eden区,当一次回收之后如果对象还存在,就会进入s0或者s1区,之后每次回收如果都能存在,那么年纪就加…