摘要:JDK内置工具使用一、jps命令(JavaVirtualMachineProcessStatusTool)二、jstack命令(JavaStackTrace)三、jstat命令(JavaVirtualMachineStatisticsMonitoringTool)四、jmap命令(JavaMemor...
阅读全文
摘要:jmap 的用途是为了展示java进程的内存映射信息,或者堆内存详情常用的参数如下:histojmap -histo pid 展示class的内存情况展示的信息为编号,实例数,字节,类名例如:Java代码 jmap-histo:live2540num#instances#bytesclassname----------------------------------------------1:20981908120[C2:21015504360java.lang.String4:9999159984org.learn.util.User5:31259216[Ljava.lang.Object;
阅读全文
摘要:classLoader的卸载机制 jvm中没有提供class及classloader的unload方法.那热部署及osgi中是通过什么机制来实现的呢?实现思路主要是通过更换classLoader进行重新加载.之前的classloader及加载的class类在没有实例引用的情况下,在perm区gc的情况下会被回收掉. perm区gc时回收掉没有引用的class是一个怎样的过程呢?perm区达到回收条件后,对class进行引用计算,对于没有引用的class进行回收classLoader实例什么时候被回收呢?(很有可能会进入old gen).perm区回收一般情况下触发full gc是否目的就是清除
阅读全文
摘要:前几篇篇文章介绍了介绍了JVM的参数设置并给出了一些生产环境的JVM参数配置参考方案。正如之前文章中提到的JVM参数的设置需要根据应用的特性来进行设置,每个参数的设置都需要对JVM进行长时间的监测,并不断进行调整才能找到最佳设置方案。本文将介绍如果通过工具及Java api来监测JVM的运行状态,并详细介绍各工具的使用方法。 需要监测的数据:(内存使用情况 谁使用了内存 GC的状况)内存使用情况--heap&PermGen@ 表示通过jmap –heappid可以获取的值# 表示通过jstat –gcutilpid可以获取的值参数的查看可以通过多种方法 本文中只随机列出一种。描述最大值
阅读全文
摘要:java application项目(非web项目)改进前:-Xms128m-Xmx128m-XX:NewSize=64m-XX:PermSize=64m-XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=78-XX:ThreadStackSize=128-Xloggc:logs/gc.log-Dsun.rmi.dgc.server.gcInterval=3600000-Dsun.rmi.dgc.client.gcInterval=3600000-Dsun.rmi.server.exceptionTrace=true问题:perm
阅读全文
摘要:不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同(主要cup个数,内存不同),所以使用的GC种类也会不同(如何选择见GC种类及如何选择)。本文将注重介绍JVM、GC的一些重要参数的设置来提高系统的性能。 JVM内存组成及GC相关内容请见之前的...
阅读全文
摘要:collector种类GC在 HotSpot VM 5.0里有四种:incremental (sometimes called train) low pause collector已被废弃,不在介绍.类别serial collectorparallel collector(throughput collector)concurrent collector(concurrent low pause collector)介绍单线程收集器使用单线程去完成所有的gc工作,没有线程间的通信,这种方式会相对高效并行收集器使用多线程的方式,利用多CUP来提高GC的效率主要以到达一定的吞吐量为目标并发收集器使
阅读全文
摘要:JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类 现在比较常用的是分代收集(generational collection,也是SUN VM使用的,J2SE1.2之后引入),即将内存分为几个区域,将不同生命周期的对象放在不同区域里:young generation,tenured generation和permanet generation。绝大部分的objec被分配在young generation(生命周期短),并且大部分的object在这里die。当young generati...
阅读全文
摘要:java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。组成图方法栈&
阅读全文
摘要:指令码 助记符 说明0x00 nop 什么都不做0x01 aconst_null 将null推送至栈顶0x02 iconst_m1 将int型-1推送至栈顶0x03 iconst_0 将int型0推送至栈顶0x04 iconst_1 将int型1推送至栈顶0x05 iconst_2 将int型2推送至栈顶0x06 iconst_3 将int型3推送至栈顶0x07 iconst_4 将int型4推送至栈顶0x08 iconst_5 将int型5推送至栈顶0x09 lconst_0 将long型0推送至栈顶0x0a lconst_1 将long型1推送...
阅读全文