文章目录

  • 一、Java VisualVM 工具
  • 二、堆区

一、Java VisualVM 工具


Java 中提供了一个监控当前设备 Java 程序的工具 Java VisualVM ;

在命令行中执行

jvisualvm

命令 , 可以打开该工具 ;

可以通过该程序监控 JVM 以及 Java 程序的运行参数 ;

二、堆区


堆区的对象分步如下图 :

堆区的对象 分为 年轻代 , 老年代 ;

老年代 占比大约 23\cfrac{2}{3}32​ , 年轻代占比约 13\cfrac{1}{3}31​ ;

年轻代 又分为 Eden 和 Survivor 区 , 其中 Eden 占 80%80\%80% , Survivor 区 占 20%20\%20% ;

Survivor 区又分为 From 和 To 两部分 , 各占 10%10\%10% ;

新创建的对象 , 放到 堆区 中 , 会先放到 Eden 区 ;

假设当前堆区内存是 300 MB , 老年代 200 MB , 年轻代 100 MB ;

Java 虚拟机启动后 , 一直再运行 , Eden 区 早晚会满 ;

如果 Eden 存放满了 , 就会进行 minor GC 操作 , 如果对象被判定为可以回收 , 就会将对象放到 Survivor 区 的 From 区域中 ; 此时 Eden 区就有空间了 ;

在对象头中每个对象都有一个分代年龄 , 记录当前对象被回收了多少次 , 每次 GC 回收 , 该分代年龄就 +1 ;

如果对象 分代年龄达到一定数值 , 如 15 , 则认为 该对象是无法回收的 , 会将该对象放到 老年代 区域 ;

老年代 区域总会被放满 , 如果老年代区域放满 , 就会 执行 full GC ; full GC 如果没有达到目的 , 没有空间存放新对象 , 就会 出现 OOM ;

注意区别 minor GC 和 full GC 两个回收机制 , minor GC 是针对 Eden 区放满的处理 , full GC 是针对 老年代区域放满进行的处理 ;

如果初始化了一个很大的对象 , 年轻代放不下 , 直接放到老年代 , 如果老年代也放不下 , OOM 送走这个进程 ;

JVM 调优就是修改上述 堆区的 Eden , Survivor , 老年代 区域的大小 , 以契合自己编写的应用特点 , 最大限度发挥出设备的性能 ; 一般是 J2EE 后端的事 , Android 开发仅做了解即可 ;

【Java 虚拟机原理】堆区 | Java VisualVM 工具相关推荐

  1. java虚拟机原理pdf_揭秘Java虚拟机 JVM设计原理与实现pdf

    揭秘Java虚拟机 JVM设计原理与实现 内容简介 <揭秘Java虚拟机:JVM设计原理与实现>从源码角度解读HotSpot的内部实现机制,本版本主要包含三大部分--JVM数据结构设计与实 ...

  2. java图的建立field_《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的...

    0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述 ...

  3. 《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程

    参考网址:http://blog.csdn.net/luanlouis/article/details/50529868 0.前言 读完本文,你将了解到: 一.为什么说Jabalpur语言是跨平台的 ...

  4. 【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存

    文章目录 一.JDK 体系结构 二.Java 源码运行原理 三.Java 虚拟机内存结构 一.JDK 体系结构 JDK 体系结构 : 下图所有的内容都是 JDK 体系中的组成元素 ; Java Lan ...

  5. 必知必会系列-JAVA虚拟机原理

    系列文章 必知必会系列-Spring技术原理 必知必会系列-JAVA虚拟机原理 必知必会系列-Redis技术原理 引言 随着技术的不断演进,在不同时间阶段都会有不同的技术产物,那么如何快速的学习和掌握 ...

  6. java方法区内存泄露_深入理解java虚拟机-第二章:java内存区域与内存泄露异常...

    2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...

  7. 【Java 虚拟机原理】Class 字节码二进制文件分析 七 ( 局部变量表分析 )

    文章目录 前言 一.编译生成带局部变量表的字节码文件 二.局部变量表 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 二 ( 常量池位置 | 常量池结构 | tag | i ...

  8. java class文件常量池_《Java虚拟机原理图解》 1.2.3、Class文件中的常量池详解(下)...

    Java内存区域         1.程序计数器(Program Counter Register)(线程私有的)         2.Java虚拟机栈 (Java Virtual Machine S ...

  9. 【Java 虚拟机原理】Class 字节码二进制文件分析 六 ( 属性类型 | Code 属性 | 属性名称索引 | 属性长度 | 操作数栈最大深度 | 局部变量存储空间 | 字节码长度 )

    文章目录 前言 一.属性类型 二.Code 属性表数据结构 三.属性名称索引 四.属性长度 五.操作数栈最大深度 六.局部变量存储空间 七.字节码长度 八.存储字节码指令的一系列字节流 前言 上一篇博 ...

  10. 【Java 虚拟机原理】Class 字节码二进制文件分析 五 ( 方法计数器 | 方法表 | 访问标志 | 方法名称索引 | 方法返回值类型 | 方法属性数量 | 方法属性表 )

    文章目录 前言 一.方法表结构 二.方法计数器 三.方法表数据解析 ( init 构造方法 ) 1.方法访问标志 2.方法名称索引 3.方法返回类型 4.方法属性数量 前言 上一篇博客 [Java 虚 ...

最新文章

  1. python rbf神经网络_原创,基于径向基函数(RBF)神经网络RBF网络的举例应用!
  2. 使用CUrl断点续传下载Linux内核5.6.2源码
  3. python学习之--习题集
  4. Csv解析CsvFile
  5. sql 两个 in_SQL基础知识——IN运算符
  6. Springboot瘦身(lib和程序分开打包)
  7. 买房贷款收入证明怎么开?
  8. leetcode hot 3-4
  9. JavaScript执行环境
  10. linux msgsend 头文件,Unix/Linux进程间通信
  11. CCNA(高级实验)
  12. 软件项目管理总结(全)
  13. KMS服务器安装以及配置
  14. 京东运营体系组织架构曝光,自建物流秘密在这里
  15. 8-25 26 veriloga语言
  16. Autograd:你没有使用过的最佳的机器学习库?
  17. 2022秋招计算机视觉算法工程师面经(旷视、字节、科大讯飞、大华、海康、网易、华为、小米、腾讯、百度、阿里、完美世界、美团、陌陌)
  18. Floyd (弗洛伊德)算法简述
  19. 某厂向用户提供饲料matlab,Matlab习题
  20. 360推送工具-批量推送360网站工具

热门文章

  1. 翻译:Single Sign-On for Everyone
  2. 关于logrotate工具的日志切割
  3. 108-学习如何格式化字符串
  4. AE教程:学会这个,你做的Logo就可以单独出道了
  5. mapreduce原理
  6. Python3 高级特性
  7. boost pcre Greta RE2 正则表达式性能测试
  8. C# 中的委托和事件(转载)
  9. 在用数据绑定的时候我为什么不能把焦点移出(Tab out)我的控件?(译)
  10. CentOS 7 安装Apache 2.4.39