Java虚拟机运行时数据区

线程私有

程序计数器

  • 1、当前线程所执行的字节码的行号指示器。
  • 2、唯一不会发生OutOfMemoryError的区域
  • 3、如果执行的是java方法,计数器值为虚拟机字节码指令地址;如果执行native方法,值为空。
  • 4、java多线程中一个时刻,一个处理器都只会执行一条线程中的指令,在线程轮流切换的过程中,每个线程都有自己的程序计数器,互不影响,以便线程切换恢复到正确的执行位置。

Java虚拟机栈

  • 1、生命周期同线程相同

  • 2、描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至完成的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。

  • 3、局部变量表存放编译期可知的基本数据类型(boolean、int、byte、short、double、long、float、char),对象引用(指向对象起始地址的指针或者是代表对象的句柄),returnAdress(指向字节码指令地址)

  • 4、两种异常

    • 1、StackOverflowError(线程请求的栈深度大于虚拟机允许的深度)
    • 2、OutOfMemoryError(虚拟机栈动态扩展时无法申请到足够的内存)

本地方法栈

  • 和虚拟机栈相似,区别为虚拟机栈为虚拟机执行Java代码服务,本地方法栈为虚拟机使用Native方法服务。

线程共享

Java堆

  • 1、虚拟机管理最大的一块内存
  • 2、虚拟机启动时创建
  • 3、唯一目的:存放对象实例,几乎所有对象实例和数组都在这里分配
  • 4、垃圾收集器管理主要区域(GC堆)
  • 5、可以细分为新生代、老生代
  • 6、可以通过-Xmx 和 -Xms 控制
  • 7、堆中没有内存完成实例分配,且堆也无法再扩展时,就会OutOfMemoryError

方法区

  • 1、目的:存放已被虚拟机加载的类信息、常量、静态变量等
  • 2、永久代
  • 3、HotSpot虚拟机才有的划分,方便垃圾收集器管理这部分内存
  • 4、这个区域还包含运行时常量池存放字面量,符号应用
  • 5、无法再申请内存时,就会OutOfMemoryError

XMind - Trial Version

【深入理解Java虚拟机】Java虚拟机运行时数据区的更多相关文章

  1. Java内存管理:Java内存区域 JVM运行时数据区

    转自:https://blog.csdn.net/tjiyu/article/details/53915869 下面我们详细了解Java内存区域:先说明JVM规范定义的JVM运行时分配的数据区有哪些, ...

  2. 介绍下Java内存区域(运行时数据区)

    介绍下Java内存区域(运行时数据区) Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域.JDK 1.8 和之前的版本略有不同. 下图是 JDK 1.8 对JV ...

  3. Java 虚拟机中的运行时数据区分析

    本文基于 JDK1.8 阐述分析 运行过程 我们都知道 Java 源文件通过编译器编译后,能产生相应的 .Class 文件,也就是字节码文件.而字节码文件通过 Java 虚拟机中的解释器,编译成特定机 ...

  4. 虚拟机系列 | JVM运行时数据区

    本文源码:GitHub·点这里 || GitEE·点这里 一.内存与线程 1.内存结构 内存是计算机的重要部件之一,它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱 ...

  5. 你必须了解的java内存管理机制(一)-运行时数据区

    前言 本打算花一篇文章来聊聊JVM内存管理机制,结果发现越扯越多,于是分了四遍文章(文章讲解JVM以Hotspot虚拟机为例,jdk版本为1.8),本文为其中第一篇.from 你必须了解的java内存 ...

  6. jvm入门及理解(三)——运行时数据区(程序计数器+本地方法栈)

    一.内存与线程 内存: 内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行.JVM内存布局规定了JAVA在运行过程中内存申请.分配.管理的策略,保证了JVM的 ...

  7. JVM详解(三)——运行时数据区

    一.概述 1.介绍 类比一下:红框就好比内存的运行时数据区,在各自不同的位置放了不同的东西.而厨师就好比执行引擎. 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的 ...

  8. JVM 专题九:运行时数据区(四)本地方法栈

    1. 本地方法栈 2. 什么是本地方法栈? Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用   本地方法栈,也是线程私有的. 允许被实现成固定或者是可动态拓展的内存大小 ...

  9. JVM运行时数据区--本地方法栈

    本地方法栈 1.Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法(一般非Java实现的方法)的调用 2.本地方法栈,也是线程私有的. 3.允许被实现成固定或者是可动态拓展的内存 ...

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

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

随机推荐

  1. windows:shellcode 远程线程hook/注入(一)

    https://www.cnblogs.com/theseventhson/p/13199381.html 上次分享了通过APC注入方式,让目标线程运行shellcode.这么做有个前提条件:目标线程 ...

  2. 畅购商城(五):Elasticsearch实现商品搜索

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 畅购商城(一):环境搭建 畅购商 ...

  3. JConsole、VisualVM 依赖的 JMX 技术到底是什么

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  4. jersey简单总结与demo

    参考链接:https://www.iteye.com/blog/dyygusi-2148029?from=singlemessage&isappinstalled=0 测试代码: https: ...

  5. 网络安全传输系统-sprint1传输子系统

    一.产品规划与设计 二.传输子系统 基本框架:(1)不带安全功能的传输系统 (2)安全加密功能 part1:基本传输子程序设计(不带安全加密功能) 客户端 服务器 int main(int argc, ...

  6. JavaScript动画实例:炸开的小球

    1.炸开的小球 定义一个小球对象类Ball,它有6个属性:圆心坐标(x,y).小球半径radius.填充颜色color.圆心坐标水平方向的变化量speedX.圆心坐标垂直方向的变化量speedY. B ...

  7. 这几个冷门却实用的 Python 库,我爱了!

  8. 11、Java 日期时间 日期工具类

    一.简介 在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题.故此,Java8引入了一套全新的日期时间处理 ...

  9. 2020-05-21:es底层读写原理?倒排索引原理?

    福哥答案2020-05-21: es不熟悉,答案仅供参考:es写数据过程1.客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)2.coordinatin ...

  10. 2020-03-26:eureka 和其他注册中心比如zk有什么不同?

    从eureka工作原理可以看出,eureka client有缓存功能,即使eureka所有的serve都宕掉,仍然能给服务消费者发送服务信息,所以eureka保证了服务可用性,不能保证数据一致性,是一 ...