运行时数据区域包括如下几个区域:

1、程序计数器

英文为 Program Counter,简称 PC,此内存区域存储指令位置,为每个线程独占。

取PC中的值,找到对应位置的指令,然后执行该指令,然后将PC++。

2、堆

Heap,java 线程间共享的一块内存区域,所有对象实例以及数组在此区域分配。

堆内存逻辑分区:

新生代,new/young;老年代,odl/tenured,两者默认比例 new : old 为 1:3。

新生代,又划分为Eden区,suvivor0/from,suvivor1/to,三者比例默认为 8:1:1。

一个对象 new 出来后,首先尝试往 stack 上分配,stack 上分配不下,会进入 Eden区。一次GC垃圾回收幸存后进入 survivor0,再一次GC垃圾回收幸存后进入 survivor1,经过复制年龄限制后,才会进入 old 区。

为什么要给堆进行分代?

因为对象的生命周期不同,并且大部分对象是临时对象;给堆分代主要是为了优化GC性能。

3、Java 虚拟机栈

JVM stacks,每个线程对应一个栈,与线程同时创建,存储方法栈帧 frames。

栈帧 frame,存储的是:

local variables,局部变量表,方法内部使用的变量,方法参数也存储在此。

operand stacks, 操作数栈,每个局部变量都有自己的 operand stacks,通过指令查看。

dynamic linking,动态链接,常量池里的符号链接,方法名,类型等,看它是否已经解析,有的话直接用,没有的话,就进行动态解析。

return address,方法出口,比如方法 m 调用方法 n,n执行完之后,如果n有返回值,那么把返回值放到哪里,执行结束后应该回到哪个位置继续执行,这个位置叫return address。

4、本地方法栈

native method stacks,本地方法,C 和 C++方法。

5、直接内存

Direct Memory, jdk1.4版本之后增加的,为了提高IO效率,由用户空间直接去访问内核空间的内存,省略了IO拷贝到JVM的过程,实现了零拷贝 zero copy。

6、方法区

method area,线程间共享,存储每个类的结构信息 per-class structure。

Hotspot JVM JDK 1.8之前叫 perm space 永久区,字符串常量位于此区域,Full GC 不会清除此区域。JDK 1.8 之后叫 meta space 元数据区,使用本地内存来存储,如果没有指定这个参数,元空间会在运行时根据需要动态调整。不会再发生 java.lang.OutOfMemoryError: PermGen 异常。FGC会清理此区域,而字符串常量已被移动到堆中。

Java 虚拟机运行时数据区相关推荐

  1. 《深入理解Java虚拟机》(二)Java虚拟机运行时数据区

    Java虚拟机运行时数据区 详解 2.1 概述 本文参考的是周志明的 <深入理解Java虚拟机>第二章 ,为了整理思路,简单记录一下,方便后期查阅. 2.2 运行时数据区域 Java虚拟机 ...

  2. 笔记:Java虚拟机运行时数据区

    Java虚拟机在执行Java程序的过程中会把它管的内存划分为以下若干个不同的区域: 1.程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器:由于Java虚拟机的 ...

  3. Java虚拟机运行时数据区

    将从<深入理解Java虚拟机:JVM高级特性与最佳实践>和 The Java® Virtual Machine Specification 中对于Java运行时数据区的描述整理记录一下 从 ...

  4. c++指定在某一线程运行_深入理解Java虚拟机-运行时数据区

    在Java虚拟机的概念中,运行时数据区又被称为Java内存区域.主要由线程私有的程序计数器.虚拟机栈和本地方法栈以及线程共享的堆和方法区组成. 程序计数器 程序计数器在Java内存中占据的空间比较小, ...

  5. Java虚拟机 —— 运行时数据区

    Java虚拟机内存,是指JVM的运行时数据区域,主要分为:方法区.堆.虚拟机栈.本地方法栈.程序计数器.其中方法区和堆为索引线程的共享数据区,而虚拟机栈.本地方法栈.程序计数器为线程隔离的数据区. 程 ...

  6. Java -----JVM运行时数据区

    一.JVM体系结构 想要了解运行时数据区,先关注一下JVM的体系结构,知道数据区在JVM的整体位置和作用. 二.JVM运行时数据区 1.程序计数器 一块较小的内存空间,它是当前线程所执行的字节码的行号 ...

  7. Java虚拟机2:Java 运行时数据区

    前言快速到底 如果有人问你 java 的内存区域分为哪些,可能很多人会说:堆.栈.方法区--.我个人理解从开发者的角度 Java 能够涉及到"内存区域"的大致有两处:第一,java ...

  8. java运行时异常与一般异常有何异同_JVM | 虚拟机运行时数据区域划分和使用详解...

    引言   我们经常会被问到一个问题是Java和C++有何区别?我们除了能回答一个是面向对象.一个是面向过程编程以外,我们还会从底层内存管理和垃圾收集方面作出比较.   对于C++而言,程序员既要做程序 ...

  9. [JVM]了断局: “运行时数据区“理论梳理

    Table of Contents 一.前言 二.运行时数据区 2.1.程序计数器 2.2.Java堆 2.3.方法区 2.4.运行时常量池 2.5.直接内存 2.6.Java虚拟机栈 2.7.本地方 ...

最新文章

  1. mysql 计算排名,生成排行榜
  2. 关于 sql server 基本使用的建议
  3. 黑马lavarel教程---7、文件上传
  4. 国内云存储产品应用简介
  5. SAP UI5 初学者教程之十 - 什么是 SAP UI5 应用的描述符 Descriptor 试读版
  6. 你的第一个Django程序
  7. 学习Spring Boot:(五)使用 devtools热部署
  8. 到了姥姥家我在小点点c++
  9. pytorch: MaxUnpool2d 与 Upsampling
  10. 【整理】牛客网编程题-前端篇(入门难度)
  11. python中的字符类型_八、 python中的数据类型——字符串
  12. 微型计算机系统中传感器的作用,一文读懂传感器原理、作用及技术特点
  13. matlab字号单位是磅吗,Office软件中字体“号”与“磅”的关系
  14. 计算机专业必须用英语口语要求,哪些专业需要英语口语考试
  15. 图像检索:INS视觉检索
  16. Mathematica(26)-在软件中插入图片
  17. R语言基础 期中考试
  18. express : 无法加载文件 C:\Users\HP\AppData\Roaming\npm\express.ps1,因为在此系统上禁止运行脚本.
  19. 国外stripe支付,超简单几行代码搞定
  20. 美国大学计算机专业排名2019,2019年美国大学计算机排名

热门文章

  1. 【英语学习】 - 君若不离不弃,吾当生死相依
  2. Linux服务器集群系统(二)——LVS集群的体系结构
  3. python跳出循环重新开始_python怎么跳出循环
  4. 国内做 3D 渲染和游戏引擎的码农们都在哪里获取技术信息?
  5. Linux就该这么学第0章 咱们先来谈谈学习方法和红帽系统。
  6. LearnOpenGL学习笔记(四)——着色器类编写
  7. 【推荐】开源堡垒机Teleport
  8. 那些炫酷的特效--QQ空间+VUE
  9. 浏览器根对象window之performance
  10. Does Rails Hurt?