码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JVM内存结构


     1.哪些部分会出现内存溢出
         ①不会出现内存溢出的区域-程序计数器
         ②内存溢出的两种类型
           Ⅰ出现OutOfMemoryError的情况
               1️⃣堆内存耗尽-对象越来越多,又一直在使用,不能被垃圾回收
               2️⃣方法区内存耗尽-加载的类越来越多,很多框架会在运行期间动态产生新的类
               3️⃣虚拟机栈累积-每个线程最多会占用1M内存,线程个数越来越多又长时间运行不销毁时
           Ⅱ出现StackOverflowError的区域
               1️⃣虚拟机栈内部-方法调用次数过多(递归没有合适的出口)
        

    既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢?
                    这个问题,我们需要知道 GC 在什么时候回收内存对象,什么样的内存对象会被 GC 认为是“不再使用”的。
                    Java中对内存对象的访问,使用的是引用的方式。在 Java 代码中我们维护一个内存对象的引用变量,通过这个引用变量的值,我们可以访问到对应的内存地址中的内存对象空间。在 Java 程序中,这个引用变量本身既可以存放堆内存中,又可以放在代码栈的内存中(与基本数据类型相同)。 GC 线程会从代码栈中的引用变量开始跟踪,从而判定哪些内存是正在使用的。如果 GC 线程通过这种方式,无法跟踪到某一块堆内存,那么 GC 就认为这块内存将不再使用了(因为代码中已经无法访问这块内存了)。
                    通过这种有向图的内存管理方式,当一个内存对象失去了所有的引用之后,GC 就可以将其回收。反过来说,如果这个对象还存在引用,那么它将不会被 GC 回收,哪怕是 Java 虚拟机抛出 OutOfMemoryError 。
    java既然存在gc线程,为什么还存在内存泄漏? - THISISPAN - 博客园1.既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢?这个问题,我们需要知道 GC 在什么时候回收内存对象,什么样的内存对象会被 GC 认为是“不再使用”的。 Java中https://www.cnblogs.com/panxuejun/p/5888817.html

    方法区与永久代、元空间之间的关系
            ①方法区是JVM规范中定义的一块内存区域,用来存储类元数据、方法字节码
    即使编译器
            ②永久代是Hotspot虚拟机对JVM规范的实现(1.8之前)
            ③元空间是Hotspot虚拟机对JVM规范的实现(1.8之后),使用本地内存
    作为这些信息的存储空间

    JVM内存参数
            对于JVM内存配置参数: -Xmx10240m -Xms10240m -Xmn5120m -XX:SurvivorRatio=3
    其中最小内存值和Survivor总大小分别是
                 
       -Xmx:jvm的最大内存数 1024m:10g
            ​​​​​​​        -Xms:jvm的最小内存数 ​​​​​​​ 1024m:10g
                    -Xms:jvm的新生代内存数 ​​​​​​​  5120m:5g
                    -XX:SurvivorRatio=3      eden:from=3 所以新生代划分为5份 eden3 from1 to1
            所以Survivor:2g               

     

     

  • 相关阅读:
    DC电源模块过压保护功能介绍
    模型部署——onnx定义、读写和调试
    CDGA|做数据安全治理,先考个DAMA证书吧!
    单元测试实战(一)Controller 的测试
    拿走吧你,Fiddler模拟请求发送和修改响应数据
    你真的懂单例模式么
    数据预处理与模型评估【机器学习、人工智能、实际事例】
    spring security url动态授权
    浅谈Oracle数据库调优(1)
    数据结构与算法基础-(4)
  • 原文地址:https://blog.csdn.net/TIANJIAWEN/article/details/125412468
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号