CloudNativeEra
  • Introduction
  • 名词解释
  • Computer Science
    • Computer Organization
      • CPU
      • 二进制、电路、加法器、乘法器
      • 编译、链接、装载
      • 存储器
      • IO
    • Operating System
      • 操作系统基础知识
      • 系统初始化
      • 进程管理
      • Everything about Memory
      • 文件系统
      • 并行编程
      • Linux
        • CPU
        • IO 多路复用
        • DMA IO and Linux Zero Copy
    • Computer Network
      • 网络相关命令
      • 评估系统的网络性能
      • 网络抓包
      • Linux 最多支撑的 TCP 连接
      • 网络虚拟化
      • DHCP 工作原理
    • Data Structure and Algorithm
      • 题目列表
      • Summarize
        • 方法总结
        • 二分思想
        • 树的演化
        • 算法思想总结
      • Data Structure
        • Data Struct - Array
        • Tree
        • Heap
        • Hash
        • 字符串
      • Algorithm
        • Sorting Algorithm
        • 查找
        • 贪心算法
        • 动态规划
        • 位运算
      • Practice Topics
        • Data Struct in SDK
        • Topic - Tree
        • Topic - Graph
        • Topic - 滑动窗口
        • 剑指 Offer 题解
    • 并发编程
      • 并发模式
      • 并发模型
  • 系统设计
    • 软件设计
      • 软件架构
      • 编程范式
      • 系统设计题
      • 设计原则
      • 计算机程序的构造和解释 SICP
    • 领域驱动设计
      • 应用:在线请假考勤管理
      • 应用: library
    • 微服务与云原生
      • Designing and deploying microservices
      • 容器技术
      • Docker
      • Etcd
      • Kubernetes
        • Kubernetes - Mapping External Services
      • Istio
      • 监控
    • 分布式系统
      • 分布式理论
      • 分布式事务
    • 后端存储设计
      • 缓存设计
      • 数据库架构设计
    • CI/CD
    • 设计最佳实践
    • 测试
    • 安全
    • 综合
      • 开发实践
      • 分布式锁
      • 分布式计数服务
      • 弹幕系统设计
      • 消息队列设计
      • 分布式ID生成算法
      • 限流设计
      • 网关设计
      • 通用的幂等设计
      • 分布式任务调度
        • Timer
        • ScheduledExecutorService
        • Spring Task
        • Quartz
      • 交易系统
      • 权限设计
  • 编程语言
    • 编程语言
    • C & C++
    • Java
      • JVM
        • JVM Bytecode
      • Java 核心技术
      • Java 8 新特性
      • Java 集合框架
      • Java NIO
      • 并发编程
        • 线程生命周期与线程中断
        • 三个线程交替打印
        • 两个线程交替打印奇偶
        • 优雅终止线程
        • 等待通知机制
        • 万能钥匙:管程
        • 限流器
        • 无锁方案 CAS
    • Java 源码阅读
      • Unsafe
      • 异步计算 Future
      • Java Queue
      • CoalescingRingBuffer 分析
      • Java Collections
        • PriorityQueue 分析
        • HashMap 分析
        • TreeMap
    • Golang
    • Python
  • 框架/组件/类库
    • Guava
      • Guava Cache
      • Guava EventBus
    • RxJava
    • Apache MINA
    • Netty
      • 网络 IO 模型
      • Netty 生产问题
    • Apache Tomcat
    • MyBatis
    • 限流框架
    • Spring Framework
      • Spring Core
      • Spring 事务管理
    • Spring Boot
    • Spring Cloud
      • Feign & OpenFeign
      • Ribbon
      • Eurake
      • Spring Cloud Config
    • FixJ
    • Metrics
    • Vert.x
  • 中间件
    • Redis
      • Redis 基础
        • Redis 数据结构设计与实现
        • Redis 高性能网络模型
      • Redis checklist
      • 应用案例 - Redis 数据结构
      • 应用案例 - Redis 缓存应用
      • 应用案例 - Redis 集群
      • Redis 客户端
      • Redis 生产案例
        • [译] 在 Redis 中存储数亿个简单键值对
    • MySQL
      • MySQL 基础
      • MySQL Index
      • MySQL Transaction
      • MySQL 优化
      • MySQL 内核
      • MySQL Command
      • MySQL Checklist
      • MySQL Analysis Tool
      • 实现 MySQL
    • State Machine
    • 数据库连接池
    • MQ
      • 高性能内存队列 Disruptor
      • Kafka
      • Pulsar
      • RocketMQ
        • Broker 的设计与实现
      • NSQ
  • 实际案例
    • 线上 Case
      • Request Aborted
      • MySQL - Specified key was too long
      • Java 应用 CPU 100% 排查优化
      • 频繁 GC 导致的 Java 服务不响应
      • 导出优化
  • 大数据
    • 流计算
    • Flink
  • 其他
    • 工具
    • 读书
      • 设计数据密集型应用
      • 实现领域驱动设计
      • 精通比特币
      • 提问的智慧
    • 论文
    • 工程博客
    • 阅读源码
    • 面试
      • 如何在最短的时间里对对方有个全面的了解
    • 分享
    • 软技能
    • Todo
  • Blog
    • #算法
      • 查找
      • 位运算
      • 树
    • #架构
      • 1- 通信
    • Design & Dev & Opt
      • High Performance Data structure Design
  • Tiny Project
    • A Simple WeChat-like Instant Messaging Platform
由 GitBook 提供支持
在本页
  • 类加载与类加载器
  • 字节码
  • GC
  • 博客
  • JVM 问题诊断快速入门 - GitChat
  • Reference

这有帮助吗?

  1. 编程语言
  2. Java

JVM

About JVM

上一页Java下一页JVM Bytecode

最后更新于4年前

这有帮助吗?

为什么要学习 JVM ?

  1. 更深层次的学习 Java 这门语言,要成为 Java 方面的专家,JVM 必须搞懂

  2. 排查线上问题用得着,打基础

  3. 应对面试

知识是有关联性的,JVM 相关的知识也不例外。首先要明确的是目标(也就是我们暂时追求的终点,明确了终点,以终为始),学好 JVM 主要还是为了在生产环境 Java 应用服务遇到问题时可以快速排查并定位问题,最后给出最合理的解决方案。其次才是为了探索一些底层的未知的东西,以及试着做横向迁移,比如再去理解 Golang 的内存模型和 GC,是不是想通的。

知识关联性:

线上或者开发测试时的具体问题 -> 收集错误日志、GC 日志、内存使用情况、CPU 使用情况、IO 数据等 -> 根据这些东西来定位问题,比如 理解 GC 日志 -> 需要搞懂 JVM 的内存划分、对象布局以及每种 GC 算法 -> 搞懂每种垃圾收集器的特性以及适用场景 -> 根据具体的业务场景来定制并优化 JVM 参数

类加载与类加载器

对于任意一个类,都需要由加载它的类加载器和这个类本身确立其在 JVM 中的唯一性。

字节码

GC

GC 是针对堆内存进行收集

博客

JVM 的 GC 概念多,控制 JVM 行为的参数也多,怎么在特定场景下权衡 JVM 的参数,让 GC 更好的工作是一项重要且难度很大的工作。使用如下几个指标来衡量垃圾收集器:

  1. 吞吐量,一个应用程序完成的工作量与在 GC 中花费的时间之比;用 -XX:GCTimeRatio=99 作为目标吞吐量;99 是默认的,相当于 1% 的GC时间

  2. 延迟,系统响应事件所花费的时间,它受到垃圾收集引入的暂停的影响。用 -XX:MaxGCPauseMillis=<n> 作为 GC 暂停的目标延迟

  3. 内存,我们的系统用来存储状态的内存量,这些状态在被管理时经常被复制和移动。应用程序在任何时间点保留的活动对象集被称为 Live Set。最大堆大小 -Xmx 是一个调整参数,用于设置应用程序可用的堆大小。

延迟是事件间的分布, 增加平均延迟以减少最坏情况下的延迟,或者使其不那么频繁,这可能是可以接受的。我们不应该将 "实时 "一词解释为意味着尽可能低的延迟;相反,实时是指无论吞吐量如何,都要有确定性的延迟。

对于某些应用工作负载,吞吐量是最重要的目标。一个例子是一个长期运行的批处理工作;只要整个工作能更快完成,即使在垃圾收集时偶尔暂停几秒钟,也没有关系.

对于几乎所有其他的工作负载,从面向人类的交互式应用到金融交易系统,如果系统无响应的时间超过几秒钟,甚至在某些情况下超过几毫秒,就会带来灾难。在金融交易中,用一些吞吐量来换取稳定的延迟往往是值得的。我们可能还会有一些应用程序,这些应用程序受到可用物理内存量的限制,并且必须保持占用空间,在这种情况下,我们必须放弃延迟和吞吐量方面的性能.

一般权衡的结果是:

  1. 通过为垃圾回收算法提供更多的内存,可以在很大程度上减少作为摊销成本的垃圾回收成本。

  2. 通过包含活动集并保持堆大小较小,可以减少由于垃圾收集而导致的观察到的最坏情况的延迟引发的暂停。

  3. 通过管理堆和世代大小以及控制应用程序的对象分配速率,可以减少出现暂停的频率。

  4. 可以通过同时运行GC和应用程序来减少大停顿的频率,有时会牺牲吞吐量。

Reference

有关字节码的东西比较多,使用另外的文件记录,看 。

- GitChat

https://www.baeldung.com/java-weak-reference
https://www.cnblogs.com/crazymakercircle/p/14365820.html
https://gitbook.cn/books/5d2d822f175a450263e945f9/index.html
https://www.jianshu.com/p/9d729c9c94c4
JVM Bytecode
Java GC 精粹
JVM 问题诊断快速入门
JVM 参数有哪些