JVM的内存管理

今天通过无意中看到了String类的intern()方法,意义是把这个String放入到运行时常量池。回顾了一下 深入java虚拟机 这本书,总结一下jvm的内存管理

方法区(Permanent Generation) [color=red]VM Args:-XX:PermSize=10M -XX:MaxPermSize=10M[/color]。运行时常量池,类和方法的字节码文件的存储都在这个区。 这个区有些文章说没有GC,但是实际上现代的JVM也会对这个区进行GC,只是频率很低。 Spring会利用代理技术来支持AOP,产生的代理对象也在这个区。

VM栈(stack) [color=red]VM Args:-Xss[/color] 线程运行的栈区,包括方法执行的帧(frame)和临时变量。32位系统如果不设置的话,默认是10M(待确认)

堆(Heap) [color=red]VM Args:-Xms20m -Xmx20m[/color] 存放对象实例,为所有线程共享

关于堆又被划分为新生代(young generation)和旧生代(old generation)。 新生代又被隔离为(eden, survivor A, survivor B),这么划分的目的主要是为了防止内存碎片,通过复制收集算法来回收内存。 因为程序执行过程中会产生很多临时对象,而其中的大部分一次用完就基本没用了。所以如果eden区在不能满足要分配对象的空间的时候,就会触发一次minor GC。 minor GC扫描eden区,把继续存活的对象拷贝到Survivor A中。如果survivor区域的空间不够大,则直接拷贝到旧生代中
[color=red]VM参数:-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8[/color]通过分配byte[]来测试触发minor GC。 另外在eden经过GC后存活,并且survivor能容纳的对象,将移动到survivor空间内,如果对象在survivor中继续熬过若干次回收(默认为15次)将会被移动到旧生代中。在Minor GC触发时,会检测之前每次晋升到老年代的平均大小是否大于老年代的剩余空间,如果大于,改为直接进行一次Full GC,如果小于则查看HandlePromotionFailure设置看看是否允许担保失败,如果允许,那仍然进行Minor GC,如果不允许,则也要改为进行一次Full GC。
JVM的内存管理机制详解 Java与C++之间有一堵由内存动态分配和垃圾回收机制所围成的高墙,墙外面的人想进去,墙里面的人出不来对于Java程序员来说,JVM给我们提供了自动内存管理机制,不需要既当“皇帝”,又当“人民”,不需要人为地给每一个new操作写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题。然而一旦出现内存泄漏和溢出方面的问题,如果不清楚JVM内存的内存管理机制,那么将很难定位与解决问题。而且,JVM的内存管理机制在面试中也是非常重要的考点之一。 阅读详情

相关推荐

JVM-内存管理

Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 JVM内存管理 在之前,我们了解了JVM的大致运作原理以及相关特性,这一章,我们首先会从内存管理说起。 在传统的C/C++开发中,我们经常通过使用申请内存的方式来创建对象或是存放某些数据,但是这样也带来了一些额外的问题,我们要在何时释放这些内存,怎么才能使得内存的使用最高效,因

「 虚幻私塾」 1442

初识JVM,JVM自动内存管理

对于Java虚拟机在内存分配与回收的学习,如果读者大学时代没有偷懒的话,操作系统和计算机组成原理这两门功课学的比较好的话,理解起来JVM是比较容易的,只要底子还在,很多东西都可以触类旁通。

m0_74823778的博客 2215

JVM_第五篇:初识JVM,JVM自动内存管理

​@[TOC] 一、前言 对于Java虚拟机在内存分配与回收的学习,如果读者大学时代没有偷懒的话,操作系统和计算机组成原理这两门功课学的比较好的话,理解起来JVM是比较容易的,只要底子还在,很多东西都可以触类旁通。 1.1 计算机==>操作系统==>JVM JVM全称为Java Virtual Machine,译为Java虚拟机,读者会问,虚拟机虚拟的是谁呢?即虚拟是对什么东西的虚拟,即实体是什么,是如何虚拟的?下面让我们来看看“虚拟与实体”。 ​关于计算机、操作系统、JVM三者关系,如下图:​

毛毛的专栏 2972

JVM之内存管理(一)

JVM内存结构主要包括堆、栈、方法区等区域。堆用于存储对象实例,是所有线程共享的内存区域。栈是线程私有的,用于存储局部变量和方法调用的上下文。方法区存储类信息、常量、静态变量等。栈帧包含局部变量表、操作数栈、动态链接和方法返回地址。对象创建涉及类加载检查、内存分配、初始化和设置对象头等步骤。类加载过程包括加载、连接、初始化等阶段。内存分配可通过指针碰撞或空闲列表实现。引用类型包括强引用、软引用、弱引用和虚引用,分别用于不同场景下的内存管理。内存泄露和内存溢出是常见问题,前者指无用对象无法被回收,后者指内存不

LUCIAZZZ的博客 1895

三相逆变器LCL滤波设计实战:从αβ转换到dq解耦控制的完整建模流程

本文详细解析了三相逆变器LCL滤波设计中的关键步骤,从αβ转换到dq解耦控制的完整建模流程。重点介绍了dq坐标系下的解耦控制策略,通过Simulink仿真验证模型准确性,并提供谐振峰偏移、解耦不彻底等实际问题的解决方案,助力电力电子工程师提升系统稳定性。

weixin_28678151的博客 229

瑞芯微RK3568与RK3566芯片选型指南:从接口差异到应用场景深度解析

在嵌入式系统与边缘计算领域,芯片选型是决定产品成败的关键一步。其核心在于理解芯片的架构、接口扩展能力与系统可靠性之间的平衡。以瑞芯微(Rockchip)的RK3568和RK3566为例,这两款同为四核A55架构的芯片,在基础算力上相近,但其面向的应用赛道却因接口配置而截然不同。RK3568凭借其双千兆网口、PCIe 3.0高速接口以及全链路ECC内存支持,在技术价值上更侧重于构建高可靠、高扩展性的系统,如边缘计算网关、工业控制器和网络视频录像机(NVR)。相比之下,RK3566则以其精简的接口配置,精准服务

weixin_33314040的博客 480

JVM内存管理

JVM的内存管理就像一个聪明的“管家”,通过划分内存区域(堆、栈、方法区等)、合理分配内存、自动垃圾回收,确保Java程序高效、稳定运行。理解这些,不仅能帮你写出更好的代码,还能在排查问题时更有底气。

m0_73889530的博客 975

PyTorch多机训练Loss不一致问题排查指南:基于算子级一致性验证

比较二次训练过程中所有算子的误差,定位存在一致性问题的pytorch算子

Hi20240217的博客 1158

JVM内存管理笔记

OutOfMemoryError(OOM)是JVM在尝试为对象分配内存但没有足够的内存空间时抛出的错误。这通常发生在堆内存(Heap Memory)被耗尽时。

DonnyCoy 939

利用Nginx反向代理实现GitLab自定义域名的高效配置

本文详细介绍了如何利用Nginx反向代理实现GitLab自定义域名的高效配置。通过统一域名管理、性能优化和安全加固,提升GitLab的访问效率和安全性。文章包含前期准备、GitLab基础配置、Nginx反向代理设置及常见问题排查,帮助开发者快速完成部署。

weixin_28834169的博客 164

Mind+掌控板实战:5分钟搞定Easy IoT的MQTT通讯(附完整代码)

本文详细介绍了如何利用掌控板和Mind+图形化编程软件,快速实现基于Easy IoT平台的MQTT通讯。通过清晰的步骤讲解和完整的代码示例,指导用户完成从云端配置、Wi-Fi连接到MQTT消息发布与订阅的全过程,帮助初学者轻松构建物联网设备间的双向对话系统。

weixin_29300241的博客 449

JVM 内存管理详解

堆 (Heap):所有线程共享的内存区域,主要用于存储对象实例、数组等数据。方法区 (Method Area):存放类信息、静态变量、常量池等数据。栈 (Stack):每个线程创建时都会创建一个栈空间,用于存储局部变量、操作数栈、动态链接等信息。程序计数器 (Program Counter Register):线程私有的小块内存,用来指示当前线程所执行的字节码指令的位置。直接内存 (Direct Memory)

pjx987的博客 1821

一文速览:大模型语料构建与基础训练全流程实战指南

因为模型只有看到足够丰富、高质量的数据,才能真正学到“真本事”,展现出更强大的泛化能力,也就是能够在全新的场景和任务下,做出准确的推理和判断。我们日常做饭的时候,通常会先把买回来的菜仔细清洗干净,把坏掉的叶子、泥土、杂质等去除掉。同理,训练大模型的数据就像我们的食材,如果不干净,就会影响模型的学习效果,甚至训练出逻辑紊乱的模型。在大模型的世界里,有一句名言:“Garbage in, Garbage out”,翻译过来就是“垃圾输入,垃圾输出”,说白了,就是给模型喂的是什么数据,它学到的就是什么知识。

master_hunter的博客 1671

【JAVA】JVM中的内存管理详解

JVM中的内存管理详解

weixin_37559642的博客 1564

【U-Net 数据集制作】如何制作自己的图像分割数据集?(标注与格式转换),图像分割数据集制作与转换神器

在前面的课程中,我们像搭积木一样手写了 U-Net 的网络架构。很多同学迫不及待地想把自己的图片喂进网络开始“炼丹”。但是,深度学习界有一句名言:“数据决定了模型的上限,而网络结构只是在逼近这个上限。用标注工具标出来的是 JSON 文件,怎么变成 U-Net 需要的黑白掩码(Mask)图?为什么我的 Mask 肉眼看是黑白的,一放进 PyTorch 训练就报?如何快速按 8:2 的比例把几千张图片和标签划分成训练集和验证集?

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 193

Python爬取公交线路信息及站点shp数据 文末附数据下载地址

三、现在已经获取到了各个线路名称、链接,以及所途径的上下行站点,那么接下来就应该对开始对第三页url进行信息采集,即本次爬虫的最终目的:爬取所有站点的GPS坐标数据。但坑就坑在,二环一号线属于环线,所以只有左侧有站点数据,而其他非环线车次的站点数据分有上下行,如果用正则匹配,则分不清楚到底哪些是上行站点哪些是下行站点。以前爬过百度地图,当时用的是API平台,加上网站比较规范,所以标签节点什么的都比较清晰,但这次由于特殊原因所选择的网站为公交网,废话不多说直接开始吧。checi=二环一号线。

J_Giser的博客 1316

JVM内存管理和JVM性能优化

1.JVM的gc概述     gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作。     在充分理解了垃圾收集算法和执行过程后,才能有效的优化它的性能。有些垃圾收集专用于特殊的应用程序。比如,实时应用程序主要是为了避免垃圾收集中断,而大

janvinal的专栏 2311

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JVM——自动内存管理

引入 JAVA不同于C或者C++编程语言,其一是编程的思想,JAVA面向对象,C或者C++面向过程;其二就是JAVA是一门自动管理内存的语言,而C或者C++则需要编程人员自动管理。而JAVA的自动内存管理实现则是要依靠JVM的内存管理机制 JVM运行时数据区 在说明JVM的自动内存管理的前,需要对JVM的内存划分有清楚的模型认识,才能更好的立即JVM的自动内存管理的实现。JVM的内存划分为如下几部...

优快云advancer的博客 453

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

引用 JVM内存管理总结

引用 JVM内存管理总结 http://topic.youkuaiyun.com/u/20090602/10/bd9d4ba2-dbeb-49b3-8651-67c5de2b228a.html 近期看了看Java内存泄露的一些案例,跟原来的几个哥们讨论了一下,深入研究发现JVM里面还是有不少

sunny110的专栏 634

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java jvm的内存管理

一.综述 如果你学过C或者C++,那么你应该感受过它们对内存那种强大的掌控力。但是强大的能力往往需要更强大的控制力才能保证能力不被滥用,如果滥用C/C++的内存管理那么很容易出现指针满天飞的情况,不出问题还好,一出问题debug起来简直让人头疼得不要不要的。借用一句话,“指针一时爽,重构火葬场”。 而对java程序员来说,则没有这样的烦恼,因为java直接将内存管理交由jvm来管理,这样程序员在编...

stc的博客 203

JVM概述和内存管理

首先代码会被javac编译器编译成.class字节码(类的基本信息、常量池、方法定义)存于方法区;然后字节码被JVM通过(方法区的)类加载器进行加载到方法区(元空间);接着字节码中的方法定义中的虚拟机指令被解释器解释成机器码(根据不同的平台生成不同的机器码),这个过程会去常量池中查表;然后分配执行这段指令需要的资源—主要是内存。CPU执行指令把结果写回内存了。..........................................

机械工程跑路哥 812

JVM和JVM内存管理

以上是从内存管理的角度对jvm进行的知识框架梳理,以后在工作中还要多多使用,多多体会。同时,结合已有的工作经验,我更加深刻的认识到,有些时候因为对原理的不了解,研发过程中的一些不经意的"小操作",都可能引起巨大风暴:大量没有被引用的类文件,如果被加载到jvm中,在metaSpaceSize设置的少时,有可能引起OutofMemoryError:Metaspace错误;队列长度设置不当,很有可能导致内存溢出;完善的内存监控系统可以使我们的系统如虎添翼。

软件工程探索之旅 954
下一篇: spring security3的基本配置和使用
pwc_beyond
博客等级 码龄19年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值