随笔分类 -  JVM

摘要:一、进程:计算机分配资源的基本单位-独立的内存空间;比如QQ 父子进程:参考redis中的持久化方案,涉及的fork() :https://www.cnblogs.com/gabin/p/13666134.html 父进程 fork() ->子进程 数据隔离(写时复制,没写之前只是个副本) 僵尸进程 阅读全文
posted @ 2020-09-29 15:11 gabin 阅读(360) 评论(0) 推荐(0)
摘要:一、强引用(GC不会被回收) 代码: package top.gabin.concurrent.reference; /** * 强引用 * -XX:+PrintGC -Xms11m -Xmx11m * */ public class StrongReference { public static 阅读全文
posted @ 2020-09-05 16:43 gabin 阅读(176) 评论(0) 推荐(0)
摘要:1、地址:https://github.com/alibaba/arthas/blob/master/README_CN.md 2、上述地址直接就有很多例子,还有安装方法,也没啥好写的。 最喜欢用的是redefine,这个原理大致应该是ClassLoader重新加载类信息去替换的。因为使用命令cla 阅读全文
posted @ 2020-09-02 08:45 gabin 阅读(258) 评论(0) 推荐(0)
摘要:GC常用参数 -Xmn -Xms -Xmx -Xss 年轻代 最小堆 最大堆 栈空间 -XX:+UseTLAB 使用TLAB,默认打开 -XX:+PrintTLAB 打印TLAB的使用情况 -XX:TLABSize 设置TLAB大小 -XX:+DisableExplictGC System.gc() 阅读全文
posted @ 2020-09-01 23:45 gabin 阅读(135) 评论(0) 推荐(0)
摘要:CMS的问题 Memory Fragmentation(内存碎片过多,导致启动单线程serial垃圾回收器) -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction 默认为0 指的是经过多少次FGC才进行压缩 Floatin 阅读全文
posted @ 2020-09-01 23:38 gabin 阅读(662) 评论(0) 推荐(0)
摘要:https://www.cnblogs.com/liugh/p/7620336.html 阅读全文
posted @ 2020-09-01 23:36 gabin 阅读(92) 评论(0) 推荐(0)
摘要:1、远程启动设置参数 java -Djava.rmi.server.hostname=192.168.17.11 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=11111 -Dcom.sun.management 阅读全文
posted @ 2020-09-01 23:35 gabin 阅读(189) 评论(0) 推荐(0)
摘要:调优前的基础概念: 吞吐量:用户代码时间 /(用户代码执行时间 + 垃圾回收时间) 响应时间:STW越短,响应时间越好 所谓调优,首先确定,追求啥?吞吐量优先,还是响应时间优先?还是在满足一定的响应时间的情况下,要求达到多大的吞吐量... 一般1.8之后,暂且默认G1就可以了,综合性比较强。其他新代 阅读全文
posted @ 2020-09-01 22:56 gabin 阅读(177) 评论(0) 推荐(0)
摘要:JVM的命令行参数参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html HotSpot参数分类 标准: - 开头,所有的HotSpot都支持 非标准:-X 开头,特定版本HotSpot支持特定命令 不稳定:-X 阅读全文
posted @ 2020-09-01 22:51 gabin 阅读(454) 评论(0) 推荐(0)
摘要:-XX:+UseSerialGC :Serial New (DefNew) + Serial Old 小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器【1.2之前默认的】 -XX:+UseParNewGC = ParNew + SerialOld 这个组合 阅读全文
posted @ 2020-09-01 22:47 gabin 阅读(276) 评论(0) 推荐(0)
摘要:GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种类型的问题: 忘记回收 多次回收 没有任何引用指向的一个对象或者多个对象(循环引 阅读全文
posted @ 2020-09-01 21:27 gabin 阅读(170) 评论(0) 推荐(0)
摘要:指令集分类 基于寄存器的指令集 基于栈的指令集 Hotspot中的Local Variable Table = JVM中的寄存器 Runtime Data Area PC 程序计数器:由于存在线程切换,线程需要有自己的程序计数器来记住指令执行到的位置【线程私有】 存放指令位置 虚拟机的运行,类似于这 阅读全文
posted @ 2020-09-01 21:22 gabin 阅读(197) 评论(0) 推荐(0)
摘要:对象大小(64位机) 观察虚拟机配置 java -XX:+PrintCommandLineFlags -version 普通对象 对象头:markword 8 ClassPointer指针:-XX:+UseCompressedClassPointers 为4字节 不开启为8字节 实例数据 引用类型: 阅读全文
posted @ 2020-09-01 21:14 gabin 阅读(151) 评论(0) 推荐(0)
摘要:JMM 硬件层数据一致性 intel 用MESI https://www.cnblogs.com/z00377750/p/9180644.html 现代CPU的数据一致性实现 = 缓存锁 + 总线锁【早期的唯一实现】 读取缓存以cache line为基本单位,目前64bytes 位于同一缓存行的两个 阅读全文
posted @ 2020-09-01 21:09 gabin 阅读(250) 评论(0) 推荐(0)
摘要:1:类加载-初始化 加载过程 Loading 双亲委派,主要出于安全来考虑 LazyLoading 五种情况 –new getstatic putstatic invokestatic指令,访问final变量除外 –java.lang.reflect对类进行反射调用时 –初始化子类的时候,父类首先初 阅读全文
posted @ 2020-09-01 20:53 gabin 阅读(287) 评论(0) 推荐(0)
摘要:JVM 1:JVM基础知识 什么是JVM JVM是一种规范 也是一种运行在操作系统之上的虚拟操作系统,也叫虚拟机;当然也存在一种基于硬件的JVM实现(具体的名字有点忘记了),这种作者自己理解的话认为也算是操作系统了 常见的JVM Oracle HotSpot(原SUN,不过也是收购来的),虽然是商用 阅读全文
posted @ 2020-09-01 20:37 gabin 阅读(180) 评论(1) 推荐(1)