Java学习笔记47:Java 内存区域

2023java面试题47道选择题及答案[来看看你能做对多少!!!] 1、Java IO体系中,read方法从输入流中顺序读取源中的单个字节数据,如果到达源的末尾,该方法返回。D、构造方法的第一条语句如果是super(),则可以省略,该语句作用是调用父类无参数的构造方法。C、Java虚拟机是运行统一Java字节码格式文件的计算机进程,不同平台的虚拟机实现是不同的。6、在Java的IO操作中,( )方法可以直接将缓冲中的数据立即发送到网络中。A、两个对象的hashCode()相同,则equals()也一定为 true。 阅读详情

程序计数器:

程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器完成。每个线程都有自己的计数器。

如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器的值为空(Undefined)。

此区域占用内存非常少,不会内存溢出的情况。


Java虚拟机栈:

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

  经常有人把Java内存分为堆内存和栈内存,这种分法比较粗糙,Java内存区域的划分实际上远比这复杂。其中所说的栈就是虚拟机栈,或者说是虚拟机栈中的局部变量部分。

  局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用和returnAddress类型(指向了一条字节码指令的地址)。

  其中64位长度的long和double类型的数据会占用2个局部变量空间(Slot),其余的数据类型只占用1个。局部变量所属的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要的帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。

  Java虚拟机规范中对这个区域规定了两个异常状况:如果线程请求的栈深度大于虚拟机说允许的深度,抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,当扩展时无法申请到足够内存时抛出OutOfMemoryError异常。


本地方法栈:

本地方法栈与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(字节码)服务,而本地方法则是虚拟机使用到的Native方法服务。虚拟机规范中对本地方法栈中的方法使用的语言、使用方式和数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。甚至与虚拟机栈合二为一。本地方法栈区域也会抛出StackOverflowError和OutOfmemoryError异常。


java堆:

Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

Java堆是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆”。如果从内存回收的角度看,由于现在收集器基本上都是采用的分代收集算法,所以Java堆还可以细分为:新生代和老年代;再细致一点的有Eden空间、From Survivor空间、To Survivor空间等。如果从内存分配角度看,线程共享的Java堆中可能划分出多个线程私有的分配缓冲区。进一步划分的目的是为了更好的回收内存,存储的都仍然是对象实例。


方法区:

方法区用于存放已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap。

Java虚拟机规范对方法区的限制非常宽松,除了和Java堆一样不需要连续的内存和可以选择固定大小或者可扩展外,还可以选择不实现垃圾收集。这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载,一般来说这个区域的回收效果比较难以令人满意。当方法区无法满足内存分配需求时,抛出OutOfMemoryError异常。

运行时常量池:

运行时常量池(Runtime Constant Pool)是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。

运行时常量池相对于Class文件常量池的另一个重要特征是具备动态性,Java语言并不要求常量一定只能在编译期产生,也就是并非预置入Class文件中常量池的内存才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被被使用的较多的是String类的intern()方法。

当常量池无法再申请到内存的时候会抛出OutOfMemoryError异常。

华大HC32F460从零到200MHz:手把手教你配置时钟系统(附避坑指南) 本文详细解析了华大HC32F460 MCU的时钟系统配置,从启动过程、时钟树分析到实战配置200MHz系统时钟。文章手把手指导开发者如何正确配置外部晶振、MPLL锁相环及总线分频,并提供了硬件检查、代码解读及常见问题排查的避坑指南,帮助用户从零构建稳定可靠的高性能时钟环境。 阅读详情

相关推荐

Mediapipe姿态估计——用坐标计算手指关节弯曲角度并实时标注

利用mediapipe搭建姿态检测模型;mediapipe人体标注节点坐标;mediapipe计算手指弯曲角度并实时渲染;mediapipe计算关节弯曲角度。mediapipe手势识别;mediapipe姿态检测模型;mediapipe学习。

kalakalabala的博客 1万+

MySQL Connector/Java 5.1.47:Java与MySQL的完美桥梁

MySQL Connector/Java 5.1.47:Java与MySQL的完美桥梁 【下载地址】MySQLConnectorJava5.1.47下载仓库 本仓库提供了一个用于下载 `mysql-connector-java-5.1.47.jar` 文件的资源。该文件是 MySQL 官方提供的 Java 连接器,版本为...

gitblog_09767的博客 1149

告别OpenAI API调用:手把手在本地CPU/GPU上部署fast-whisper中文语音识别模型

本文详细指导如何在本地CPU/GPU上部署fast-whisper中文语音识别模型,摆脱对OpenAI API的依赖。从环境准备、模型获取与优化,到CPU/GPU环境的具体部署步骤和性能优化技巧,全面覆盖本地化语音识别的实现方案,帮助开发者提升效率并保障数据隐私。

weixin_29988907的博客 307

JAVA学习笔记:目录

目录 java学习笔记1:了解java、JDK、JRE、JVM java学习笔记2:JDK下载和安装以及测试控制台测试是否配置成功 java学习笔记3:用记事本写第一个java程序,第一个java程序常见错误总结,第一个java程序详细解析 java学习笔记4:常见的DOS命令和java开发工具 java学习笔记5:eclipse的下载及使用,以及java程序的运行 java学习笔记6:注释、标识...

任性的生鱼片 的博客 2340

【UE4】Hierarchical Instanced Static Mesh——一种速度优于Spawn的实例化物体组件

最近需要在场景中实例出很多个相同的模型,位置也很有规律,并且要对它的位置信息进行更新。 但是一个个拖进去实在太麻烦,就发现了Spawn Actor这个蓝图方法,可以实例一个蓝图类在场景中。 但是由于数量较大,实例化的速度太慢,这时发现了一个神奇的组件——Hierarchical Instanced Static Mesh。 新建一个蓝图类,添加该组件,在细节里添加你要实例化的模型对象。 ...

ColorGalaxy 1万+

ESP32-P4开发板实战:从零配置VSCode环境到点亮MIPI-DSI屏幕(避坑指南)

本文详细介绍了ESP32-P4开发板在VSCode环境下的配置流程,包括SDK安装、idf_component.yml依赖管理,以及MIPI-DSI屏幕驱动的实现方法。通过实战指南帮助开发者避开常见配置陷阱,快速完成从环境搭建到屏幕点亮的全流程,适用于物联网和嵌入式开发场景。

pp12345的博客 742

关于java中的魔幻数字47你知道么

- 最近在读书的时候发现了Bruce Eckel (java编程思想作者)说的47是个魔幻数字,他说的那句话翻译过来是数字47在我加盟的一家学院里被认为是"魔幻数字",至今仍是这样** 因为这句话是他在验证随机数的时候说的 然后我就跟好奇,研究了一下 还真的很神奇 也就是你在 new Random() 的时候不传递任何参数 那么java就会将当前时间作为随机数生成器的种子 那么每一次执行数字都是不一样的 接下来就有趣了 你如果参数是47 那么没次执行程序数字都是一样的 结果我亲测了下~~~~~还真是

qwdqwdfhfghgf的博客 1494

车载以太网入坑指南,从小白到懂哥的进阶之路【技术分享】

各位技术大佬们好!最近公司项目涉及到车载以太网,刚开始完全懵逼,花了大半个月时间各种查资料、测试设备,总算是摸清了门道。想着互联网上卧虎藏龙,肯定有不少大佬对这个技术感兴趣,所以写个帖子分享一下,顺便求各位大佬指点。

starelink的博客 1261

【亲测免费】 MySQL Connector/Java 5.1.47 下载仓库

MySQL Connector/Java 5.1.47 下载仓库 【下载地址】MySQLConnectorJava5.1.47下载仓库 本仓库提供了一个用于下载 `mysql-connector-java-5.1.47.jar` 文件的资源。该文件是 MySQL 官方提供的 Java 连接器,版本为 5.1.47。通过使...

gitblog_09780的博客 1094

手把手教你配置SAP PP供应区域(Supply Area):实现线边仓精准发料与物料流优化

本文详细解析了SAP PP供应区域(Supply Area)的配置方法,帮助企业实现线边仓精准发料与物料流优化。通过三级优先级逻辑和四步配置法,系统可自动识别最优组件来源位置,显著提升生产订单处理效率和库存准确率。文章还提供了典型问题解决方案和性能优化技巧,适用于离散制造和重复制造场景。

weixin_29275257的博客 434

一、【vmware虚拟机使用】安装vmware workstations17

本文介绍了VMware Workstation 17的安装与网络配置方法。主要内容包括:通过下载安装包进行标准安装(含许可协议、路径选择等步骤);重点讲解了NAT模式下的网络配置,包括修改子网IP为192.168.2.0网段、设置网关地址和DHCP范围等操作,以避免与主机网络冲突。文章还简要说明了VMware的Hypervisor核心技术原理,包括CPU、内存和存储虚拟化。最后指出完成这些准备工作后,后续将进行CentOS7系统的安装。整个流程配有详细图文说明,适合初学者跟随操作。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 2746

JAVA内存区域

 了解Java GC机制,必须先清楚在JVM中内存区域的划分。在Java运行时的数据区里,由JVM管理的内存区域分为下图几个模块: 1,程序计数器(Program Counter Register):程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,可以理解为是当前线程的行号指示器。字节码解释器在工作时,会通过改变这个计数器的值来取下一条语句指令。 每个程序计数器只用来记录一个线程的行号,所以它是线程私有(一个线程就有一个程序计数器)的。 如果程序执行的是一个Java方法,则.

xmh_sxh_1314的博客 261

【AI智能体】Spring AI Tool 从使用到实战详解

Spring AI Tool

congge 5865

47天洒热血复习,终于“挤进”了字节跳动(附面经+学习笔记)

Java高级架构师阿谷2019-11-19 06:00:00近两年,字节跳动的发展越来越快,导致想要进入字节跳动的应届生越来越多,竞争越来越大,所以字节跳动的面试也越来越难。对于普通本科出身的我,不得不说是一项挑战,而这项挑战能否成功的关键,就在于是否能够坚持,是否做好了充足的准备。毕竟,对于技术人员来说,技能水平远远比...

小屁孩大帅-保密的博客 102

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

我的世界最佳java_我的世界JAVA版20w47a

我的世界JAVA版20w47a是一款模拟沙盒游戏,游戏中有不同的玩法,可以让你在这里进行刺激的挑战,同时还可以制作各种物品,想要收集材料就需要去探索各个地图,你还可以与玩家互动,分享自己的创意,相互交流建造的心得。我的世界JAVA版20w47a游戏介绍我的世界JAVA版20w47a,不错的沙盒模拟类手机游戏,更加刺激的全新玩法就是如此痛快,超大的世界可以自由的进行探索,全新的故事情节完美融入其中,...

weixin_32060429的博客 498

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

mysql-connector-java-5.1.47.zip下载

mysql-connector-java-5.1.47.zip下载(点击此处下载)

S1901的博客 3511

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java连接ActiveMQ时报错:Unknown data type: 47

java连接ActiveMQ时报错: javax.jms.JMSException: Unknown data type: 47 at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:72) at org.apache.activemq.ActiveMQConnection.syncSend...

weixin_42324471的博客 2675

new Random(47) 随机数种子

 Random rand = new Random(47); 47作为起源数字,并不一定代表后面的数字范围。 47是一个产生随机数的魔法数字,这个问题到现在都没人能够解释, 只是经过很多次试验得到的,由47做种后,产生的随机数更加体现了随机性。 它没有什么具体的意义,只要理解随机数如果有一个种子,出现了比较随即的随机数, 而当种子是47的时候,随即率是最大的。 Random随机生成的各...

u010860697的博客 1408

2025java面试题47道选择题及答案[来看看你能做对多少!!!]

1、Java IO体系中,read方法从输入流中顺序读取源中的单个字节数据,如果到达源的末尾,该方法返回。D、构造方法的第一条语句如果是super(),则可以省略,该语句作用是调用父类无参数的构造方法。C、Java虚拟机是运行统一Java字节码格式文件的计算机进程,不同平台的虚拟机实现是不同的。6、在Java的IO操作中,( )方法可以直接将缓冲中的数据立即发送到网络中。A、两个对象的hashCode()相同,则equals()也一定为 true。

web15285868498的博客 1501

2025java面试题47道选择题及答案[来看看你能做对多少

1、Java IO体系中,read方法从输入流中顺序读取源中的单个字节数据,如果到达源的末尾,该方法返回。D、构造方法的第一条语句如果是super(),则可以省略,该语句作用是调用父类无参数的构造方法。C、Java虚拟机是运行统一Java字节码格式文件的计算机进程,不同平台的虚拟机实现是不同的。6、在Java的IO操作中,( )方法可以直接将缓冲中的数据立即发送到网络中。A、两个对象的hashCode()相同,则equals()也一定为 true。

web15185420056的博客 1328

Java连载47-多态基础语法、作用

一、多态的语法 1.两个类之间没有继承关系的,使用多态是不能编译的。 2.无论向上还是向上转型,都需要有继承关系。 3.什么时候需要向下转型? 当调用的方法或者属性是子类型特有的,在父类型中不存在,就需要向下转型。 4.著名异常:java.lang.ClassCastException package com.bjpowernode.java_learning; public class D47...

weixin_44630050的博客 258
上一篇: Java学习笔记46:Java 线程池
下一篇: Java学习笔记48:探秘Java虚拟机 gc的监控
老码农zhuli
老码农zhuli 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄14年 2456粉丝 312原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值