2013年2月26日

classLoader卸载与jvm热部署

摘要: classLoader的卸载机制 jvm中没有提供class及classloader的unload方法.那热部署及osgi中是通过什么机制来实现的呢?实现思路主要是通过更换classLoader进行重新加载.之前的classloader及加载的class类在没有实例引用的情况下,在perm区gc的情况下会被回收掉. perm区gc时回收掉没有引用的class是一个怎样的过程呢?perm区达到回收条件后,对class进行引用计算,对于没有引用的class进行回收classLoader实例什么时候被回收呢?(很有可能会进入old gen).perm区回收一般情况下触发full gc是否目的就是清除 阅读全文

posted @ 2013-02-26 23:57 5彩石头 阅读(271) 评论(0) 推荐(0)

JVM监测&工具[整理中](五)

摘要: 前几篇篇文章介绍了介绍了JVM的参数设置并给出了一些生产环境的JVM参数配置参考方案。正如之前文章中提到的JVM参数的设置需要根据应用的特性来进行设置,每个参数的设置都需要对JVM进行长时间的监测,并不断进行调整才能找到最佳设置方案。本文将介绍如果通过工具及Java api来监测JVM的运行状态,并详细介绍各工具的使用方法。 需要监测的数据:(内存使用情况 谁使用了内存 GC的状况)内存使用情况--heap&PermGen@ 表示通过jmap –heappid可以获取的值# 表示通过jstat –gcutilpid可以获取的值参数的查看可以通过多种方法 本文中只随机列出一种。描述最大值 阅读全文

posted @ 2013-02-26 23:52 5彩石头 阅读(202) 评论(0) 推荐(0)

生产环境参数实例及分析【生产环境实例增加中】(四)

摘要: 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 阅读全文

posted @ 2013-02-26 23:49 5彩石头 阅读(193) 评论(0) 推荐(0)

JVM参数设置、分析(三)

摘要: 不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同(主要cup个数,内存不同),所以使用的GC种类也会不同(如何选择见GC种类及如何选择)。本文将注重介绍JVM、GC的一些重要参数的设置来提高系统的性能。 JVM内存组成及GC相关内容请见之前的... 阅读全文

posted @ 2013-02-26 23:47 5彩石头 阅读(242) 评论(0) 推荐(0)

HotSpot VM 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的效率主要以到达一定的吞吐量为目标并发收集器使 阅读全文

posted @ 2013-02-26 23:45 5彩石头 阅读(229) 评论(0) 推荐(0)

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... 阅读全文

posted @ 2013-02-26 23:44 5彩石头 阅读(161) 评论(0) 推荐(0)

JVM内存组成及分配(一)

摘要: java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。组成图方法栈& 阅读全文

posted @ 2013-02-26 23:41 5彩石头 阅读(207) 评论(0) 推荐(0)

BTrace使用简介

摘要: BTrace通过动态的挂接用java写的代码到运行时上来获取到一些运行细节,例如典型的使用btrace的方法为:btrace -cp [btrace的jar所在的路径,默认为btrace/build下] [pid] [需要运行的java代码]例如一段这样的代码:import java.util.Random;public class Case1{ public static void main(String[] args) throws Exception{ Random random=new Random(); CaseObject object=new CaseO... 阅读全文

posted @ 2013-02-26 23:39 5彩石头 阅读(441) 评论(0) 推荐(0)

JVM指令集及各指令的详细使用说明[转的]

摘要: 指令码 助记符 说明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推送... 阅读全文

posted @ 2013-02-26 22:26 5彩石头 阅读(197) 评论(0) 推荐(0)

导航