JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。
线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而 创建/销毁(在 Hotspot
VM 内, 每个线程都与操作系统的本地线程直接映射, 因此这部分内存区域的存/否跟随本地线程的
生/死对应)。线程共享区域随虚拟机的启动/关闭而创建/销毁。直接内存并不是 J
原创
2024-01-08 15:24:10
104阅读
百日闭关修炼,每日三道高频面试题。本篇是GC垃圾回收第二篇,快上车!
原创
2022-01-15 16:57:10
37阅读
百日闭关修炼,每日三道高频面试题。本篇是GC垃圾回收第二篇,快上车!
原创
2021-09-13 15:00:48
27阅读
分代回收理论: 1 大部分对象都是朝生夕死 2 小部分对象可以熬过多次Gc 3 由于上诉情况,所以将容易回收的放到了新生代,难回收的放到了老年代 Gc的种类: 1 young gc 2 old gc 垃圾回收算法 1 复制算法: 1)新生代用的都是复制算法,但是利用率只有一半,所以引入了appel式
原创
2021-06-03 16:25:36
31阅读
分代回收理论: 1 大部分对象都是朝生夕死 2 小部分对象可以熬过多次Gc 3 由于上诉情况,所以将容易回收的放到了新生代,难回收的放到了老年代 Gc的种类: 1 young gc 2 old gc 垃圾回收算法 1 复制算法: 1)新生代用的都是复制算法,但是利用率只有一半,所以引入了appel式
原创
2021-05-26 23:22:58
161阅读
关键字:jvm设置3堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(3
原创
2023-05-06 15:56:17
34阅读
一.JVM中常见的垃圾回收器立足于JDK1.8版本在一开始的时候,新生代和老年代都有单独的垃圾回收器的,也就是分开的,后来有了G1回收器之后就不严格区分了。垃圾回收器可以分成三种:单线程垃圾回收器,多线程并行垃圾回收器,并发垃圾回收器。按照作用的部位可以分成回收新生代的垃圾回收器和回收老年代的垃圾回收器。具体代表有回收新
原创
2022-10-11 16:58:29
53阅读
非常不容易呀,本章完结后,jvm的主要专题基本算完整了,就先暂时告一段落了,感谢大家的支持。由于笔者水平有限,也欢迎大家指正哈。
本章主要是描述下JVM调优过程中主要用的一些工具和命令,可当做工具手册来使用。
原创
2022-05-05 15:01:56
269阅读
最全的JVM知识点总结1:什么是JVMJVM是Java Virtual Machine(Java虚拟机)的缩
原创
2022-05-11 11:16:31
77阅读
JMM 硬件层的并发优化基础知识 硬件层数据一致性 读取缓存以cache line为基本单位,目前64bytes 位于同一缓存行的两个不同数据,被两个不同CPU锁定,产生互相影响的伪共享问题 伪共享问题:JUC/c_028_FalseSharing 使用缓存行的对齐能够提高效率 package co ...
转载
2021-08-15 19:08:00
71阅读
2评论
什么是对象逃逸?对象逃逸优化有哪几种?逃逸分析的基本原理是:分析对象动态作用域,当一个对象在方法里面被定义后,它
此章笔者会多写点,分三个子专题来讲述:理论基础、实操、工具使用。目的是争取使读者一次性弄懂。不需要再反反复复的查各种资料,笔者也会把之前踩过的坑也详细描述下,防止读者再走笔者的弯路。
牢记:可被GC管理的内存区只有堆和方法区,其它3个私有区都会随着线程终止而释放。
推荐
原创
2022-05-05 15:00:13
1231阅读
点赞
4评论
大纲1.Class文件结构2.Class文件格式概述3.Class文件格式详解4.字节码指令5.类的生命周期和初始化6.类加载的全过程7.类加载器8.双亲委派模型9.栈桢详解11.方法调用详解12.基于栈的字节码解释执行引擎1.Class文件结构(1)Java跨平台的基础字节码是各种不同平台虚拟机与所有平台都能统一使用的程序存储格式,所以字节码(ByteCode)是构成平台无关性的基石,是语言无关
1 对象在堆
2 串行收集器
特点:
a) 最古老,最稳定
b) 效率高
c) 可能会产生较长停顿
d) 使用参数 -XX:+UseSerialGC 来启用,启用后,新生代对象采用复制算法,老年代对象采用标记-压缩算法
执行流程(单线程执行):
3 并行收集器
a) 使用如下参数开启:
-XX:+Use...
原创
2023-04-20 18:34:47
7阅读
轻GC和重GC分别在什么时候发生 如果新对象在创建时,因为新生区内存已满而无法创建时,这时就会发生一次轻GC,把新生区和幸存0区中的存活对象移到幸存1区,并将其他对象清除。故 轻GC实在新生区快满时发生。 重GC主要发生在老年区。轻GC过后,若新生区和其中一个幸存区仍无法存放新对象,这时就尝试把对象 ...
转载
2021-10-12 23:35:00
107阅读
2评论
本章内容做为多线程的最后一章主要是聊一聊“锁”,在高并发情况下影响多线程程序的性能最大的一个因素可能就是锁了,包含锁的范围、锁的类型等等,所以说锁的掌握可以说尤为重要。不同的文章对锁的分类都不一样,本章中笔者由浅入深,先从概念开始后API实现这样的一个顺序来描述。本章内容过后,JVM专题的常用的基础知识基本全聊完了,如果后续时间允许的话笔者会新开一个专题,专门讲一个多线程的相关知识:)一、基础知识
原创
精选
2022-05-20 02:16:20
440阅读
点赞
1评论
在实操作本章内容之前,请一定详细了解1/3章GC基础的内容,同时因为每个应用的情况不太一样,所以JVM调优没有一个统一的模式,只有深入了解其原理后才能进行调优操作。笔者大概罗列了一下JVM调优的必要过程:1、了解jvm原理;2、了解jvm相关参数;3、可读懂gc日志;4、上线压测。
原创
精选
2022-05-05 15:01:18
524阅读
点赞
1评论
1. 运行时数据区概述前面的章节中已经将类的加载过程大致过程说清楚了,此时类已经加载到内存中,,后面就是运行时数据区的各个组件的工作了由上图可以看出来, jvm将class字节码加载完成后,后面运行的大部分工作都是在运行时数据区中完成,也就是电脑内存中,也更加复杂, jvm中的垃圾回收 针对的也是这一片区域,电脑的内存区域非常宝贵,也是程序运行速度的保证内存的重要性:是硬盘和CPU的中间仓库及桥梁
转载
2021-01-27 22:54:04
437阅读
2评论
我们知道,我们写的java文件是不能直接运行的,我们可以在IDEA中右键文件名点击运行,这中间其实掺杂了一系列的复杂处理过程。这篇文章,我们只讨论我们的代码在运行之前的一个环节,叫做类的加载。按照我写文章的常规惯例,先给出这篇文章的大致结构;首先,认识类加载机制,然后,详细介绍类加载的过程。最后,介绍了类加载器,还有双亲委派原则。废话不多说,直接来看吧。一、什么是类的加载在介绍类的加载机制之前,先
原创
2021-01-15 13:48:40
194阅读