Java虚拟机深入学习之一: Java虚拟机的内存区域

一文带你搞懂JVM虚拟机的内存区域划分 阅读详情

     java在运行之后,就将内存控制权交给了java虚拟机。 java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干不同的数据区域。 运行时的内存区分为以下几部分:

    1.  程序计数器区域

              程序计数器是一块较小的内存空间,是为当前线程所执行的字节码的行号指示器。  由于多线程的存在,所以每个线程都需要有一个独立的程序计数器。 各个线程之间的程序计数器互不影响,独立存储。 所以程序计数器的内存区域是线程私有的。

              如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址。 如果执行的是native方法,则这个计数器为空。

   

     2. java虚拟机栈

              描述的是java方法执行的内存调用模型, java虚拟机栈也是线程私有,生命周期和线程相同。


     3.本地方法栈
              是虚拟机使用到Native方法服务的内存栈, 线程私有的。


     4. java堆

              也被称为GC堆,  是虚拟机所管理的最大一块内存,被所有线程共享,在虚拟机启动时创建,目的是存放对象实例。如果堆中的内存不足,则会抛出OutOfMemory的异常。 

              java堆属于线程共享的。


      5.方法区

              用于存储已经被虚拟机加载的信息:包括常量,静态变量,编译后的代码等数据。 也属于线程共享的。 运行时的常量池Runtime Constant Pool也是方法区的一部分。


     注:  此系列文章均参考学习 《深入理解Java虚拟机》- 周志明

Java虚拟机-内存区域 JVM内存区域概述运行时的数据区域线程私有内存区域程序计数器java虚拟机栈线程公有内存区域本地方法栈java堆方法区直接内存对象访问 概述 c和c++拥有内存管理的权利,而java则是通过虚拟机的自动内存管理机制去管理内存,不需要我们手动进行内存管理。自动内存管理机制不容易出现内存泄露问题,但是一旦出现内存泄露和内存溢出问题,排查问题就需要java虚拟的相关知识。 运行时的数据区域 这里借助一张书里的图片 线程私有内存区域 程序计数器 程序计数器这个概念是在计算机组成原理课程中首次见到。在jvm里,程序 阅读详情

相关推荐

基于ROS下的安卓手机图像和IMU跑ORB-SLAM3

接之前文章继续,手上没有现成的单目+IMU硬件,但是安卓手机几乎人人都有。因此,本文讲下如何用手机跑ORB-SLAM3的Mono和Mono_Inertial。 1. 手机与PC通信 基于ROS下的信息发布和订阅,手机和PC在一个局域网下进行信息(image和IMU)传输。 手机APK参考了github上的2个开源Android_Camera-IMU和android_ros_sensors,基于ros_java生成安卓APP,下载安装任一个APP到安卓手机,界面分别是这样: 手机和PC连一个无

h_372101的博客 1万+

Java虚拟机规范JavaSE8版,java虚拟机结构,了解一下

# class文件格式 编译后被java虚拟机所执行的代码使用了一种平台无关的二进制格式来表示,以文件的形式存储,这种格式称为 class文件格式。 数据类型 java虚拟机可以操作的数据类型可以分为两类: 原始类型primitive type ,也叫做基本类型 引用类型reference type, 编译器应当在编译期间尽最大努力完成可能的类型检查,使得在运行期间无...

好好学习,天天向上 400

CANoe数据回放实战:如何用Replay Block精准复现实车故障(附ECU数据处理技巧)

本文深入探讨了利用CANoe的Replay Block功能进行数据回放,以精准复现实车偶发性故障的实战方法。文章重点解析了从原始OBD日志中移除目标ECU数据、转换报文方向等核心数据处理技巧,旨在帮助工程师重构真实的网络测试环境,从而高效定位并解决复杂的ECU问题。

nnn11的博客 496

java虚拟机学习总结:java内存区域

java虚拟机学习总结:java内存区域 内存区域分为程序计数器、java虚拟机栈、本地方法栈、java椎、方法区 程序计数器: 程序计数器是一块比较小的内存空间,可以看作线程的信号指示器;字节码解释器需要通过改变程序计数器来选取指令;即程序中的分支、循环、跳转、异常处理、线程恢复等功能都需要依赖程序计数器来完成。 线程私有:程序计数器线程的“私有空间”,即每个线程都会有一个程序计数...

qq_26896085的博客 184

一个固定翼飞机仿真程序带你系统性上手如何实现配平(工具箱+脚本)

老规矩,该博客所用的模型和脚本已上传至百度网盘,名字为“固定翼配平训练例子”,自己自取。

zouxu634866的博客 2568

Windows下Cppcheck静态测试全流程:从安装到生成HTML报告的避坑指南

本文详细介绍了在Windows平台下使用Cppcheck进行静态代码分析的全流程,包括环境搭建、插件配置、自动化脚本编写及HTML报告生成。重点解析了MISRA插件集成、常见问题排查以及性能优化技巧,帮助C/C++开发者高效提升代码质量。文章特别针对Windows环境下的路径处理、空格问题等细节提供了实用解决方案。

weixin_29313547的博客 200

Java虚拟机深入学习之一: Java虚拟机的内存区域

java在运行之后,就将内存控制权交给了java虚拟机。 java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干不同的数据区域。 运行时的内存区分为以下几部分:     1.  程序计数器区域               程序计数器是一块较小的内存空间,是为当前线程所执行的字节码的行号指示器。  由于多线程的存在,所以每个线程都需要有一个独立的程序计数器。 各个线程之间的程序计数

zhanglujie2008的专栏 438

STM32CubeMX实战:FreeRTOS内存管理5种方案全解析(附heap_4避坑指南)

本文深入解析了STM32CubeMX环境下FreeRTOS的5种内存管理方案(heap_1到heap_5),重点介绍了heap_4的优化策略与避坑指南。通过对比分析各方案的特点、性能指标及适用场景,帮助开发者根据项目需求选择最优内存管理策略,提升嵌入式系统开发效率与稳定性。

aa123的博客 620

《深入理解java虚拟机》学习总结:java内存区域

《深入理解java虚拟机》学习总结:java内存区域 内存区域分为程序计数器、java虚拟机栈、本地方法栈、java椎、方法区 程序计数器: 程序计数器是一块比较小的内存空间,可以看作线程的信号指示器;字节码解释器需要通过改变程序计数器来选取指令;即程序中的分支、循环、跳转、异常处理、线程恢复等功能都需要依赖程序计数器来完成。 线程私有:程序计数器线程的“私有空间”,即每个线程都会有...

qq_26896085的博客 186

【从零开始vnpy量化投资】十一. 实盘接入测试与正式实盘

本篇主要讲解如何使用vnpy进行实盘交易,由于上一节我们已经学习了模拟盘运行,如果一切顺利的话,只需要通过穿透测试,就可以正式部署实盘了。

魔落的博客 4231

Trimble RealWorks处理点云数据(一)之坐标转换

Trimble RealWorks处理点云数据之坐标转换

yilvyangguang520的博客 3618

深入理解 Java 虚拟机 学习:Java虚拟机内存区域

一.运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据《 Java 虚拟机规范(第二版)》的规定,Java 虚拟机所管理的内存将会包含以下几个运行时数据区域 1.运行时数据区域图 2.程序设计器: ...

帅气Dee海绵宝宝 348

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 2024轻量化网络MoblieNetV4:移动生态系统的通用模型

一、本文介绍 本文记录的是基于MobileNet V4的YOLOv11目标检测轻量化改进方法研究。MobileNet V4通过整合UIB、Mobile MQA以及优化的NAS策略,能够在在不降低性能指标的前提下,降低计算成本。本文配置了原论文中MNv4-Conv-S、MNv4-Conv-M、MNv4-Conv-L、MNv4-Hybrid-M和MNv4-Hybrid-L五种模型,以满足不同的需求。 模型 参数量 计算量 推理速度 YOLOv11m 20.0M 67.6GFLOPs 3.5ms

Limiiiing的博客 4456

JVM学习笔记(一):Java虚拟机和虚拟机内存区域

为什么Java程序需要运行在虚拟机上 因为Java在设计之初的跨平台特性,我们知道Java程序是运行在Java虚拟机上的。如果你要问为什么Java程序要运行在虚拟机上,我可以反问你几个问题。 为什么买来的电器插上电就能直接使用?你可能会说,因为电是基础设施。电源有统一的标准,电器有统一的标准,所以买来的电器插上电就能用。 不同的电器需要的电源标准不同(台灯和电饭煲的功率),为什么我们不能...

dixie2009的博客 179

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

深入理解JAVA虚拟机学习|第一篇:Java内存区域

1.Java内存区域如图示 程序计数器:记录正在执行的虚拟机字节码指令地址 单线程中:当前线程执行的字节码行号 多线程中:线程轮流切换并分配处理器时间片执行,每个线程独立拥有一个程序计数器,保证线程切换后能正确继续上一次操作 每个线程独立拥有,线程私有 唯一一个不会存在内存溢出区域 执行Native方法时,计数器值为空(Undefined) Java虚拟机栈:用于存放局部变量表,操作...

过期的酒的博客 178

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java虚拟机学习笔记(一):内存区域与HotSpot虚拟机对象探秘

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 程序计数器(线程私有) 程序计数器是一块较小的内存空间,它可以看...

cp_Mark的博客 437

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java虚拟机学习 - JVM内存区域模型:

参考:http://blog.youkuaiyun.com/java2000_wl/article/details/8009362 JVM内存区域模型 1.方法区 也称"永久代” 、“非堆”,  它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB,最大值为64MB,可以通过-

xbmatrix的博客 320

《深入理解Java虚拟机》学习笔记一:Java内存区域

JVM所管理的内存包括几个运行时数据区域: 1程序计数器(program counter register):为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程之间的计数器互不影响,独立存储,这类内存区域称为“线程私有”内存。他是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。 2虚拟机栈(VM stack):也

xukunddp的专栏~ 心态好才是真的好 613

java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)

java虚拟机学习-深入理解JVM(1) java虚拟机学习-慢慢琢磨JVM(2) java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制 java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3) java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4) java虚拟机学习-JVM调优总结(5) java虚拟机学习-JVM...

dengkuituo0680的博客 230

虚拟机学习之一:java内存区域与内存溢出异常

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34024034的博客 111

学习笔记:深入理解Java虚拟机 第二章:Java内存区域与内存溢出异常(1)

学习笔记:深入理解Java虚拟机 第二章:Java内存区域与内存溢出异常(1) Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来。 一、概述 ​ C、C++的开发人员在内存管理领域拥有最高权力,但他们也要从事最基础的工作——拥有每个对象的“所有权”,也要负责对每一个对象生命周期内的维护。 而Java程序员,因为有JVM的自动内存管理机...

故事而已zzz 208

学习笔记:深入理解Java虚拟机 第二章:Java内存区域与内存溢出异常(2)

学习笔记:深入理解Java虚拟机 第二章:Java内存区域与内存溢出异常(2) 三、HotSpot虚拟机对象探秘 1.对象的创建 ​ 在Java程序运行过程中时刻都有对象被创建。在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个关键字new而已,而在虚拟机中,对象(普通的Java对象,不包括数组和Class字节码文件对象)的创建又是怎样一个过程呢? ​ 虚拟机遇到一条new指令时,首先检查...

故事而已zzz 210

【深入Java虚拟机】之一:Java内存区域与内存溢出

Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。下面详细阐述各数据区所存储的数据类型。 程序计数器(Program Counter Register) 一块较小的内存空间,它是当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变该计数器的值来选择下一条需要执行的字节码指令,分支、跳转、循环等基础功能都要依赖它来实现。每条

兰亭风雨的专栏 5万+

深入理解Java虚拟机-Java内存区域透彻分析

系列全部文章更新中...这篇文章主要介绍Java内存区域,也是作为Java虚拟机的一些最基本的知识,理解了这些知识之后,才能更好的进行Jvm调优或者更加深入的学习,本来这些知识是晦涩难懂的,所以希望能够讲解的透彻且形象。

pingguocu3的博客 1748
上一篇: object c中 new和alloc区别
下一篇: Java虚拟机深入学习之二: Java虚拟机的垃圾收集器
NewJerryj
博客等级 码龄19年 196粉丝 115原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值