JAVA虚拟机
iechenyb_
做自己喜欢的事儿,每时每刻都是开心的!
展开
-
jmap
Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。打印出某个Java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)原创 2017-07-07 22:00:26 · 1112 阅读 · 0 评论 -
linux awk使用
1 通过jstack将某个jvm中的虚拟机快照存储到dump文件中 jstack pid > dump2 grep java.lang.Thread.State dump|awk '{print $2$3$4$5}' |sort|uniq -c 21 RUNNABLE 1 TIMED_WAITING(onobjectmonitor) 3 TIME原创 2017-08-23 20:37:46 · 341 阅读 · 0 评论 -
jvm的新生代和老年代简介
新生代分为三个区域,一个Eden区和两个Survivor区,它们之间的比例为(8:1:1),这个比例也是可以修改的。通常情况下,对象主要分配在新生代的Eden区上,少数情况下也可能会直接分配在老年代中。Java虚拟机每次使用新生代中的Eden和其中一块Survivor(From),在经过一次Minor GC后,将Eden和Survivor中还存活的对象一次性地复制到另一块Survivor空间上(这...转载 2018-03-02 16:45:13 · 6339 阅读 · 1 评论 -
Java_逃逸分析技术
什么是逃逸分析(Escape Analysis)?在编程语言的编译优化原理中,分析指针动态范围的方法称之为逃逸分析。它跟静态代码分析技术中的指针分析和外形分析类似。通俗一点讲,当一个对象的指针被多个方法或线程引用时,我们称这个指针发生了逃逸。而用来分析这种逃逸现象的方法,就称之为逃逸分析。举个例子: Java代码 class A { public static B b; public...转载 2018-07-05 08:58:33 · 466 阅读 · 0 评论 -
java逃逸技术分析
概念引入我们都知道,Java 创建的对象都是被分配到堆内存上,但是事实并不是这么绝对,通过对Java对象分配的过程分析,可以知道有两个地方会导致Java中创建出来的对象并一定分别在所认为的堆上。这两个点分别是Java中的逃逸分析和TLAB(Thread Local Allocation Buffer)线程私有的缓存区。基本概念介绍逃逸分析,是一种可以有效减少Java程序中同步负载和内存堆分配压力的...原创 2018-07-05 13:56:18 · 2352 阅读 · 0 评论 -
Java内存泄漏引起的原因
Java内存泄漏引起的原因: 内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。 长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是因为长生命周期持有它的引用而导致不能被回收,这就是Java中内存泄漏的发生场景。 造成内存泄漏的几种情况:1、静态集合类引起内存...原创 2019-02-12 15:09:39 · 1196 阅读 · 0 评论 -
JAVA垃圾回收算法
1、标记 -清除算法(Mark-Sweep)“标记-清除”算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其缺点进行改进而得到的。 它的主要缺点有两个: (1)效率问题:标记和清除过程的效率都不高; (2)空...转载 2019-02-12 15:24:21 · 275 阅读 · 0 评论