JVM优化

2023-10-28

java运行时数据区::

程序计数器---------线程私有
​
java虚拟机栈-------线程私有
​
本地方法栈---------线程私有
​
java堆-------------线程公用
​
方法区-------------线程公用

 

jvm内存分配

栈内存分配:(私有的,不会存在线程安全)

- 保存参数,局部变量,中间计算过程和其他的数据,退出方法时候,修改栈顶指针就可以把栈中的内容销毁
​
-栈的优点:存取速度比堆快,仅次于寄存器,栈数据可以共享
​
-栈的缺点:存在栈中的数据大小,生存周期是在编译时就确定的,导致其缺乏灵活性
-xss: 每个线程最大数

堆内存的分配

- 堆的优点:动态地分配内存大小,生存期不必事先告诉编译器,它是在运行期动态分配的,垃圾回收器会自动收走不再使用的空间区域
- 堆的缺点:运行时动态分配内存,在分配和销毁时都要占用时间,因此效率较低

jvm堆结构:young old permantent

Young 新生区
 -  Eden(E区):舒适区 ->new object 优先放置
 -  SurvivorSpaces(S区):挽救区-->一次回收
    From(s0)
    To(s1)
-  Old(Tenured Generation) :老的-->二次回收
-  Permanert:方法区
​

java堆结构和垃圾回收()

Direct Gen:java 1.7以上存在内存映射 可以直接操作物理内存,不会通过jvm(spring 反射)
java GC管理:
Perm Germ->minor GC->old ger==full gc
​

jvm堆配置参数

1.-Xms初始堆大小
默认物理内存的1/64(<1GB)
2.-Xmx最大堆大小
默认物理内存的1/4(<1GGB),实际中建议不大于4GB
3.一般建议设置 -Xms=-Xmx
好处是避免每次GC后,调整堆的大小,减少系内存的分配开销
4.整个堆的大小=年轻代大小+年老代大小+持久代大小

jvm新生代(young generation:-Xmn)

1.新生代=1个Eden区+2个Survisor区
2.-Xmn 年轻带大小(1.4 or lator)
   -XX:NewSize,-XX:MaxNewSize(before 1.4)
   默认整个堆的3/8
3.-XX:NewRatio
    年轻带(eden and survivor)与年老带的比值(除去持久代)
    Xms=Xmx并且设置了Xmm的情况下,该参数不需要设置
4.-XX:SurvivorRatio==>E+S1+S2~8/1/1
Eden区与Survivor区的大小比值大小,设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占年轻带的1/10
5.用来存放JVM刚分配的java对象优先放入young区

java老年代(tenured generation)

1.老年代=整个堆-年轻代大小-持久代大小
2.年轻代中经过垃圾回收没有回收掉的对象被复制到老年代
3.老年代存储对象比年轻代年龄大的多,而且不乏大对象
4.新生的对象也有可能直接进入老年代
    4.1大对象可通过启动参数设置-XX:PreteureSizeThreshold=1024(单位为    字节,默认为零)来代表超过多大时就不在新生代分配,而是直接在老年代分配
    4.2大的数组对象,且数组中无引用数组中无引用外部对象.
5.老年代无配置参数
    

java持久代(perm generation)

1.持久代=整个堆-年轻代-老年代大小
2.-XX:PermSize -XX:MaxPermSize
    设置持久代的大小,一般情况推荐把-XX:PermSize设置成XX:MaxPermSize
    的值,因为永久代大小的调整也会导致堆内存需要触发fgc.
3.存放Class\Method元信息,其大小与项目的规模\类\方法的常量有关.一般设置为   128M就足够,设置原则预留30%的空间.
4.永久代的回收方式
    4.1常量池中的常量,无用的类信息,常量的回收很简单,没有引用就被回收了
    4.2对于无用的类进行回收,必须保证三点:
        类的所有实例都已经被回收
        加载类的ClassLoader已经被回收
        类对象的Class对象没有被引用(既没有被映射)
        

JVM垃圾回收算法

1.引用计数算法
    每个对象都有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减     1,计数为0时可以回收.此方法简单,无法解决对象相互循环引用的问题.还有一     个问题是如何解决精准计数.(1.2之前)
2.根搜索算法
    从GC ROOTS开始向下搜索,搜索所走过的路径称为引用链.当一个对象到GC      ROOT没有任何引用链相连时,则证明此对象是不可用的,不可达对象.
    在java语言中,GC ROOTS包括:
    虚拟机栈中引用的对象
    方法区中类静态属性实体引用的对象
    方法区中常量引用的对象
    本地方法栈中JNI引用的对象
    
​

JVM垃圾回收算法

1.复制算法(Copying)
    - 复制算法采用从根集合扫描,并将存活对象复制到一块新的,没有使用过的空    间,这种算法当空间存活的对象比较少时,极为高效,但是带来的成本需要一块      内存交换空间
    - 此算法用于新生代内存回收,从E区回收到S0或S1区
2.标记清除算法(Mark-Sweep)
    - 对引用的进行标记,对未标记的进行回收,无对象移动
3.标记整理压缩算法(Mark-Compac)
    - 对引用的进行标记,对未标记的回收,有对象移动
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM优化 的相关文章

  • 做好测试计划

    一 测试的重要性 如果没有测试计划 会带来以下问题 1 难以确切地知道具体的测试范围 以及应该采取的具体测试策略 2 难以预估具体的工作量和所需要的测试工程师数量 同时还会造成各个测试工程师分工不明确 导致某些测试工作重复执行而有些测试被遗
  • 数字电路中几种基本门电路

    一 概述 1 门电路 实现基本运算 复合运算的单元电路 例如与门 与非门 或门等 门电路中以0或者1表示高低电平 2 获得高低电平的基本原理 对于电阻R有一些说明 电阻R的取值不宜太大也不宜太小 输出高电平电阻R充当电压源内阻的作用 为了保
  • 记录好项目D14

    记录好项目 你好呀 这里是我专门记录一下从某些地方收集起来的项目 对项目修改 进行添砖加瓦 变成自己的闪亮项目 修修补补也可以成为毕设哦 本次的项目是个网上花店商城 一 系统介绍 包括管理员 普通用户两种角色 外加游客 未登录情况 权限 游
  • 栈和队列OJ

    一 括号的匹配 题目介绍 思路 如果 c 是左括号 则入栈 push 否则通过哈希表判断括号对应关系 若 stack 栈顶出栈括号 stack pop 与当前遍历括号 c 不对应 则提前返回 false 栈 stack 为空 此时 stac
  • idc服务器排名戴尔型号,IDC公布2019年全球服务器市场数据:戴尔、HPE和浪潮分列前三...

    日前 IDC发布2019年第四季度及全年全球服务器市场调查数据 2019年全球服务器出货量和销售额分别为1174万台和873亿美元 同比轻微下降0 9 和1 7 其中四季度全球服务器市场增长旺盛 销售额和出货量分别同比增长7 5 和14 0
  • 【每日一题】另类加法

    题目来源 牛客网 链接 另类加法 题目描述 给定两个int A和B 编写一个函数返回A B的值 但不得使用 或其他算数运算符 测试样例 1 2 返回 3 解题思路 本题可以通过位运算实现 具体实现如下 二进制位异或运算相当于对应位相加 不考
  • GUI设计篇

    一 Matlab GUIDE 在MATLAB的命令行窗口中键入guide可以打开GUIDE 这个命令将打开GUIDE Quick Start对话框 它可以看作是一个简单的GUI应用程序的开发向导 利用它可以使用鼠标方便地在窗体上添加各种各样
  • 粒子群优化算法(PSO)及Matlab实现

    粒子群优化算法 Particle Swarm Optimization PSO 于1995年由美国社会心理学家James Kennedy和电气工程师Russell Eberhart受对鸟类群体行为进行建模和仿真研究结果的启发共同提出 通过对
  • 手撸代码-找到环入口

    题目 给一个链表 若其中包含环 请找出该链表的环的入口结点 否则 返回null 思路 1 使用两个指针 快指针与慢指针 慢指针一次走一步 快指针一次走两步 2 两个指针都从A点出发 假设B点是环的入口 如果有环的话 两个指针一定会重合 重合
  • Windows上使用pip安装python opencv

    Windows上使用pip安装python opencv opencv python 只包含opencv库的主要模块 opencv contrib python 包含主要模块和contrib模块 建议您安装的库 因为它包含所有OpenCV功
  • 计算机网络原理-应用层

    应用层 应用层 位于OSI参考模型的第7层 提供了人们所有的应用程序与下层网络的接口 通过下层网络传递信息 现在有很多应用层的协议 一般情况只要和用户相关的程序基本都属于应用层的范畴 早期的OSI参考模型高3层 会话层 表示层与应用层 与T
  • C++中的虚函数表介绍

    在C 语言中 当我们使用基类的引用或指针调用一个虚成员函数时会执行动态绑定 因为我们直到运行时才能知道到底调用了哪个版本的虚函数 所以所有虚函数都必须有定义 通常情况下 如果我们不使用某个函数 则无须为该函数提供定义 但是我们必须为每一个虚
  • 几种不同的推荐引擎比较

    以前也用了一些推荐算法写过一些应用 最近用上了网易云音乐 于是便想写篇推荐引擎的文章 一 推荐引擎 主动发现用户当前或潜在需求 并主动推送信息给用户的信息网络 挖掘用户的喜好和需求 主动向用户推荐其感兴趣或者需要的对象 二 推荐引擎的分类
  • Allegro学习笔记---2.新建PCB+导入网表+元器件快速导入PCB

    一 前期准备 1 将需要用到的PCB封装库和焊盘库准备好 如下图 一般是将 dra psm pad文件都放到同一个文件夹A下面 dra 可编辑的pcb封装文件 psm 被调用的pcb封装文件 不可编辑 pad 焊盘文件 2 先用orcad
  • 如何修改AD中PCB背景黑色域的大小

    方法 1 先将pcb选在keep out layer层 2 用线命令画出一个封闭的区域 得封闭 线命令就是line 选择多条封闭区域可用shift键 3 选中如图上个命令就可以 操作过程可能遇到的问题 遇到这个问题是因为 封闭区域没有全选中
  • Tecplot绘制流体后处理图的问题

    使用的软件为Tecplot Chorus 2017 R3 来处理Fluent17 0的流体仿真数据 看了点击打开链接的官方文档 一直没有搞清楚什么样的格式可以像他给出的一样做多组数据的对比 一开始导入fluent计算产生的data文件 发现
  • 全国计算机等级考试C语言(未来教育平台)

    未来教育 全国计算机等级考试 qq com https mp weixin qq com s biz MzkyNjQwODc2MA mid 2247483676 idx 1 sn 96daf350e5cb0542bbab621cbc8434
  • 步步为营 .NET 代码重构学习笔记 六、移动函数和移动值域(Move Method And Move Field)...

    Move Method 概述 程序中 有个函数与其所驻class之外的另一个class进行更多交流 调用后者或被后者调用 动机 Motivation 如果一个class有太多行为 或如果一个class与另一个class有太多合作而形成高度耦
  • 时间全局过滤器 vue 用法

    min js 定义一个全局过滤器 Vue filter dataFormat function input pattern var dt new Date input 获取年月日 var y dt getFullYear var m dt
  • 将python项目用docker 部署到服务器上的全过程

    任务描述 由于笔记本算力有限 要将python项目部署到服务器上 在查阅了大量资料后 踩了无数坑后 今天记录一下全过程 希望对大家有帮助 配置要求 需要部署的python项目 虚拟机 linus docker安装 服务器端口 大致流程 1

随机推荐

  • 自动驾驶中无迹卡尔曼滤波器的应用(Unscented-Kalman-Filter)

    无迹卡尔曼滤波 一 无迹卡尔曼滤波器 二 CTRV模型 2 1 状态向量 2 2 状态转移方程计算 2 2 1 确定部分 2 2 2 噪声 三 无迹卡尔曼滤波器 3 1 无迹卡尔曼滤波思路 3 2 sigma点 3 3 无迹卡尔曼滤波器的实
  • python 读取图片名并写入excel

    参考博客python实现将数据写入Excel文件中 前端技术的博客 CSDN博客 python写excel 代码 path img path import os import xlwt import xlsxwriter worksheet
  • postgresql 查询所有表名

    SELECT tablename FROM pg tables WHERE tablename NOT LIKE pg AND tablename NOT LIKE sql ORDER BY tablename 或 select table
  • 面试题——1

    3 无重复字符的最长子串 206 反转链表 215 数组中的第K个最大元素
  • ValueError: Input 0 of layer sequential is incompatible with the layer: : expected min_ndim=4, found

    最近在做猫狗二分类实验的时候 在网上找到了教程 然后跟着教程打代码发现最后出现了ValueError Input 0 of layer sequential is incompatible with the layer expected m
  • Java访问权限修饰符

    private 私有的 只有在同一个类才能访问 内部类 成员变量 方法 default friendly 默认的 同一个包中可以访问 其他包中不能访问 类 成员变量 方法 接口 protected 受保护的 同一个包中可以访问 不同的包需要
  • KubeSphere 部署安装

    使用 kubeadm 搭建的 Kubernetes 1 15 2 版本集群 Helm v2 12 2 版本 使用 NFS 作为集群存储后端 下载安装脚本 mkdir root kubeSphere cd root kubeSphere gi
  • Git仓库完全迁移,包括所有的分支和标签,当然也包括日志。

    度娘了一堆git仓库迁移的内容 一个个都比较麻烦 而且本地下了代码 还要删去库地址 再切换到新库的地址上传 一般这种操作都只是master分支 其他分支还要一个一个来 后来在51CTO上找了一个文章 简单明了 一下就全搞定了 包括所有的分支
  • 二进制安装Docker

    下载 安装 wget https download docker com linux static stable x86 64 docker 19 03 6 tgz tar zvxf docker 19 03 6 tgz 把文件copy到
  • 计算机常用控温算法,常用温度控制方法原理 -解决方案-华强电子网

    常用PID调节器 温控仪控制算法包括常规PID 模糊控制 神经网络 Fuzzy PID 神经网络PID 模糊神经网络 遗传PID及广义预测等算法 常规PID控制易于建立线性温度控制系统被控对象模型 模糊控制基于规则库 并以绝对或增量形式给出
  • random函数汇总

    1 random random random random 用于生成一个0到1之间的随机浮点数 0 lt n lt 1 gt gt gt random random 0 7086588033796296 2 random uniform r
  • 【Django知识补充 - 1】:admin站点和rest_framework实现文件的上传和下载

    文章目录 项目准备 settings py中的配置 主路由urls py的配置 子应用中的文件代码 init py admin py models py serializers py urls py views py 演示 在admin中上
  • java实现-合并两个有序数组

    合并两个有序数组 给你两个有序整数数组 nums1 和 nums2 请你将 nums2 合并到 nums1 中 使 nums1 成为一个有序数组 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 你可以假设 nums1 的空
  • 移动端 文件预览(所有文档文件类型)

  • Java21天打卡-Day15 数组

    import java util Arrays public class Day15 数组 题目1 创建一个长度是8的字符串数组 使用8个长度是5的随机字符串初始化这个数组 对这个数组进行排序 按照每个字符串的首字母排序 无视大小写 注1
  • PermissionX 1.7发布,全面支持Android 13运行时权限

    各位小伙伴们大家早上好 一年一度的PermissionX升级又来了 还记得上次发布PermissionX 1 6版本还是在去年10月份的时候 当时是对Android 12系统进行了支持 详情可以参考这篇文章 PermissionX 1 6发
  • 深度学习框架Pytorch傻瓜式安装教程

    前提 已经安装完minianaconda和pycharm minianaconda直接官网下载即可 minianaconda比起anaconda体量很小 pycharm专业版2020下载百度网盘链接 链接 https pan baidu c
  • 【Detectron2】入门02-使用自己的数据集

    Detectron2 official Documents https detectron2 readthedocs io tutorials datasets html 目录 COCO格式数据集 Standard dataset dict
  • Qt对象树

    对象树 Qt提供了对象树机制 能够自动 有效的组织和管理继承自QObject的Qt对象 每个继承自QObject类的对象通过它的对象链表 QObjectList 来管理子类对象 当用户创建一个子对象时 其对象链表相应更新子类对象信息 对象链
  • JVM优化

    java运行时数据区 程序计数器 线程私有 java虚拟机栈 线程私有 本地方法栈 线程私有 java堆 线程公用 方法区 线程公用 jvm内存分配 栈内存分配 私有的 不会存在线程安全 保存参数 局部变量 中间计算过程和其他的数据 退出方