java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,有的区域随虚拟机进程的启动而存在,有的区域则依赖线程而存在。包括以下几个运行时数据区域:

程序计数器(线程私有):

可以看作是当前线程所执行的字节码的行号指示器,通过程序计数器知道当前线程接下来要执行什么指令,比如分支、循环、跳转、异常处理等等;程序计数器的作用是给线程用的,所以它是线程私有的。该内存区域是唯一一个不会抛OutOfMemoryError异常的区域。

java虚拟机栈(线程私有):

用来存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用到执行完成的过程,对应一个栈帧在虚拟机栈中入栈到出栈的过程。局部变量表主要用来存放各种基础数据类型(boolean/byte/char/int/long/double/void/short/float)、java对象引用(注意不是对象本身,对象是存储在堆中的),其中,64位长度的long和double,占用2个局部变量空间(Slot),其它数据类型只占用1个。虚拟机栈是线程私有的,生命周期和线程相同。在这个区域中,如果线程请求的栈深度大于虚拟机允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,拓展时无法申请到足够的内存,就会抛出OutOfMemoryError异常。

本地方法栈(线程私有):

和虚拟机栈相似,本地方法栈服务于native方法。

堆(线程共享):

是线程共享的一块区域,几乎所有的对象和数组都是存储在堆,也是垃圾回收器管理的主要区域,也称为“GC堆”。如果堆中内存不足以完成对象内存分配,就会抛出OutOfMemoryError异常。

方法区(线程共享):

是线程共享的一块区域,用来存放类信息、常量、静态变量、编译后的代码等。

运行时常量池(线程共享):

属于方法区的一部分,具备动态性,可在运行期间动态放入常量池,如String类的intern()方法。

直接内存:

直接内存不属于虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域。NIO类通过Native函数直接分配堆外内存,提高性能。不受java堆大小限制,但是受本机内存限制。

为了让学习变得轻松、高效,今天给大家免费分享一套Java入门教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要入门的资料欢迎加入学习交流群:9285,05736

谈一谈Java编程开发中虚拟机的内存区域划分?猿们怎么看?相关推荐

  1. JVM中的五大内存区域划分详解

    一.快速扫盲 1. JVM是什么 JVM是Java Virtual Machine的缩写,即咱们经常提到的Java虚拟机.虚拟机是一种抽象化的计算机,有着自己完善的硬件架构,如处理器.堆栈等,具体有什 ...

  2. 谈一谈Java编程开发中的并发控制

    并发指在宏观上的同一时间内同时执行多个任务.为了满足这一需求,现代的操作系统都抽象出 线程 的概念,供上层应用使用. 这篇博文不打算详细展开分析,而是对java并发中的概念和工具做一个梳理. 沿着并发 ...

  3. Java编程开发中高效编码的7个技巧?你应该知道……

    1. 使用 JDK 8 或更高版本 从 JDK 8 以及 更高版本开始,引进许多新功能将允许你编写更短.更具表现力的代码,包括 lambda 表达式.functional 接口.stream API等 ...

  4. java vector编程_Java编程开发中向量(Vector)及其应用

    要学习Java编程开发中向量及其应用方面的知识就要先了解什么是向量,向量是如何声明及初始化的,下面就让IT培训网专家来给大家详细介绍下如何认识向量及其使用方法吧! 关于向量的介绍: 向量 vector ...

  5. java面向字符的输入流_Java编程开发中面向字节的输入输出流

    关于面向字符的输入流和输出流方面教程已经讲解完了,下面要介绍的就是Java编程开发中面向字节的输入输出流,希望本节内容可以帮助大家更好的学习Java. 教程回顾点击查看: 字节流以字节为传输单位,用来 ...

  6. Anders Hejlsberg谈C#、Java和C++中的泛型

    Anders Hejlsberg谈C#.Java和C++中的泛型 [翻译] lover_P 2004-03-25 ------------------------------------------- ...

  7. 小学教育如何利用计算机思维,浅谈如何在中小学编程教学中培养学生的计算思维...

    浅谈如何在中小学编程教学中培养学生的计算思维 伍成伟 四川省 泸县二中城西学校 四川 泸州 646100 摘要:思维是人类所具有的高级认识活动,思维是人对外界输入信息与脑内储存知识经验进行一系列复杂的 ...

  8. JAVA 编程中的汉字处理(1)---java 编程技术中汉子问题的分析与解决

    Java 编程技术中汉字问题的分析及解决 段明辉, 自由撰稿人 简介: 在基于 Java 语言的编程中,我们经常碰到汉字的处理及显示的问题.一大堆看不懂的乱码肯定不是我们愿意看到的显示效果,怎样才能够 ...

  9. 你了解Java应用开发中的注入攻击吗?

    第31讲 | 你了解Java应用开发中的注入攻击吗? 安全是软件开发领域永远的主题之一,随着新技术浪潮的兴起,安全的重要性愈发凸显出来,对于金融等行业,甚至可以说安全是企业的生命线.不论是移动设备.普 ...

最新文章

  1. PHP 安装 扩展时 抛出 /usr/local/Cellar/php@7.1/7.1.25/pecl 异常解决
  2. 江苏关于领取软考2021年上半年合格证书的通知
  3. 包装类 与 简单集合框架
  4. 连续性的设计——改善产品的体验
  5. Hadoop伪分布式集群的安装部署
  6. u3d+向服务器上传文件,unity3d向服务器传数据库
  7. bzero函数_Linux(基础) | 系统IO函数的使用
  8. Mysql高级部分系列(一)
  9. 华为交换机学习指南基于子网划分划分vlan
  10. 基于stm32单片机的电梯控制系统
  11. 使用 HTML、CSS 和 JS 创建在线音乐播放器(含免费完整源码)
  12. 1197:山区建小学
  13. day04-Testin云测平台操作
  14. constexpr specifier
  15. 如何系统得对目标检测模型的误差分析?
  16. BlockingQueue及其实现
  17. JDK自带反编译工具javap
  18. Visual Studio Code使用教程
  19. 【编程题】【Scratch二级】2022.03 魔法星空
  20. 双11是结束了,但这场没有硝烟的“战争”却没有结束

热门文章

  1. ASP.NET (C#开发环境)Request对象 之 ServerVariables集合
  2. java 随机生成图,Java中的快速实值随机生成器
  3. 上传文件实时显示网速怎么实现_担心PC程序吃内存占网速?有了它终于放心了...
  4. tf.train.get_checkpoint_state
  5. HTTP状态码表格汇总
  6. Scrapy 爬虫去重效率优化之 Bloom Filter的算法的对接
  7. Dom4j完整教程~Document对象相关
  8. mysql 64位 8.0.11_mysql8.0.11 在windows64安装 步骤
  9. 直接插入排序比较次数_程序员必须要会的直接插入排序算法
  10. 【加解密学习笔记:第三天】OllyDbg断点介绍