随笔分类 - jvm
jvm相关知识
摘要:一.字符串常量池存放的地方 字符串常量池:在jdk1.6时,它存在于永久代 jdk1.7之后: 怎么验证:思路,我们只要不断的创建字符串对象,让其内存溢出,看看报错是在哪一块内存中即可 /** * jdk6:‐Xms6M ‐Xmx6M ‐XX:PermSize=6M ‐XX:MaxPermSize=
阅读全文
摘要:1.jps 查询当前服务器启动了哪些java项目 2.jmap -histo 16332>./histo.log 3.jmap -heap 16632查询堆的信息 4.jmap ‐dump:format=b,file=kk.hprof 16332 堆栈导出, 线上环境可以设置内存溢出时自动导出堆信息
阅读全文
摘要:总体概览: 1.吞吐量和低延迟的关系 吞吐量=用户线程的时间/(用户线程的时间+GC的时间),从公式可以看出,GC的总时间越小,吞吐量越大 低延迟:指的是每次GC的停顿时间,停顿越短,延迟越低,用户感觉就越不卡 举个例子:假如只有2个线程,垃圾收集分为2个阶段:标记阶段+清除阶段 方案1:现在这2个
阅读全文
摘要:1.内存模式概览: 2.主要参数设置: 堆:初始化堆内存-Xms 最大堆内存 -Xmx 新生代:-Xmn 如:Xmx2048M 元空间:元空间使用的是直接内存,默认大小是21M,超过该值会触发FullGC,同时会扩容,因此为了启动时,更快,需要设置该值: - XX:MaxMetaspaceSize
阅读全文
摘要:在了解volatile的原理前,我们先来看个示例代码: public class Visualable { public static boolean initFlag=false; public static void main(String[] args) throws InterruptedE
阅读全文
摘要:事先创建一个java类,如下: 执行命令后获得字节码文件内容: 本次需要分析的字节码内容如下: java虚拟机栈和栈帧关系图: 栈帧的组成:局部变量表,操作数栈,动态链接,方法出口 由字节码文件可以看到,栈深度为2(stack=2)说明操作数栈的深度是2,本地变量表变量长度为5因此过程分析如下: 0
阅读全文
摘要://环境的搭建: 1.创建一个类并编译它 2.使用java命令:javap -c -verbose build/classes/java/main/com/yang/jvm/Test.class 将16进制的字节码文件转成可视化的文件内容如下: 具体内容如下: 此外:idea也有插件可以得到上面的字
阅读全文
摘要:package com.yang.jvm; import sun.net.spi.nameservice.dns.DNSNameService; public class Test { public static void main(String[] args) throws ClassNotFou
阅读全文
摘要:类的加载-连接-初始化过程都是在程序运行期间完成的,过程如下: 加载阶段: 连接阶段: jdk自带的JVM监控管理软件:通过在控制台输入命令jconsole 或者jvisualvm可以打开监控界面: jvisualvm同理执行:其功能更加强大
阅读全文