JVM内存管理

2023-05-16

一、物理内存与虚拟内存:

             1、物理内存即RAM(随机存储器)

             2、寄存器,用于存储计算单元指令(如浮点,整数等运算)

             3、地址总线:连接处理器和RAM

             4、虚拟内存使得多个进程在同时运行可以共享内存

二、内存空间与用户控件

            1、内核空间指操作系统运行时所使用的用于程序调度,虚拟内存的使用或连接引荐资源等程序逻辑

            2、用户空间指用户运行程序所占的内存空间

三、java中需要使用的组件

           1、java堆

                 (1)定义:用于存储java对象的内存区域

                 (2)-Xmx表示堆的最大大小

                 (3)Xms表示堆的初始大小

                   (4) 一旦分配完成,就不能在内存不够时再向操作系统申请

            2、线程

                   定义:每个线程创建时JVM会为线程创建一个堆栈,通常在256k-756k之间

            3、类和类加载器

                     在SUN JDK中被存储在堆中,这个区域叫永久代(PermGen):只有HotSpot才有PermGen space;                                        JRockit(Oracle),J9(IBM)并没有PermGen space;JDK1.8中PernSize和MaxPerGen已经无效,jdk1.8使用元空间替                      代PermGen空间,元空间并不在虚拟机中,而是在本地内存;

                 默认的3个类加载器:1、Bootstrap ClassLoader;2、ExtClassLoader;3、AppClassLoader

            4、NIO

                 jdk1.4版本之后引入了一种基于通道和缓冲区来执行I/0的新方式,使用java.nio.ByteBuffer.allocateDirect()方法分配内                   存、分配的是本机内存而不是java堆内存,每次分配内存是会调用操作系统的os::malloc

           5、JNI

                  JNI使得本机代码(如C语言程序)可以调用java方法,也就是native memory

四、JVM内存结构

           1、PC寄存器:记录线程当前执行到哪条指令

           2、栈

           3、堆

           4、方法区:用于存储类结构信息,可以被所有线程共享,它不会频繁的GC

           5、运行时常量池:代表运行时每个class文件中的常量表((1)、数字常量;(2)、方法;(3)、字段的引用)

           6、本地方法栈:为JVM运行Native方法准备的控件

五、JVM内存回收策略

       1、回收原则

               引用计数法:给对象中添加一个引用计数器,每当一个地方引用这个对象时,计数器值+1,当引用失效时,计数器                       值-1.这种算法使用场景很多,但是,java中却没有使用这种算法,因为这种算法很难解决对象之间相互引用的情况;

        2、可达性分析

              通过一系列称为“GC Roots”的对象作为起点,从这些节点向下搜索,搜索所走过的路径称为引用链,当一个对象到GC                  Roots没有任何引用链(即GC Roots到对象是不可达)时,则证明此对象是不可用的。

        3、引用状态

              (1)强引用:代码中普遍存在的类似“Object obj=new Object()”这类引用,只要强引用还存在,垃圾收集器永远不                           会回收掉被引用的对象;

              (2)软引用:描述有些还有用但并非必要的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围                            进行二次回收,如果这次回收还没有足够的内存,才会抛出内存溢出异常,java中的softRefence表示软引用;

              (3)弱引用:描述非必须对象,被若引用关联的对象只能生存到下一次垃圾回收之前,垃圾收集器工作之后,无论当                           前内存是否是足够,都会回收掉只被弱引用引用关联的对象。java中的类的WeakReference表示若引用

              (4)虚引用:这个引用存在的唯一目的就是在这个对象被收集器回收时收到一个系统通知,被虚引用的关联的对象,                           和其生存时间没有关系。java中的类PhantomReference表示虚引用

          4、方法区的垃圾回收

               (1)废弃常量:以字面量回收为例,如果一个字符串“abc”已经进入常量池,但当前系统没有任何一个String对象叫做                            “abc”的字面量,那么如果发生垃圾回收并且有必要时,“abc”就会被清除常量池

               (2)无用的类:该类的所有实例都已经被回收,即java堆中不存在该类的任何实例;加载该类的ClassLoader已经被回                          收;该类对应的java.lang.class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法

          5、垃圾收集算法

               (1)标记-清除(Mark-Sweep)算法

               (2)复制(Copying)算法

               (3)标记-整理(Mark-Compact)算法

               (4)分代收集算法

六、JVM参数

-Xmx3550m:设置堆最大值

-Xms3550m:设置初始堆大小

-Xss128K:设置线程大小

-Xmn2g:设置年轻代大小,在整个堆内存大小确定的情况下,增大年轻代将会减小老年代,反之亦然

-XX:NewSize=1024:设置年轻代的初始值

-XX:maxNewSize=1024m:设置年轻代的最大值

-XX:Permsize=256m:设置持久代最大值

-XX:NewRatio=4:设置年轻代和老年代的比值(包括一个Eden和两个Suvivor)

-XX:SurvivorRatio=4:设置Survivor区和Eden区的比值

-XX:MaxTenuringThreashold=7:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM内存管理 的相关文章

  • 生产者消费者代码实现(JAVA)

    代码 import lombok extern slf4j Slf4j import java util LinkedList final class Message 单条消息 private int id private String m
  • 手误删除服务器tomcat下的bin目录,./start.sh无效

    关于LINUX权限 bash startup sh Permission denied 在执行 startup sh 或者 shutdown sh的时候 xff0c 爆出了Permission denied xff0c 其实很简单 xff0
  • C++ 进程间通信

    一 xff0c C 43 43 常用进程间通信 管道 Pipe xff1a 管道可用于具有亲缘关系进程间的通信 xff0c 允许一个进程和另一个与它有共同祖先的进程之间进行通信 命名管道 named pipe xff1a 命名管道克服了管道
  • 【Android7.1.2源码解析系列】Android ADB概览 ---system/core/adb/OVERVIEW.txt

    ADB实施笔记 I 总体概览 xff1a 安卓调试桥 ADB 被用来 xff1a 保持一条指向于所有安卓设备以及连接向或者运行于所给的开发主机的仿真机 实现多个适用于客户端 命令行用户或者像DDMS那样的帮助程序 的控制命令 比如说 34
  • 内存泄漏 定位方法

    目录 内存概念 物理内存 虚拟内存 内存泄漏 定位方法和手段 1 MemInFo MemTotal MemFree MemAvailable Cached 2 vmalloc info 3 Kmemleak 算法原理 使用方法 参考文献与链
  • 关于环形缓冲区的用法和理解

    通信中 xff0c 经常会遇到数据交互的问题 为了保证数据的高效处理和解析 xff0c 通常会有 缓冲区的说法 接下来谈谈常用的环形缓冲区的特点和使用方法 xff1a 说到环形缓冲区 xff0c 相信大家都不会陌生 xff0c 这里就不贴图
  • 电脑安装系统时提示“找不到硬盘”如何解决

    电脑安装系统的方法有很多众 xff0c 比较常见的是用PE来安装的 xff0c 当然也可以用U盘安装 安装过程中无法识别到硬盘那是很正常的事 xff0c 相信大部分用户都遇到过 xff0c 该如何解决 xff1f 不要担心 xff0c 本教
  • springMVC零配置之上下文配置

    记得刚参加工作的时候 xff0c 搭建springMVC框架还是需要手动配置web xml文件 xff0c 现在已经被渐渐淘汰了 xff0c 在项目中几乎看不到有这种配置了 xff0c 取而代之的是springMVC的零配置 xff0c 原
  • 记一次美团校招内推笔试经历

    2019年4月23日星期二晚上七点 这天刚好项目上生产我负责留守做远程技术支持 留下的还有个重要的原因就是今晚我有一个美团的笔试 七点笔试准时开始 信心满满打开网页地址 美团用的是赛码网来做的笔试题库 xff0c 再次之前收到了邀请码输入进
  • Android 使用 Kotlin 重写 Gradle 文件(Kotlin Gradle DSL)

    概述 众所周知 xff0c 我们在 Android Studio 是使用 Gradle 来编译的 xff0c Gradle 是一种基于 Groovy 语言的构建工具 xff0c 我们平时看到的 build gradle 中的语法结构其实就是
  • Can't open /dev/sda3 exclusively. Mounted filesystem?解决办法

    报错 root 64 hadoop101 moduels pvcreate dev sda3 Can t open dev sda3 exclusively Mounted filesystem 处理方法 umount home ext 上
  • Execution failed for task ‘:app:checkDebugDuplicateClasses‘.崩溃了崩溃了

    FAILURE Build completed with 2 failures 1 Task failed with an exception What went wrong Execution failed for task 39 app
  • @RunWith报错/SpringJUnit4ClassRunner报错或无法使用

    项目场景 xff1a 问题描述 xff1a 64 RunWith SpringJUnit4ClassRunner class 报错 第一步 xff1a 首先确保你的pom下有这两个依赖的jar包坐标 注意junit版本要4 12或者以上 我
  • java集合的扩容机制

    目录 ArrayList 和Vector扩容机制总结 xff1a LinkedList没有扩容机制 xff1a HashSet和HashMap扩容机制总结 xff1a Hashtable扩容机制 xff1a 小结 xff1a HashTab
  • virtualbox 开机启动虚拟机方案(无CMD窗口)

    通过bat与vbs组合使用 xff0c 让virtualbox在开机自启动时没有cmd窗口 xff0c 核心是start b指令与ws Run 34 E virtualbox virtualbox boot bat 34 0命令 1 进入
  • idea使用教程

    目录 一 创建Java工程二 设置显示常见的视图三 常用配置 xff08 重点 xff09 四 IDEA常用快捷键五 创建Java Web Project或Module六 IDEA配置本地 Tomcat七 IDEA关联数据库 xff1a 一
  • Mybatis的增删改查和resultMap的使用

    目录 MyBatis的增删改查jdbcType的使用和作用 xff1a 获取自增主键的值 xff1a 自增主键的作用和使用方法 xff1a MyBatis的接口方法的参数如何与映射文件进行关联 xff1a 1 单个参数 xff1a 2 多个
  • Maven的安装与配置(详细版)

    目录 一 安装本地Maven xff08 1 xff09 下载Maven xff1a xff08 2 xff09 解压Maven xff1a xff08 3 xff09 配置Maven环境变量到Path中 xff1a xff08 4 xff
  • Redis哨兵模式(一主二从三哨兵)

    目录 一 redis环境 xff1a 二 哨兵介绍 xff1a 三 安装redis 四 使用Redis主从复制的作用 xff1a 五 配置redis一主二从 xff1a redis启动前的准备工作 xff1a 六 配置redis三哨兵 xf
  • 微信登录的接口

    目录 第一步 xff1a 生成微信扫描二维码 网页内嵌的二维码 接口第二步 xff1a 处理微信回调 xff0c 获取扫描人信息 微信开放平台 xff1a https developers weixin qq com doc oplatfo

随机推荐

  • Linux安装MongoDB(简单详细)

    目录 MongoDB 安装环境1 下载 MongoDB 的linux安装包2 上传 MongoDB 安装包到linux系统中 xff1a 3 解压 MongoDB 安装包4 创建 MongoDB 必要目录5 移动 MongoDB 安装目录6
  • 镀镍的工艺

  • Solidworks学习一

    目录 页面介绍 xff1a 视图操作 xff1a 实例圆柱 xff1a 直线的绘制 xff1a 草图的保存和不保存 xff1a 绘制工具 xff1a 切线弧 xff1a 转换实体引用 xff1a 交叉曲线 xff1a 等距实体 xff1a
  • 螺纹的标记

    M2 xff1a 螺纹孔的画法 例如M2的螺纹 怎么画螺纹孔 1 外螺纹 xff0c 大径是螺纹标准值用粗实线画 xff0c 小径用细实线画 在沿端面看时 xff0c 大径是整圆 xff0c 小径是3 4圆 2 内螺纹 xff08 螺纹孔
  • c#日志组件Serilog使用

    NuGet 安装 Serilog 核心的包是 Serilog 和 Serilog AspNetCore 建议安装 Serilog AspNetCore xff0c 几乎包含了Serilog常用的所有包 异步写入 Serilog Sinks
  • Zynq-7000系列之linux开发学习笔记:PS和PL端的GPIO使用(三)

    开发板 xff1a Zynq7030数据采集板 PC平台 xff1a Ubuntu 18 04 43 MobaXterm 开发环境 xff1a Xilinx Vivado 43 SDK 18 3 学习目标 xff1a PS通过 EMIO A
  • 人工智能革命(上):通往超级智能之路

    导读 xff1a 本系列文章讲述了人工智能革命的爆发以及人类未来的出路 xff0c 由于篇幅较长分为上下两篇 xff0c 原英文载于神奇的网站 WaitButWhy com xff0c 作者Tim Urban还写过一篇有关脑机接口的文章 N
  • kubelet源码分析

    做个笔记记录k8s中赫赫有名的LIST amp WATCH 其实之前的文章中都有过watch的身影了 分别是informer篇和configCh篇这两篇其实都共用了client go包中的LIST amp WATCH方法 这篇内容详细讲一下
  • Li‘s 核磁共振影像数据处理-20-FSL数学工具fslmaths

    讲解视频内容请移步Bilibili xff1a https space bilibili com 542601735 入群讨论请加v hochzeitstorte 请注明 核磁共振学习 公众号 xff1a 美好事物中转站 FSLeyes F
  • CentOS7 防火墙(firewalld、iptables)-端口相关问题

    firewalld Centos7默认安装了firewalld xff0c 如果没有安装的话 xff0c 可以使用 yum install firewalld firewalld config进行安装 1 启动防火墙 systemctl s
  • centos 7.5 安装桌面环境及报错

    一 查看运行级别 xff0c 输入命令 xff1a runlevel 二 查看centos7 5系统中没有是否安装过桌面环境工具 xff0c 输入命令 xff1a yum grouplist more 注 xff1a 此命令还显示了系统安装
  • Seata(一) 服务配置以及启动

    文章目录 Seata 介绍Seata 简介Seata 演进历史Seata 设计理念Seata 的三大组件seata 实现的 2PC 与传统 2PC 的区别 Seata Server 安装Seata Server 下载Seata Server
  • 新手入门:PyCharm 的使用

    初次接触 pycharm 不要怕 xff0c 这篇文章帮你快速入门 xff0c 点击收藏不迷路 相关文章 xff1a Windows 10 同时安装 Python 2 和 Python 3 推荐一个视频 xff1a pycharm使用教程
  • EntityFrameworkCore 运行时数据迁移

    EntityFrameworkCore 以后简称EFCore 是 net core的一个orm框架 xff0c 以前在 net framework中使用时候利用code first可以在程序运行的时候自动迁移数据库 xff0c 更新数据库表
  • query.unwrap(SQLQuery.class).setResultTransformer弃用

    替换为 query unwrap span class token punctuation span NativeQueryImpl class span class token punctuation span setResultTran
  • pyinstaller报错AttributeError: type object ‘Callable‘ has no attribute ‘_abc_registry‘

    遇到问题 xff1a pyinstaller 打包文件时失败 xff0c 报错 xff1a AttributeError type object Callable has no attribute abc registry 解决方法 xff
  • Mysql数据库完全备份与恢复

    一 数据备份的重要性 在生产环境中 xff0c 数据的安全性是至关重要的 xff0c 任何数据的丢失都可能产生严重的后果 造成数据丢失的原因如下 程序错误人为错误计算机失败磁盘失败灾难 如火灾 地震 和盗窃 二 数据库备份的分类 1 从物理
  • [sourcetree] rebase的使用

    相关问题 最近写自己的辣鸡代码使用git时 xff0c 因为个人不大熟悉git又是个强迫症 xff0c 被来回不同的版本折腾来折腾去的 xff0c 十分不爽 xff0c 于是在此小结下sourcetree怎么使用变基 变基rebase这个操
  • mac下word有何无格式粘贴快捷键设置为默认方法

    补充说明 xff1a 后来使用发现可能是默认的快捷键 xff1a Command 43 V 粘贴无格式文本 xff1b control 43 V 粘贴格式文本 mac word 16 3之前的版本 xff0c 粘贴有Bug xff0c 只能
  • JVM内存管理

    一 物理内存与虚拟内存 xff1a 1 物理内存即RAM 随机存储器 2 寄存器 xff0c 用于存储计算单元指令 xff08 如浮点 xff0c 整数等运算 xff09 3 地址总线 xff1a 连接处理器和RAM 4 虚拟内存使得多个进