JVM
JVM相关
触初
这个作者很懒,什么都没留下…
展开
-
常见的垃圾回收器
分代JDK诞生 Serial追随(单线程)提高效率,诞生了PS(多线程并行)为了配合CMS,诞生了PN,CMS是1.4版本后期引入,CMS是里程碑式的GC(并发),但是CMS毛病较多,因此目前任何一个JDK版本默认是CMS年轻代Serial 年轻代 串行回收PS 年轻代 并行回收ParNew 年轻代 配合CMS的并行回收老年代SerialOldParallelOldCMS,垃圾回收和应用程序同时运行,降低STW的时间(200ms),但是会有碎片化的问题,碎片到达一定程度,.原创 2021-07-18 00:59:13 · 224 阅读 · 0 评论 -
JVM随笔
jconsole远程监控java -Djava.rmi.server.hostname=192.168.5.132 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=11111 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xms100M -Xmx100M -XX:+PrintGC Fu原创 2021-07-10 01:51:07 · 145 阅读 · 0 评论 -
常见的垃圾回收算法
什么是垃圾:没有任何引用指向的一个对象或者多个对象(循环引用)如何定位垃圾:引用计数(ReferenceCount)(循环引用问题不好解决)根可达算法(RootSearching)常见的垃圾回收算法:1.标记清除(mark sweep):两遍扫描,第一遍将不可回收的对象标记,第二遍将可回收的对象清除优点:在存活对象比较多的情况下,效率较高缺点:位置不连续、产生碎片、效率偏低(两遍扫描)2.拷贝算法 (copying):内存一分为二,一遍扫描,找到不可回收的对象,拷贝到另一块内存中原创 2021-03-22 01:16:55 · 219 阅读 · 0 评论 -
变量定义在for循环外面还是里面
结论:个人推荐,变量定义在for循环内部原因: 1.在10亿次的数量级上,耗时上,两者没有区别2.用javap进行反汇编后,指令码上基本无区别,所以在执行时也无区别(变量定义在for循环外没有赋值为null时,区别只是临时变量表中的位置不同;并赋值为null时,只是多了一个null压栈和出栈)2.50.用gc日志彻底粉碎,变量定义在for循环内,会‘循环创建引用,浪费内存’的错误说法3.jdk源码中,变量定义在for循环内部过程: 原本用javap分析完反汇编后就可以结束并得出结论结果我突发原创 2021-03-18 00:19:59 · 5230 阅读 · 2 评论 -
对象内存分布(计算对象的大小)
对象的内存分布分为两种:普通对象:对象头/markword:记录对象的分代年龄、锁状态、hashcode/偏向锁的线程Id等ClassPointer指针:指向当前类的class对象实例数据Padding对齐数组对象(多了一个数组长度):对象头/markwordClassPointer指针数组长度数组数据Padding对齐对象大小与操作系统的位数有关(这里以64位机为例)除操作系统位数外,还与虚拟机配置有关查看虚拟机配置java -XX:+PrintCommandLine原创 2021-03-15 01:46:58 · 337 阅读 · 0 评论 -
打破双亲委派机制实现热更新(同时使用自定义类加载器对class文件加密)
这里通过自定义类加载器,分别实现了对class文件加密和打破双亲委派机制的热更新(用于练习和学习)代码结构源代码package com.myspringboot.jvm.loader;import java.io.*;/** * 带加密功能的自定义类加载器(打破双亲委派机制,实现热加载) */public class MyClassLoaderWithEncription extends ClassLoader { private String pathName;原创 2021-03-14 01:01:24 · 420 阅读 · 1 评论 -
class文件/类加载过程
类加载过程1,Loading双亲委派(可查看这篇文档https://blog.csdn.net/jt781861965/article/details/114560791?spm=1001.2014.3001.5501)2,Linking2.1,Verification验证文件是否符合JVM规定2.2,Preparation静态成员变量赋默认值2.3,Resolution将类、方法、属性等符号引用解析为直接引用常量池中的各种符号引用解析为指针、偏移量等内存地址的直接引用3,Initia原创 2021-03-11 02:01:39 · 160 阅读 · 1 评论 -
IDEA中两款好用的看class(字节码)文件、反汇编指令码插件
具体使用方式,直接看截图看class文件将class文件稍微翻译了一下原创 2021-03-10 02:50:43 · 1158 阅读 · 1 评论 -
Java中双亲委派机制
什么是类加载器的双亲委派机制?当一个类加载器想要加载一个class文件时,会先在自己已加载类的缓存中去寻找,找到的话,返回结果;没有找到的话,会让其父加载器在已加载类的缓存中去寻找,找到的话,返回结果;没有找到的话,继续向上委派,一直到顶级加载器,在已加载类的缓存中去寻找,找到的话,返回结果;没有找到的话,顶级加载器会在自己加载路径下去寻找class文件,找到的话,返回结果;没有找到的话,顶级加载器会通过与之前向上委派相反的方向向下委派其子加载器,在自己加载路径下去寻找class文件,找到的话,原创 2021-03-09 01:40:26 · 210 阅读 · 0 评论