
jvm
catnoiofjz
这个作者很懒,什么都没留下…
展开
-
jmap命令
jmap -dump:live,format=b,file=/tmp/myoom.txt 进程id导出dump文件分析,执行后会触发GC/Full GC (Heap Dump Initiated GC),然后再导出jmap -histo:live 进程id > /tmp/oom0317.txt导出每个class的实例数和占用内存数,执行后会触发GC/Full GC (Heap Ins...原创 2020-05-03 22:48:01 · 265 阅读 · 0 评论 -
class文件加载成Class对象情况
通过编译.java文件得到.class文件,.class文件在以下情况下才会加载成java.lang.Class对象1.new该类的对象2.new该类的子类对象(也会使父类加载)3.访问该类静态变量,public static int i = 1;4.访问该类静态方法,public static void test(){}5.对该类进行反射操作,Class<?> user ...原创 2020-04-27 18:08:12 · 325 阅读 · 0 评论 -
输出gc日志参数
-XX:+HeapDumpOnOutOfMemoryError 内存溢出时保存内存快照,配合HeapDumpPath使用-XX:HeapDumpPath=/data/app/tomcat/logs/oom.log-XX:-PrintGC(等价于-verbose:gc) 开启gc日志-XX:+PrintGCDetails 打印gc信息-XX:+PrintGCDateStamps 打印gc...原创 2020-04-20 23:16:08 · 453 阅读 · 0 评论 -
jvm垃圾回收器
1.回收器种类新生代:串行(Serial),一个垃圾回收线程并行(Parallel Scavenge),多个垃圾回收线程新并行(ParNew),由于原有的并行搭配不了CMS而开发的老年代:串行(Serial Old),一个垃圾回收线程并行(Parallel Old),多个垃圾回收线程CMS,并发标志清除(Concurrent Mark Sweep),该回收线程与应用线程几乎同时...原创 2020-04-14 23:19:17 · 80 阅读 · 0 评论 -
gc回收小结
gc回收主要回收不可达的对象,那如何判断是否可达:从GC Roots对象作为起点向下搜索,搜索到的就是可达的。GC Roots对象:虚拟机栈(栈帧中的本地变量表)中引用的对象方法区中类静态熟悉引用的对象方法区中常量引用的对象本地方法栈中JNI(即一般说的Native方法)引用的对象永久代的gc回收主要两部分:废弃的常量和无用类1.如常量池里某一个字符串对象,没有被引用了则可能会被...原创 2020-03-17 23:38:23 · 107 阅读 · 0 评论 -
常见oom报错
一,java.lang.OutOfMemoryError:Java heap space堆空间不够用例子:1.不断new大对象,大数组,2.对象引用不释放,内存泄漏引发的内存溢出二,java.lang.OutOfMemoryError:GC overhead limit exceeded官方定义:超过98%的时间用来做GC并且回收了不到2%的堆内存时会抛出此异常一般是发生了内存泄...原创 2020-03-14 22:07:56 · 697 阅读 · 0 评论 -
gc日志分析
-XX:-PrintGC(等价于-verbose:gc) 开启gc日志-XX:+PrintGCDetails 打印gc信息-XX:+PrintGCDateStamps 打印gc时间戳-Xloggc:/data/app/tomcat/logs/gc.log 记录gc日志2020-03-11T00:56:27.005+0800: 43452.821: [Full GC (Ergonomi...原创 2020-03-13 10:29:57 · 162 阅读 · 0 评论 -
内存泄漏与内存溢出
内存泄漏定义:对一些无用但可达对象,gc不能进行内存回收,一直占用堆内存,导致程序运行速度减慢(可用堆内存减少引发多次gc),甚至内存溢出(内存不够用了)。案例:1.静态List,虽然把对象置空了,但list还保留着对象的引用static List<Object> list = new ArrayList<>();Object o = new Object...原创 2020-03-11 22:12:21 · 115 阅读 · 0 评论 -
字符串常量池
字符串常量池:StringTable类里面,存了一个哈希表,哈希表里面存的是字符串的地址,而字符串的对象实际存在堆里面String aa = "aa";String bb = new String("aa");String cc = new String("aa");System.out.println(aa == bb);//falseSystem.out.println(aa ==...原创 2020-03-10 22:35:28 · 101 阅读 · 0 评论 -
jvm参数小结
-Xms堆最小内存,包含新生代和老年代,不包含永久代,默认为操作系统物理内存的1/64但小于1G,-Xmx堆最大内存,包含新生代和老年代,不包含永久代,默认为物理内存的1/4但小于1G,默认当空余堆内存小于40%时,JVM会增大Heap到-Xmx指定的大小,通过-XX:MinHeapFreeRation配置当空余堆内存大于70%时,JVM会减小heap的大小到-Xms指定的大小,通过XX:...原创 2020-03-07 22:08:32 · 126 阅读 · 0 评论 -
GC收回条件
Minor GC - 从年轻代回收内存触发条件:1、Eden区域满,Survivor满不会引发GC2、新创建的对象大小 > Eden所剩空间FullGC - 清理整个堆空间,包括年轻代,老年代和永久代,不包括元空间,元空间存堆外内存,即物理内存触发条件:1.老年代空间不足如果创建一个大对象,Eden区域当中放不下这个大对象,会直接保存在老年代当中,如果老年代空间也不足,就会...原创 2020-03-06 16:03:21 · 155 阅读 · 0 评论 -
jvm小结
一,类加载器如Stu.class文件经过类加载器加载后变成Stu Class1.启动类加载器Bootstrap -- C++语言写的加载javahome/jre/lib/rt.jar里面的Object.class,String.class2.扩展类加载器sun.misc.Laucher的内部类ExtClassLoader(getParent=null(Bootstrap)只是逻辑关系不...原创 2020-03-04 18:45:28 · 108 阅读 · 0 评论