JVM对象创建与内存分配机制
JVM对象创建与内存分配机制 对象的创建 1 类加载检查 2 分配内存 3 初始化 4 设置对象头 5 执行方法 什么是java对象的指针压缩 为什么要用指针压缩
JVM对象创建与内存分配机制 对象的创建 1 类加载检查 2 分配内存 3 初始化 4 设置对象头 5 执行方法 什么是java对象的指针压缩 为什么要用指针压缩
背景 文档的背景信息、目标和范围 分析 调研结果、数据洞察和关键考虑因素 建议 建议的解决方案、策略和后续步骤 实施 待办事项、时间轴和资源要求
JVM内置调优工具 jdk自带有很多命令来优化应用 Jmap 用来查看内存信息,实例个数以及占用内存大小 jmap -histo 14660 > ./log.txt 打开log.txt,文件内容如下: num::序号 instances:实例数量 bytes:占用空间大小 class name:类名称,[C表示char[],[S表示short[],[I...
JVM中的三色标记法 三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW, 从而达到清除JVM内存垃圾的目的. JVM中的CMS, G1垃圾回收器所使用的垃圾回收算法即为三色标记法. 算法思想 三色标记法将对象的颜色分为了黑, 灰, 白 三种颜色 白色: 该对象没有被标记过(垃圾对象) 灰色: 该对象已经被标记过了, 但该对象下的属性没有全被标记完. (GC需要从...
Java运行参数 https://blog.csdn.net/a503921892/article/details/39048889 年轻代 年老代概念 http://jefferent.iteye.com/blog/1123677 JVM的堆的内存, 是通过下面面两个参数控制的 Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 Xmx 是最大...
GC Root如何确定一个对象是不是垃圾 有两种定位垃圾的方式 引用计数 这种方式是给堆内存当中的每个对象记录一个引用个数。引用个数为0的就认为是垃圾。这时早期JDK中使用的方式。引用计数无法解决循环引用的问题。 循环引用 有A、B两个对象,它们之间互相引用,但除此之外,外部并无其他引用,因此GC时不会清理这俩个对象,因此会产生内存泄露 根可达算法 这种方式是在内存中,从引用根...
https://www.iocoder.cn/JUC/sike/volatile/ 通过前面一章,我们了解了 synchronized 是一个重量级的锁,虽然 JVM 对它做了很多优化。而下面介绍的 volatile ,则是轻量级的 synchronized ,它在多线程开发中保证了共享变量的“可见性”。如果一个变量使用 volatile ,则它比使用 synchronized 的成本更加...
https://www.iocoder.cn/JUC/sike/synchronized/ 记得刚刚开始学习 Java 的时候,一遇到多线程情况就是 synchronized ,相对于当时的我们来说 synchronized 是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。 但是,随着我们学习的进行我们知道 synchronized ...
https://www.iocoder.cn/JUC/sike/CAS/ 1. 概述 CAS ,Compare And Swap ,即比较并交换。Doug Lea 大神在实现同步组件时,大量使用CAS 技术,鬼斧神工地实现了Java 多线程的并发操作。整个 AQS 同步组件、Atomic 原子类操作等等都是基 CAS 实现的,甚至 ConcurrentHashMap 在 JDK 1.8 ...
https://www.iocoder.cn/JUC/sike/ReentrantReadWriteLock/ 1. 简介 重入锁 ReentrantLock 是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少。然而,读服务不存在数据竞争问题,如果一个线程在读时禁止其他线程读势必会导致性能降低。所以就提供了读写锁。 ...