前言

jvm是java为了实现一次编译多处运行的秘籍,在jvm里面抽象出来了一个虚拟的机器,jvm为自己设计了一套内存模型——堆、栈、本地方法栈、方法区、程序计数器


一、堆

Java堆是虚拟机中生产和管理对象的一块儿内存。几乎所有的对象会在堆内存上进行创建,同时堆内存也会对这些内存进行管理,对于大部分的对象都是朝生夕灭。堆内存中需要一些算法来清理这些内存。
其中较为人知的包括对象标记算法——可达性分析。为了更好地回收内存,堆内存的分带管理,对于堆内存分为edan, from suviver, to suviver, old 等几个区域。并对于不同的区域使用不同的清理算法。包括对于edan区会设置标记整理算法,对于老年代会有标记清理算法等等。
这个区域是在Jvm中各个线程共享的区域,同时如果再分配内存的时候,如果在堆上无法再创建对象了,那么这时会跑出OutOfMemoryError异常。

二、虚拟机栈 / 本地方法栈

虚拟机栈是JVM中跟方法调用有关的一个内存。在栈中,每一次调用方法会同步创建栈帧,在栈帧中存储局部变量表,操作数栈,动态链接,方法出口等信息。一个方法的调用和完成就是一个栈帧入栈和出栈的过程。
为了保证JVM的方法能够每个线程正常地执行,虚拟机栈也是线程私有的。
局部变量表中存在了方法中的基本数据类型(int, double, long)和引用类型和返回地址类型。
如果对于虚拟机栈调用深度过长,那么就可能会跑出StackOverflowError。

三、方法区

方法区是用于存储Java程序的一些元数据信息,包括类信息,常量和静态变量,即时编译后生成的代码缓存等数据。在hotspot上,jdk8之前,会使用永久代来实现一个方法区,同时对于方法区的回收基本上是很难去做到的。而在jdk8之后,已经改为元空间来实现一个方法区了。
方法区可以说也是存放一些程序数据时会用到的,也是多个线程会同时访问的区域。如果在虚拟机中程序运行的时候,方法区内存不够,也会跑出OutOfMemoryError异常

四、程序计数器

程序计数器是一块比较小的空间,相似与计算机内部的程序计数器,它会指向正在执行的代码行号。不过在JVM中的程序计数器是线程私有的,这样可以做到每个线程执行的程序互不影响,独立存储。

五、运行时常量池

运行时常量池是方法区的一部分,用于存放在编译器生成的各种字面量和符号引用,这部分内容将在类加载之后存放在方法区的运行时常量池

六、直接内存

在NIO中可以通过native函数直接分配对外内存,避免了Java堆和native对之间来回复制数据。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

jvm学习——jvm内存区域相关推荐

  1. jvm(2)-java内存区域

    [0]README 0.1)本文转自 深入理解jvm, 旨在学习 java内存区域 的基础知识: [1]运行时数据区域 1)jvm 所管理的内存将会包括以下几个运行时数据区域 1.1)方法区:(线程共 ...

  2. 学习jvm(一)--java内存区域

    前言 通过学习深入理解java虚拟机的教程,以及自己在网上的查询的资料,做一个对jvm学习过程中的小总结. 本文章内容首先讲解java的内存分布区域,之后讲内存的分配原则以及内存的监控工具.再下来会着 ...

  3. 深入理解JVM(1)——Java内存区域与Java对象

    最近放暑假在家,没有实验室的工作要做,正好趁这个时间恶补了之前一知半解的JVM知识,使用的主要学习资料是周志明大大的<深入理解Java虚拟机--JVM高级特性与最佳实践>,我仔细拜读了两遍 ...

  4. jvm之java内存区域详解篇guide哥yyds

    jvm 一.java内存区域详解 1.运行时数据区域 线程私有的: 虚拟机栈 本地方法栈 程序计数器 线程共享的: 堆 方法区 直接内存(非程序运行时数据区的一部分) 1.1什么是程序计数器 程序计数 ...

  5. JVM学习 - 体系结构 内存模型

    2019独角兽企业重金招聘Python工程师标准>>> 一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆&quo ...

  6. 【JVM】JVM-codecache内存区域介绍

    1.概述 转载:https://leokongwq.github.io/2016/10/12/maven-test.html 2.JVM-codecache内存区域介绍 大家都知道JVM在运行时会将频 ...

  7. 深入理解JVM之Java内存区域与内存溢出异常

    读了<深入理解Java虚拟机-JVM高级特性与最佳实践>的第二章,明白了在虚拟机中内存是如何划分的,哪部分区域.什么样的代码和操作可能导致内存溢出异常.虽然Java有垃圾收集机制,但是内存 ...

  8. 【JVM】Java内存区域详解(通俗易懂系列)

    Java虚拟机拥有管理内存的权利. 一.运行时数据区 在Java程序执行的过程中,Java虚拟机会将它管理的内存分为若干个不同数据区域(JDK1.8与之前版本不同) 线程私有: 虚拟机栈 本地方法栈 ...

  9. JVM学习-Java内存结构(详细易懂)

    Java内存结构 1.JVM概述 2.程序计数器 2.1.定义 2.2.作用及特点解释 3.虚拟机栈 3.1.栈的特点 3.2.栈的演示 3.3.栈的问题辨析 3.4.栈的线程安全问题 3.5.栈内存 ...

  10. JVM总结之内存区域详解

    一.概述 1 运行时数据区概述 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域.JDK 1.8 和之前的版本略有不同,下面会介绍到. 线程私有的: 程序计数器 ...

最新文章

  1. 第十四周项目2-带姓名的成绩单
  2. python的日期格式化_Python日期格式化-阿里云开发者社区
  3. 教你编写Node.js中间件,实现服务端缓存
  4. 传智学员信息登记表html代码_IT兄弟连 HTML5教程 HTML5文字版面和编辑标签 使用HTML表格...
  5. nginx http proxy 反向代理
  6. 2.3 KNN-采用机器学习库来预测鸢尾花的分类
  7. 数组的初始化与默认值
  8. Chapter1-6_Speech_Recognition(RNN-T Training)
  9. oracle 10g perl,perl中访问oracle10g入门
  10. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_6-1.常用的第三方支付和聚合支付介绍...
  11. 『中安网培』***游戏过关攻略
  12. 会员数据化运营RFM
  13. 一个游戏创业者如何跳出模式
  14. 矩阵链乘法 自顶向下 自底向上 Python 实现 算法导论
  15. 如何区分单模和多模光纤收发器
  16. JavaScript整合版——后端程序员学js,只读一文直接零基础入门,大学生期末考试不挂科宝典。
  17. Kerberos在linux安装部署
  18. [译]用R语言做挖掘数据《七》
  19. pandas DataFrame
  20. 新版Remix界面使用教程

热门文章

  1. 计算机cpu和内存不足,电脑内存不足的解决方法
  2. python tcl quartus_使用TCL脚本语言操作Quartus(一)
  3. 复习单片机:流水灯(内含2种方法(左移操作符法+crol法)+设计思路+原始代码)
  4. AutoCAD二次开发学习记录一:批量统计dwg文件数据
  5. RabbitMq 406错误
  6. npm安装依赖报错:npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\misal\AppData\R
  7. postman Could not send request
  8. ProLiant 380G5服务器上安装netware4.11
  9. java的简单逻辑博彩游戏craps
  10. 使用cmd命令查看WiFi密码