码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JavaWeb-JVM内存管理机制


    JavaWeb-JVM内存管理机制

      • 一、JVM内存管理概述
        • 1.1 什么是JVM内存管理
        • 1.2 物理内存与虚拟内存
        • 1.3 内核空间与用户空间
      • 二、java中哪些组建需要使用内存
        • 2.1 Java堆
        • 2.2 线程
        • 2.3 类和类加速器
        • 2.4 NIO
        • 2.5 JNI
      • 三、JVM内存结构
        • 3.1 PC寄存器
        • 3.2 Java栈
        • 3.3 堆
        • 3.4 方法区
        • 3.5 运行时常量池
        • 3.6 本地方法栈
      • 四、JVM内存分配策略
        • 4.1 通用的内存分配策略
        • 4.2 Java中的内存分配详解
      • 五、JVM内存回收策略
        • 5.1 静态内存分配和回收
        • 5.2 动态内存分配和回收
        • 5.3 如何检测垃圾
        • 5.4 基于代码的垃圾收集算法
      • 六、内存问题分析
        • 6.1 GC日志分析
        • 6.2 堆快照文件分析
        • 6.3 JVM Crash日志分析

    一、JVM内存管理概述

    1.1 什么是JVM内存管理

    JVM内存管理是Java虚拟机所特有的一种内存管理技术,它主要负责动态的分配和回收内存资源。这种自动内存管理机制可以帮助Java程序员更有效地处理内存,避免了频繁编写和删除代码,从而减少了内存泄露和溢出的问题。

    JVM管理的内存包括五个不同的运行时数据区域:程序计数器、虚拟机栈、本地方法栈、堆和方法区。

    程序计数器是每个线程私有的内存区域,它可以看做是当前线程执行字节码的行号指示器。虚拟机通过改变这个计数器的值来选择下一条需要执行的字节码指令。

    虚拟机栈则是用于存储局部变量表、操作数栈、动态链接、方法出口等信息的数据区域。每当一个方法被调用至执行完成,都会对应一个栈帧在这个区域进行入栈和出栈的操作。

    本地方法栈与虚拟机栈类似,只不过它是服务于本地方法(Native Method)的。而堆和方法区则是用来存储已被虚拟机加载的类信息、常量、静态变量等数据的区域。

    1.2 物理内存与虚拟内存

    物理内存和虚拟内存都是计算机系统中重要的内存管理技术。物理内存,也被称为RAM,是计算机中实际存在的内存,相当于手机上的运行内存。而虚拟内存则是建立在物理内存之上的一种内存管理技术,它将计算机的物理内存和硬盘上的临时空间组合在一起,当物理内存不足时,虚拟内存会将部分数据从物理内存移动到硬盘上的分页文件。

    这两者间的联系在于,虚拟内存的管理需要借助于物理内存,同时虚拟内存的使用也会影响到物理内存的使用。如果虚拟内存过于频繁地使用硬盘空间,则会降低计算机的整体性能。在系统运行过程中,任何程序都不会直接访问物理内存,而是访问虚拟内存。因此,虚拟内存的存在有效地解决了物理内存不足的问题,增强了计算机的运行能力。

    1.3 内核空间与用户空间

    操作系统将可访问的内存空间分为两部分,一部分是内核空间,一部分是用户空间。内核空间是操作系统内核访问的区域,独立于普通的应用程序,是受保护的内存空间。而用户空间则是普通应用程序可以访问的内存区域。

    以Linux为例,内核空间是Linux内核的运行空间,用户可以在这个空间中执行任意命令,调用系统的一切资源;相对而言,用户空间是用户程序的运行空间,它只能执行简单的运算,并且不能直接调用系统资源。当用户程序需要调用系统资源时,例如读写文件,必须通过系统接口(也称为system call),向内核发出指令。这种设计保证了系统的安全性,即使用户的程序崩溃了,内核也不会受到影响。

    值得注意的是,无论是内核空间还是用户空间,它们都处于虚拟空间中。对于32位操作系统来说,其寻址空间(虚拟地址空间)为4G(即2的32次方),这意味着一个进程的最大地址空间为4G。操作系统的核心即内核,就位于这个寻址空间中

  • 相关阅读:
    Python---函数的作用,定义,使用步骤(调用步骤)
    ORM之聚合查询,分组查询,F查询,Q查询,ORM查询优化,事务操作,常见字段及参数,多对多三种表的创建
    docker-compose 安装 jekins
    Java+JSP+MySQL基于SSM的智能推荐商城系统-计算机毕业设计
    阳离子卟啉化合物修饰氯甲基化交联/聚乙烯基吡啶阳离子功能化聚苯乙烯微球的研究
    【reverse】buu-[Zer0pts2020]easy_strcmp——main函数的启动过程+IDA动态调试ELF
    [ESP32][esp-idf] AP+STA实现无线桥接(中转wifi信号)
    33.线程中常用的方法【20220811】
    redis(1)-hiredis-Windows下的编译
    【博士每天一篇文献-算法】Gradient Episodic Memory for Continual Learning
  • 原文地址:https://blog.csdn.net/miaoyl1234/article/details/134540862
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号