JVM
kevin_Luan
kevin_Luan
展开
-
VisualVM Btrace使用
实现原理参考:http://www.ibm.com/developerworks/cn/java/j-lo-instrumentation/ 1.首先使用VisualVM 下载btrace插件并安装完成。2.在Eclipse中写个测试类如下:package com.lss.test;import java.io.BufferedReader;import java.io.IOExc原创 2014-03-29 14:50:05 · 6249 阅读 · 0 评论 -
org.springframework.web.servlet.view.InternalResourceViewResolver 内存泄露问题
Spring使用 org.springframework.web.servlet.view.InternalResourceViewResolver内存泄露问题通过 Eclipse Memory Analyzer 分析工具如下,堆内存中50.51% 是由InternalResourceViewResolver 产生的。我当前使用的Spring版本是:Spring 3.1.1.RELE原创 2015-05-31 12:29:15 · 10476 阅读 · 2 评论 -
Java 动态代理实现解析
Java动态代理只能针对接口进行动态代理。如果需要对类进行实现代理可以使用:CGLIB,ASM等相关的操作字节码实现(在这里先只介绍下SUN 基于接口动态代理的实现)。代码如下:import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy原创 2014-04-06 16:53:00 · 4604 阅读 · 5 评论 -
方法区溢出
方法去用于存放Class的相关信息,如:类名,访问修饰符,常量池,字符描述,方法描述等。对于这个区域的测试,基本思路是运行时产生大量的类去填满方法区,知道溢出。虽然直接使用Java SE API也可以动态产生类(如反射时的GeneratedConstructorAccessor和动态代理等),但在本次试验使用CGLIB直接操作字节码运行时,生成大量的动态类。值得注意的是,当前主流的很多框架 如原创 2014-04-05 12:11:49 · 3118 阅读 · 0 评论 -
使用JMAP dump及分析dump文件
查看整个JVM内存状态 jmap -heap [pid]要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起查看JVM堆中对象详细占用情况jmap -histo [pid]导出整个JVM 中内存信息jmap -dump:format=b,file=文件名 [pid]jhat是sun 1.6及以上版本中自带的一个用于分析JVM 堆原创 2012-12-28 15:44:13 · 106693 阅读 · 0 评论 -
线程资源同步分析
首先看个例子:int i=0;public int getNextId(){return i++;}接下来分析一下JVM中执行步骤1.JVM首先在main memory(JVM堆)给i分配一个内存存储场所,并存储其值0;2.线程启动后,会自动分配一片working Memory 区(通常是操作数栈),当线程执行到return i++时,JVM中并不是简单的一个步骤就可以原创 2014-04-11 22:50:36 · 1691 阅读 · 0 评论 -
jstat 统计分析JVM运行状况
jstat 用户GC分析参数有:-gc , -gccapacity -gccause ,-gcnew, -gcnewcapacity, -gcold,-gcoldcapacity,-gcpermcapacity,-gcutil常用的-gcutil 可按照一定频率查看JVM中各代的空间占用情况,minor gc次数,消耗的时间等,jstat -gcutil [pid] [interval]原创 2013-11-16 15:53:05 · 1497 阅读 · 0 评论 -
Java内存回收收集器
JVM通过GC来回收堆和方法区中的内存,GC的基本原理首先会找到程序中不再被使用的对象,然后回收这些对象所占用的内存,通常采用收集器的方式实现GC,主要的收集器有引用计数收集器和跟踪收集器1.引用计数收集器引用计数收集器采用的分散式的管理方式,通过计数器记录对象是否被引用。当计数器为零时,说明此对象不再被使用。于是可以进行回收。引用计数收集器每次对象赋值时进行引用计数器增减,它有一定的原创 2014-04-10 22:26:10 · 1388 阅读 · 0 评论 -
JAVA CPU,IO 消耗分析
使用 TOP查看CPU的消耗情况top - 11:32:49 up 26 days, 45 min, 2 users, load average: 0.20, 0.08, 0.07Tasks: 471 total, 1 running, 470 sleeping, 0 stopped, 0 zombieCpu(s): 1.4%us, 0.2%sy, 0.0%n原创 2013-11-30 15:20:55 · 10608 阅读 · 0 评论 -
Java 内存区域 详解
Java虚拟机在执行Java程序的过程中会把它所管理的内存区域分为若干个不同的数据区域。这些区域都有各自的用途,有的区域随虚拟机进程启动而存在,有的区域则依赖用户线程启动和结束而建立和销毁。根据《Java虚拟机规范第二版》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。程序计数器程序计数器是一块较小的内存空间,它的作用可以看做是当期线程所执行的字节码的行号指示原创 2014-04-07 22:39:30 · 2447 阅读 · 1 评论 -
虚拟机栈和本地方法栈溢出
由于在HostSpot虚拟机中并不区分虚拟机栈和本地方法栈,因此对于HostSpot来说,-Xoss参数(设置本地方法栈大小)虽然存在,但实际上是无效的,栈容量只由-Xss参数设定。关于虚拟机栈和本地方法栈,在Java虚拟机规范中描述了两种异常:1.如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛java.lang.StackOverflowError异常。2.如果虚拟机在扩展栈时无法原创 2014-04-05 10:41:30 · 2358 阅读 · 0 评论 -
Tomcat 6.x Perm区内存泄露问题
Tomcat 6.xJSP文件最后修改时间大于当前系统时间导致Perm区内存泄露问题(java Memory pool CMS Perm Gen)出现场景:由于测试业务,需要模拟跨天测试,所以通常会采用修改服务器实现,来完成测试业务,测试完成后,不会立即同步系统时间,而直接发布上线,这时问题就出现了,由于使用穿越时间打包的,所以打包的所有文件最后修改时间都穿越了。例如:今天是:原创 2015-07-22 11:19:33 · 1768 阅读 · 0 评论