晴天M雨天
某互联网公司高级开发工程师
展开
-
jvm调优思路
常用工具简单介绍 Jmap 此命令可以用来查看内存信息,实例个数以及占用内存大小 常用指令 jmap -dump:format=b,file=eureka.hprof 14660 Jstack 用jstack加进程id查找死锁 还可以用jvisualvm自动检测死锁 线上cup高查找办法 Jinfo 查看正在运行的Java应用程序的扩展参数 查看jvm的参数 Jstat jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下: jstat [-命令选项] [vmid] [间隔时间(原创 2021-10-31 16:45:27 · 369 阅读 · 0 评论 -
class文件结构之魔数
每个class文件的前四个字节表示魔数,他的唯一作用是确定这个文件是否是一个能被虚拟机接受的class文件, 很多文件存储标准中都使用魔数来进行身份识别,比如图片格式,如gif、jpg等在文件中都存在魔数,使用魔数而不是扩展名来进行识别主要基于安全方面的考虑。因为扩展名可以随便改动。文件格式的制定者可以自有的选择魔数值。 紧接着魔数的4个字节后,第5个和第6个表示次版本号。第7、8表示主版本号。如下图 用16进制编辑器打开 可以看见前4个字节的16进制表示的是 0xCAFEBASE 表示魔数,0x00表示次原创 2021-07-04 17:34:04 · 388 阅读 · 0 评论 -
jvm class文件结构
现在的行情真的是越来越内卷了,本来你会怎么用就能找到工作了,但是现在你还得知道原理,深入理解原理有时候其实是很难的事情,今天就被问到了class文件结构,其实这个东西我感觉算是面试的八股文成分吧,这里回来后学习了一下,后续更新做一个小总结。 有时候有些东西学习了以后可能当下你是感觉没啥用的,但是在将来的某一个时候,有可能你就会用到,如果能融汇贯通,那就更好了。 首先根据我的学习框架如下 class文件是什么? class文件结构有那些东西组成? class文件结构知道了有什么用? class文件是什么? 1原创 2021-07-04 00:28:09 · 79 阅读 · 0 评论 -
GC垃圾回收的那些算法
算法内功之剖析标记清除 标记清除算法: 首先是标记阶段,标记阶段通过GC root 分析对象是否需要回收,把需要回收的对象进行标记,完了再gc时进行回收。也是最基础的收集算法,其他几种都是在这个基础之上进行改进。 算法不足: 1效率问题,标记和清除的效率都不高。 2容易产生内存碎片,在分配对象时空间不足还会多次触发gc 算法图示如下所示: 算法内功之剖析复制算法 复制算法主要是为了解决效率问题,算法的思想是将内存划分为同样大小的两块,每次将存活的对象直接复制到另一边,把之前的不可达对象直接清理掉。然后移动原创 2020-11-25 15:12:10 · 209 阅读 · 0 评论 -
jvm内存模型
jvm内存模型 jvm作用:JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略 平时我们遇到的线上异常有OutOfMemoryError,但是到底是哪块内存溢出,这就需要我们对jvm内存进行深入了解,以便于快速的解决生产故障。 线程独占:程序计数器 本地方法栈 栈 线程共享:堆 方法区 通过一张图来了解如何通过参数来控制各区域的内存大小 图片来自网络 控制参数 -Xms设置堆的最小空间大小。 -Xmx设置堆的最大空间大小。 -XX:NewSize设置新生代最小空间大小。 -XX:MaxN原创 2020-11-25 14:59:23 · 124 阅读 · 0 评论 -
jvm如何判断对象是否存活
对象存活算法引用计数法 对象存活算法引用计数法 首先说定义:就是一个对象被引用的话,计数器就+1,当引用失效时就-1,当是0就表示对象可以回收。 优点:实现简单高效 缺点:无法解决循环引用的问题 可以看一个案例来证明: public class test { private Object instence; public test() { //开辟一片20MB大小的内存,便于形象的看出释放效果 byte [] b = new byte[20 * 1024 *原创 2020-10-30 10:49:13 · 129 阅读 · 0 评论 -
深入理解Java对象
你的对象是怎么来的? 我们所说的对象创建,其实就是代码操作new的操作,虽然只有简单一行,但是虚拟机在创建对象时候做了什么工作呢?我们可以来深入看以下。 1首先jvm在接收到new指令时,首先会去常量池中定位一个类的引用,并查看该类是否已经被加载,如果被加载,就跳过,如果未加载,先执行类的加载。 2类加载完成以后,jvm就会给对象分配空间,这里分配空间的方式被分为两种,一种是“指针碰撞”,另一种是“空闲列表”,决定是否使用“指针碰撞”还是“空闲列表”,本质上取决于内存是否规整,也就是跟垃圾回收器有关,一般j原创 2020-10-28 20:37:57 · 126 阅读 · 0 评论 -
Java 引用类型(四种)
众所周知,Java虚拟机中存在强引用、软引用、弱引用和虚引用4中类型,这4中类型在虚拟机gc的时候会区别对待。首先我们来思考几个问题:我们为什么要学这个?学这个有什么用?,能解决什么问题?学任何东西想清楚这几个问题,学习方向就知道了。 毕业以后的一切学习,无非就两个目的,1挣钱,2解决问题。 1学习以后技术 提高,解决问题能力提高,加薪 2熟悉引用的情况,可以写出对jvm更友好的代码,让jvm垃圾回收效率更好。 强引用 其实我们new操作都是强引用,是一个普遍操作,当内存空间不足,Java虚拟机宁愿抛出Ou原创 2020-10-28 12:38:52 · 148 阅读 · 0 评论