自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 JVM 性能调优之内存优化与 GC 优化

压测工具 AB测试 post 请求接口ab -n100 -c10 -p’post.txt’ -T’application/x-www-form-urlencoded’ ‘http://test.api.com/test/register’post.txt 为存放 post 参数的文档,存储格式如 usernanme=test&password=test&sex=1参数的含义:-n:总请求次数(最小默认为 1);-c:并发次数(最小默认为 1 且不能大于总请求次数,例如:10 个请

2020-08-19 00:15:39 250

原创 GC 调优基础知识之工具篇

命令行工具jps列出当前机器上正在运行的虚拟机进程jstat是用于监视虚拟机各种运行状态信息的命令行工具,jstat -gc 13616 (这个 13616 是 JVM 的进程,通过 JPS 命令得到)jmap用于生成堆转储快照(一般称为 heapdump 或 dump 文件)jmap –heap pid(-heap 打印 heap 的概要信息 )jmap –histo:live pid 如果 live 子参数加上后,只统计活的对象数量. -histo 打印每个 class 的实例数目,内存

2020-08-18 23:47:51 169

原创 Java 语法糖及实现

泛型泛型类和泛型接口泛型方法传送门.泛型擦除Java 语言中的泛型,它只在程序源码中存在,在编译后的字节码文件中,就已经替换为原来的原生类型(RawType,也称为裸类 型)了,并且在相应的地方插入了强制转型代码,因此,对于运行期的 Java 语言来说,ArrayList<int>与 ArrayList<String>就是同一 个类,所以泛型技术实际上是 Java 语言的一颗语法糖,Java 语言中的泛型实现方法称为类型擦除,基于这种方法实现的泛型称为伪泛 型StreamJav

2020-08-18 22:36:54 296

原创 玩转类加载与类加载器

类生命周期 7 个阶段类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7 个阶段。其中验证、准备、解析 3 个部分统称为连接。阶段顺序加载、校验、准备、初始化和卸载这五个阶段的顺序是确定的,但是对于“解析”阶段则不一定,它在某些情况下可以在初始化之后再开始,这样做是 为了支持 java 的运行时绑定特征(也称为动态绑定或晚期绑定)。加载的时机加载阶段虚拟机需要完成以下 3 件事情:1)通过一个类的全限定名来获取定义此类的二进制字节

2020-08-18 00:15:30 136

原创 Class文件结构及深入字节码指令

javap & jclasslib魔数、Class 文件的版本和常量池字节码指令——异常处理在 synchronized 生成的字节码中,其实包含两条 monitorexit 指令,是为了保证所有的异常条件,都能够退出。可以看到,编译后的字节码,带有一个叫 Exception table 的异常表,里面的每一行数据,都是一个异常处理器:from 指定字节码索引的开始位置to 指定字节码索引的结束位置target 异常处理的起始位置type 异常类型也就是说,只要在 from

2020-08-11 01:02:31 221

原创 JVM底层细节

CMS & G1 第一步并发标记采用算法三色标记黑色:根对象,或者该对象与它的子对象都被扫描过。灰色:对本身被扫描,但是还没扫描完该对象的子对象。白色:未被扫描对象,如果扫描完所有对象之后,最终为白色的为不可达对象,既垃圾对象GC并发情况下的漏标问题CMS中的解决方案Incremental Update算法(关注引用的增加)当一个白色对象被一个黑色对象引用,将黑色对象重新标记为灰色,让垃圾回收器重新扫描G1中的解决方案STAB算法(snapshot-at-the-beg

2020-08-10 23:24:46 255

原创 jvm 垃圾回收

图片三连G1 垃圾回收器,注意标记

2020-08-07 00:05:30 128

原创 JVM 中的对象及引用

JVM 中对象的创建过程对象的内存分配虚拟机遇到一条 new 指令时,首先检查是否被类加载器加载,如果没有,那必须先执行相应的类加载过程。类加载就是把 class 加载到 JVM 的运行时数据区的过程分配内存指针碰撞如果 Java 堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离,这种分配方式称为“指针碰撞”。Serial、ParNew空闲列表如果 Java 堆

2020-08-06 23:37:12 276 1

原创 深入理解jvm内存区域

JVM 运行内存的整体流程JVM 向操作系统申请内存JVM 获得内存空间后,会根据配置参数分配堆、栈以及方法区的内存大小Xms30m -Xmx30m -Xss1m -XX:MaxMetaspaceSize=30m类加载这里主要是把 class 放入方法区、还有 class 中的静态变量和常量也要放入方法区执行方法及创建对象常量池Class 常量池(静态常量池)在 class 文件中除了有类的版本、字段、方法和接口等描述信息外,还有一项信息是常量池 (Constant Pool T

2020-08-04 23:51:07 231

原创 jvm 内存区域

最近有学习java相关的视频,正讲授到jvm相关知识,特整理一些关键点作为学习的一些心得。划重点jvm 执行流程jvm 语言无关通过图1可知,jvm 执行引擎最终执行的文件是.class 文件。所以不止java可以运行在jvm中,只要可以编译成class 文件的语言都可以在jvm上运行,例如 scala、kotlin等,这体现了 jvm的语言无关性。jvm 知识体系中的c位提起jvm,不论你要说 jvm调优、垃圾回收、类加载等都离不开 内存结构,所以,内存结构可以说是学好jvm

2020-08-04 00:08:23 188

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除