从控制台看Java版本

HotSpot

它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。 最初并非由Sun公司开发,而是由一家名为“Longview Technologies”的小公司设计的。

HotSpot VM既继承了Sun之前两款商用虚拟机的优点(如前面提到的准确式内存管理),也有许多自己新的技术优势, 如它名称中的HotSpot指的就是它的热点代码探测技术。

JVM Client/Server是两套不同的机制

Java语言可以做C/S,也可以做B/S

Client是对桌面级应用的内存分配做优化。桌面系统一次只能按一个按钮,线程少很多。内存分配的空间,相比Server要小一些。

B/S是可以并发的,Server把内存分配的空间比较大。在内存比较紧张的情况下,可能会造成空间浪费。


一、JVM总体结构图




二、JVM堆结构图及分代


图:Java堆示意图,对象创建后,若不被回收,会从左到右一步一步走。

年轻代(Eden对象创建初始化的地方,垃圾回收率是最高的,大约80%、From、To)、老年代、持久代

1、新生代

整个过程,说白了就是,折腾这一堆对象,看谁能进入老年代。

2、老年代

3、永久代(JDK1.7之后,逐渐不使用)

三、JVM中垃圾回收算法

1、引用计数 (Reference Counting)

2、复制 (Copying)(比如Survivor区)

绿色是需要被复制的对象,蓝色的是空的,灰色的是即将被回收的对象,橘色的是空的。

3、标记-清除 (Mark-Sweep)



4、标记-整理(Mark-Compact)




四、JVM中的垃圾收集器

如果说,垃圾回收算法是方法论的话,那么垃圾收集器就是对该方法论的具体实现。

HotSpot中的分代收集器




不想过长地占用工作线程的时间(减少用户线程等待的时间)

收集器配合关系:


解决吞吐量的问题,通过减少
吞吐量 = CPU运行用户程序的时间 / CPU运行用户程序的时间+GC耗时





并发(包含用户线程):GC线程一边回收工作,用户线程一边运行
并行(不包含用户线程):用户线程停止在安全点上,多个GC的线程一起工作

含有Parallel的收集器都是并行收集器,是不能和用户线程同时运行的。含有Concurrent的收集器可以和用户线程同时工作。

年轻、老年代的回收期可以这样组合:


JDK1.7加入


五、JVM优化

JDK自带的小工具:在jdk bin目录下
C:\Program Files\Java\jdk-11.0.3\bin


Visualvm从JDK9开始就不再打包在jdk里面了,可以从官方下载:https://visualvm.github.io/download.html

安装完成后,可以下载使用强大的Visual GC插件

运行了一个爬虫,效果如下:

获取当前虚拟机的信息

在Eclipse的Run Configurations中,修改垃圾收集器


Eclipse调优












【Java虚拟机】Java虚拟机深度讲解、VisualVM工具、JVM调优相关推荐

  1. java jvm调优面试题_【Java面试题第一期】有没有jvm调优经验?调优方案有哪些?...

    ​1. 调优时机: a. heap 内存(老年代)持续上涨达到设置的最大内存值: b. Full GC 次数频繁: c. GC 停顿时间过长(超过1秒): d. 应用出现OutOfMemory 等内存 ...

  2. Java虚拟机这一块 —— JVM 调优和深入了解性能优化

    JVM 调优和深入了解性能优化 JVM 调优的本质 GC 调优原则 调优的原则 目的 GC 调优 调优步骤 日志分析 阅读 GC 日志 -XX:+UseSerialGC -XX:+UseParNewG ...

  3. java虚拟机学习-JVM调优总结-新一代的垃圾回收算法(11)

    java虚拟机学习-深入理解JVM(1) java虚拟机学习-慢慢琢磨JVM(2) java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制 java虚拟机学习-JVM内存管理:深 ...

  4. Java性能压测工具及其调优

    Java性能压测工具及其调优 JMeter工具 使用 JVisualVM使用 使用 简介 在日常的开发中,Java的性能显得尤为重要,一个程序的好坏主要就是性能来决定的. JMeter工具 JMete ...

  5. java jdk1.8 jvm_JDK1.8 JVM调优之初识JVM(一)

    在数据量和并发量极高的应用中,程序的健壮性和服务的稳定性一直是性能优化的一块重点区域,而GC则永远是程序中需要重点考虑的不稳定因素之一. JVM调优大部分是调GC参数, GC参数主要关注三点:最大堆和 ...

  6. Java 性能优化系列之3.2[JVM调优]

    实用JVM参数 1. JIT 编译参数 JIT(Just-In-Time)编译器, 可以在运行时将字节码编译成本地代码,从而提升函数的执行效率. -XX:CompileThreshold为 JIT编译 ...

  7. 2022年字节跳动JAVA面试,JVM调优和调优,附面试题答案

    面试必问:JVM原理和调优(附面试题) 一.详解JVM内存模型 二.JVM中一次完整的GC流程是怎样的 三.GC垃圾回收的算法有哪些 四.简单说说你了解的类加载器 五.双亲委派机制是什么,有什么好处, ...

  8. JVM调优系列--Java命令选项(参数)--大全/详解/常用

    原文网址:JVM调优系列--Java命令选项(参数)--大全/详解/常用_IT利刃出鞘的博客-CSDN博客 简介 说明        本文介绍Java的java命令用法,包括:常用用法.选项大全. J ...

  9. JAVA之JVM调优-从eclipse开始

    一.概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配.回收的情况来调整各区域内存比例或者gc回收的策略:更深一层就是根据dump出来的内存结构和线程栈来分析代码中不合理的地方给予 ...

  10. java加快内存回收_java内存管理之垃圾回收及JVM调优

    GC(garbage Collector 垃圾收集器) 作用:a.内存的动态分配:b.垃圾回收 注:Java所承诺的自动内存管理主要是针对对象内存的回收和对象内存的分配. 一.垃圾标记 程序计数器.J ...

最新文章

  1. 026_如何在MAC下输入主要国家货币符号?
  2. PHP哈希表碰撞攻击原理
  3. 子串在主机中出现的位置indexOf()--简单
  4. C语言数组清空的几种方法比较
  5. Scala 中将方法、函数、函数式编程和面向对象编程关系分析图
  6. 〖Android〗存在多个Android设备时,使用Shell脚本选择一个Android设备
  7. IIS部署VUE刷新404问题如何解决?
  8. 用html标记语言编写一个简单的网页代码,一个简单的网页设计代码
  9. react好租客项目Day11-发布房源模块(js输入框防抖图片上传)项目打包项目优化(按需加载路由代码分割)
  10. 人事、财务常用EXCEL基础函数应用示例总结
  11. 揭秘勒索病毒背后黑客组织:偷了官方网络武器库
  12. 笔记本WIFI无法上网(无Internet访问权限)
  13. python模拟ios点击_弱弱的问下,ios的捷径可以实现模拟点击吗?
  14. 第三周项目4 穷举法
  15. 抽象类与接口的异同点
  16. 飞机大战--java
  17. contains( )方法
  18. 【C++之GDB调试】GDB调试从入门到精通
  19. 计算机工程学院文艺例会,西航职院 | 计算机工程学院 2019年度学生会干部第一次例会...
  20. PHP 第三方登录学习笔记

热门文章

  1. 算法模板-广度优先遍历
  2. Python第三方包-你了解numpy吗(numpy基础)
  3. SBT模版(Size Balanced Tree)
  4. sscanf,sscanf_s及其相关用法(字符串格式化为其他类型)
  5. 高级数据结构与算法 | 哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶
  6. python中的requests模块的使用大全
  7. CTO要我把这份MySQL规范贴在工位上!
  8. RabbitMQ之TTL(Time-To-Live 过期时间)
  9. 再见了 Docker!Go 落地的 K8S 云原生架构已成气候!
  10. OS- -调度(一)