JAVA-JVM
文章平均质量分 89
可口可乐的围脖
这个作者很懒,什么都没留下…
展开
-
java 虚拟机--新生代与老年代GC
1. Java堆中各代分布:图1:Java堆中各代分布Young:主要是用来存放新生的对象。 Old:主要存放应用程序中生命周期长的内存对象。 Permanent:是指内存的永久保存区域,主要存放Class和Meta的信息,Class在被 Load的时候被放入PermGenspace区域. 它和和存放Instance的Heap区域不同,GC(GarbageCollect转载 2014-10-24 09:09:47 · 514 阅读 · 0 评论 -
JVM内存区域
jvm内存区域划分 Eden Space、Survivor Space、Tenured Gen2013 年 8 月 15 日vvdiaryLeave a commentjvm区域总体分两类,heap区和非heap区。heap区又分:Eden Space(伊甸园)、Survivor Space(幸存者区)、Tenured Gen(老年代-养老区)。 非heap区又分:Code转载 2014-10-24 09:41:20 · 822 阅读 · 0 评论 -
JVM GC调优一则--增大Eden Space提高性能
线上有Tomcat升级到7.0.52版,然后有应用的JVM FullGC变频繁,在高峰期socket连接数,Cpu使用率都暴增。思路思路是Tomcat本身的代码应该是没有问题的,有问题的可能是应用代码升级,或者环境改变了,总之Tomcat的优先级排在最后。先把应用的heap dump下来分析下:jmap -dump:format=b,file=path pid用IBM的He转载 2014-10-24 09:02:21 · 660 阅读 · 0 评论 -
jvm的内存模型之eden区
浅谈java内存模型 不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的。其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无 非是要控制多个线程对某个资源的有序访问或修改。总结java的内存模型,要解决两个主要的问题:可见性和有序性。我们都知道计算机有高速缓存的存在,处 理器并不是每次处理数据都是取内存的。JVM定义了自己的内存模型,屏蔽转载 2014-10-24 09:33:19 · 1116 阅读 · 1 评论 -
jvm内存区域划分 (解释的很形象)
jvm区域总体分两类,heap区和非heap区。heap区又分:Eden Space(伊甸园)、Survivor Space(幸存者区)、Tenured Gen(老年代-养老区)。 非heap区又分:Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java虚拟机栈)、Local Method Statck(本地方法栈)。 HotSpot虚拟机GC转载 2014-10-24 09:39:42 · 527 阅读 · 0 评论 -
jinfo命令
jinfo命令 该命令可以打印出java进程的配置信息:包括jvm参数,系统属性等用法:jinfo [ option ] pidjinfo [ option ] executable corejinfo [ option ] [server-id@]remote-hostname-or-IP 参数: pid 进程号executable 产生core转载 2014-10-17 10:25:57 · 714 阅读 · 0 评论 -
jmap命令
jmap命令 jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等命令格式 jmap [options] pid-dump:[live,]format=b,file= --dump堆到文件,live指明是活着的对象,file指定文件名 因为在dump:l转载 2014-10-17 10:19:20 · 392 阅读 · 0 评论 -
jdk之jhat命令
jhat命令 -- Java Heap Analyse Tool 用途:是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言第一步:导出堆 第二步:分析堆文件 第三步:查看html 有时你dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数:jhat -J-Xmx512m 对于转载 2014-10-17 10:14:37 · 931 阅读 · 0 评论 -
Eclipse运行性能调优
最近,Eclipse(Eclipse-JEE3.5)运行十分缓慢(可能插件安装过多),因此,得到了个机会调优一下,以便提高工作效率下图是未经任何调整eclipse的gc情况(使用jvisualvm命令,安装visual gc插件)从图中可以看出,仅启动过程就有38次young gc,11次full gc为了查看gc细节,在eclipse.ini中加入如下参数:-verbose:转载 2014-10-17 10:26:39 · 390 阅读 · 0 评论 -
jhat中的OQL(对象查询语言)
jhat中的OQL(对象查询语言) 如果需要根据某些条件来过滤或查询堆的对象,这是可能的,可以在jhat的html页面中执行OQL,来查询符合条件的对象基本语法: select [from [instanceof] ][where ]解释: (1)class name是java类的完全限定名,如:java.lang.String, java.util.Arra转载 2014-10-17 10:14:45 · 598 阅读 · 0 评论 -
jps命令
jps -- Java Virtual Machine Process Status Tool 可以列出本机所有java进程的pid jps [ options ] [ hostid ] 选项 -q 仅输出VM标识符,不包括class name,jar name,arguments in main method -m 输出main method的参数 -l 输出完全转载 2014-10-17 10:11:47 · 464 阅读 · 0 评论 -
jstatd命令
jstatd [options] 此命令是一个RMI Server应用程序,提供了对JVM的创建和结束监视,也为远程监视工具提供了一个可以attach的接口options -nr 当一个存在的RMI Registry没有找到时,不尝试创建一个内部的RMI Registry-p port 端口号,默认为1099-n rminame 默认为JStatRemoteHost;如果多转载 2014-10-17 10:16:28 · 918 阅读 · 0 评论 -
对于GC回收优化转贴文章的一点补充
记得在我前一阵子的blog中写了关于jdk1.5的pool的内存溢出问题,这次乘着新的memcache客户端的使用,做了一次全面的压力测试。jdk采用1.5的压力测试结果压了一个周末回来就无法响应了,看了看它的GC输出:全都是[Full GC [Tenured: 786431K->786431K(786432K), 3.4802480 secs] 1022399K->1022399K(10转载 2014-11-05 09:17:55 · 399 阅读 · 0 评论 -
Java 载入Jar内资源问题的探究
工作忙,有些许时间没有更新Blog了,这次在开发监控模块的时候遇到了这个问题,整个问题定位过程真是走了不少路,所以觉得有必要记录下来分享一下。在我看来很多时候结果也许就很简单一个原因,但是开发人员却要探究很久,也许在找到了其他可实现业务逻辑方法的情况下,就会放弃寻找原因,这期间我也是一样。 问题初现: 在服务集成平台中需要新增一块写入数据库的逻辑,因此考虑最简便就是弄个Sp转载 2014-11-05 10:08:31 · 760 阅读 · 0 评论 -
Java虚拟机解析篇之---垃圾回收器
上一篇说了虚拟机的内存模型,在说到堆内存的时候我们提到了,堆内存是Java内存中区域最大的一部分,而且垃圾回收器主要就是回收这部分的内容。那么这篇就来介绍一下垃圾回收器的原理以及回收的算法。Java中的垃圾回收器(GC)是Java中比较有特色的一点,不需要我们手动的去管理一个对象,不想C++中的构造函数和析构函数一样,需要程序猿自己去手动的管理,很容易造成内存泄露的问题。当然如果学过OC语言的转载 2014-11-05 08:55:16 · 471 阅读 · 0 评论 -
Java虚拟机解析篇之---内存模型
今天闲来无事来,看一下Java中的内存模型和垃圾回收机制的原理,关于这个方面的知识,网上已经有很多现成的资料可以供我们参考,但是知识还是比较杂的,在这部分知识点中有一本书不得不推荐:《深入理解Java虚拟机》,现在已经是第二版了。这本书就从头开始详细介绍了Java整个虚拟机的模型以及Java的类文件结构,加载机制等。这里大部分的知识点都是可以在这本书中找到的,当然我是主要还是借鉴这本书中的很多内容转载 2014-11-05 08:56:17 · 388 阅读 · 0 评论 -
通过GC输出分析内存泄露问题
SIP5.0以后服务的请求量爆发性增长,因此也暴露了原来没有暴露出来的问题。由于过去一般一个新版本发布周期在一个月左右,因此如果是小的内存泄露,在一个月之内重新发布以后也就看不出任何问题。因此这阵子除了优化Memcache客户端和SIP框架逻辑以外其他依赖部分以外,对于内存泄露的压力测试也开始实实在在的做起来。经过这次问题的定位和解决以后,大致觉得对于一个大用户量应用要放心的话,那么需要做这么转载 2014-11-05 09:17:35 · 387 阅读 · 0 评论 -
转贴:介绍并调优JVM GC(Garbage Collection)
下文是转贴于http://www.javadby.com/yuyanjichu/20080322/5220.html。因为这几天压力测试,然后再重温GC的时候,觉得这片文章写得比较详细,对于去看GC print有一些帮助。转贴一下。 调整JVM GC(Garbage Collection),可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但转载 2014-11-05 09:20:18 · 426 阅读 · 0 评论 -
关于Memcached Cache是集中式还是分布式的一点补充
昨天贴了这个帖子以后,有同学说我是不是写错了,Memcached Cache应该是分布式的Cache,怎么变成集中式了。 这里把我另外一部分的内容贴出来。 Memcached是一种集中式Cache,支持分布式横向扩展。这里需要有点说明,很多开发者觉得Memcached是一种分布式Cache,但是其实Memcached服务端本身是单实例的,只是在客户端实现过程中可以根据存储的主键转载 2014-11-05 09:21:27 · 606 阅读 · 0 评论 -
OOM和JVM配置优化(一)
OOM这个缩写就是Java程序开发过程中让人最头痛的问题:Out of Memory。在很多开发人员的开发过程中,或多或少的都会遇到这类问题,这类问题定位比较困难,往往需要根据经验来判断可能出现问题的代码。原因主要是两个:对象没有被释放(多种情况引起,往往是比较隐蔽的引用导致被Hold而无法被回收)。另一种就是真的Memory不够用了,需要增加JVM的Heap来满足应用程序的需求。最近有同事发的关转载 2014-11-06 09:46:42 · 506 阅读 · 0 评论 -
OOM和JVM配置优化(二)
JVM优化配置 这里首先要说明的是这里提到的JVM是Sun的HotSpot JVM 5和以上的版本。性能优化在应用方面可以有很多手段,包括Cache,多线程,各种算法等等。通常情况下是不建议在没有任何统计和分析的情况下去手动配置JVM的参数来调整性能,因为在JVM 5以上已经作了根据机器和OS的情况自动配置合适参数的算法,基本能够满足大部分的情况,当然这种自动适配只是一种通用的方式转载 2014-11-06 09:47:33 · 372 阅读 · 0 评论 -
Java线程Dump分析工具--jstack
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式: jstack [-l][F] pid 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的转载 2014-11-05 11:51:16 · 641 阅读 · 0 评论 -
Java内存溢出详解
一、常见的Java内存溢出有以下三种:java.lang.OutOfMemoryError: Java heap space —-JVM Heap(堆)溢出JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap的大小是Young Gene转载 2014-12-18 14:14:14 · 332 阅读 · 0 评论 -
GC浅析之一GC基础知识
背景知识:Java内存分布分为以下几个区域本地方法区:(线程私有)native code占用的内存。方法区:存放Class定义,常量,全局变量PC计数器:(线程私有)记录当前指令位置栈:(线程私有)对正在运行方法指令,变量值,实例引用进行压栈堆:存放对象实例GC要解决2个问题计算出需要回收的无用对象如何回收无用对象问题1:计算出需要回收的无用对象引用计数GC Roo转载 2014-12-29 11:37:12 · 506 阅读 · 0 评论 -
java虚拟机性能监控工具介绍
最近在做性能测试,在性能调优过程中查阅了些虚拟机相关的知识,下面对虚拟机所用的性能监控的工具做个简单的介绍和汇总。一、JDK命令行工具1.jps:虚拟机进程状况工具 列出正在运行的虚拟机进程,显示虚拟机执行祝列的名称,已经这些进程的本地虚拟机的唯一ID。此命令虽然功能单一,但它是使用频率最高的JDK命令工具。Jps 命令格式:jps [options] [hostid]转载 2014-12-29 11:35:32 · 1086 阅读 · 0 评论 -
GC浅析之二HotSpot GC了解
HotSpot JVM 内存模型内存概念上如下划分HotSpot内存参数-Xms; -Xmx 堆大小-Xss 栈大小-Xmn --XX:SurviorRatio=xxx 新生代大小 ;新生代中eden和survivor的比例-XX:NewRatio=xx;-XX:MaxTenuringThreshold 新生代和永久代的比例,新生代最大存活次数-XX:PermSize=xxx; -转载 2014-12-29 11:37:57 · 478 阅读 · 0 评论 -
GC浅析之三-性能调优经验总结
性能调优经验总结 问题的出现:在日常环境下,以某server 为例,该机器的每秒的访问量均值在368左右,最大访问量在913。对外提供服务的表现为每两三个小时就有秒级别的时间客户端请求超时,在访问量增大的情况下用户请求超时频率明显增多。 现象的直接分析:通过监控GC发现该现象,GC中比较频繁的出现promotion failed和concurrent mode failur转载 2014-12-29 11:38:44 · 651 阅读 · 0 评论 -
实战Java虚拟机之一“堆溢出处理”
从今天开始,我会发5个关于java虚拟机的小系列:实战Java虚拟机之一“堆溢出处理”实战Java虚拟机之二“虚拟机的工作模式”实战Java虚拟机之三“G1的新生代GC”实战Java虚拟机之四“禁用System.gc()”实战Java虚拟机之五“开启JIT编译”下面说说【实战Java虚拟机之一“堆溢出处理”】在Java程序的运行过程中,如果堆空间不足,则转载 2015-04-07 13:38:54 · 431 阅读 · 0 评论 -
【转发】关于Java性能的9个谬论
转载请注明出处,感谢大家的支持!本文来自优优码:http://www.uucode.net/201502/9%e4%b8%aa%e8%b0%ac%e8%ae%baJava的性能有某种黑魔法之称。部分原因在于Java平台非常复杂,很多情况下问题难以定位。然而在历史上还有一种趋势,人们靠智慧和经验来研究Java性能,而不是靠应用统计和实证推理。在这篇文章中,我希望拆穿一些最荒谬的技术神转载 2015-04-07 15:07:29 · 402 阅读 · 0 评论 -
java内存泄漏的定位与分析
1、为什么会发生内存泄漏java 如何检测内在泄漏呢?我们需要一些工具进行检测,并发现内存泄漏问题,不然很容易发生down机问题。编写java程序最为方便的地方就是我们不需要管理内存的分配和释放,一切由jvm来进行处理,当java对象不再被应用时,等到堆内存不够用时,jvm会进行垃圾回收,清除这些对象占用的堆内存空间,如果对象一直被应用,jvm无法对其进行回收,创建新的对象时,无法从Hea转载 2015-04-16 11:56:04 · 351 阅读 · 0 评论 -
JVM调优总结(四)-垃圾回收面临的问题
如何区分垃圾 上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来判断。垃圾回收程序收集计数为0的对象即可。但是这种方法无法解决循环引用。所以,后来实现的垃圾判断算法中,都是从程序运行的根节点出发,遍历整个对象引用,查找存活的对象。那么在这种方式的实现中,垃圾回收从哪儿开始的呢?即,从哪儿开始查找哪些对象是正在被当前系统使用的。上面分析的堆和栈的区别,其中栈是真正进转载 2015-04-16 14:10:22 · 346 阅读 · 0 评论 -
JAVA内存泄漏——内存泄漏原因和内存泄漏检测工具
摘要 虽然Java虚拟机(JVM)及其垃圾收集器(garbagecollector,GC)负责管理大多数的内存任务,Java软件程序中还是有可能出现内存泄漏。实际上,这在大型项目中是一个常见的问题。避免内存泄漏的第一步是要弄清楚它是如何发生的。本文介绍了编写Java代码的一些常见的内存泄漏陷阱,以及编写不泄漏代码的一些最佳实践。一旦发生了内存泄漏,要指出造成泄漏的代码是非常困难的。因此本文还转载 2015-04-16 11:52:45 · 808 阅读 · 0 评论 -
JVM调优总结(三)-基本垃圾回收算法
可以从不同的的角度去划分垃圾回收算法:按照基本回收策略分引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 标记-清除(Mark-Sweep): 此算法执行分两阶段。第一阶段从引用根节点开始标记所有转载 2015-04-16 13:59:03 · 350 阅读 · 0 评论 -
JVM调优总结(十一)-反思
垃圾回收的悖论 所谓“成也萧何败萧何”。Java的垃圾回收确实带来了很多好处,为开发带来了便利。但是在一些高性能、高并发的情况下,垃圾回收确成为了制约Java应用的瓶颈。目前JDK的垃圾回收算法,始终无法解决垃圾回收时的暂停问题,因为这个暂停严重影响了程序的相应时间,造成拥塞或堆积。这也是后续JDK增加 G1算法的一个重要原因。 当然,上面是从技术角度出发解决垃圾回收带来的问题转载 2015-04-16 14:36:27 · 277 阅读 · 0 评论 -
JVM调优总结(一)-- 一些概念
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress引用类转载 2015-04-16 13:57:18 · 358 阅读 · 0 评论 -
JVM调优总结(五)-分代垃圾回收详述(1)
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。 在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序运行过程转载 2015-04-16 14:13:09 · 372 阅读 · 0 评论 -
JVM 配置参数学习与研究
跟踪类加载器约束的相关信息 JVM服务调优实战 服务器:8 cup, 8G mem。 e.g. java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0。 调优方案。堆设置-Xmx3550m:设置JVM最大堆内存转载 2015-04-16 13:02:27 · 348 阅读 · 0 评论 -
JVM调优总结:分代垃圾回收详述
虚拟机中的共划分为三个代:年轻代、年老点和持久代。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。下文将进行分代垃圾回收详述。AD:2013大数据全球技术峰会低价抢票中为什么要分代分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的转载 2015-04-16 13:06:20 · 356 阅读 · 0 评论 -
JVM调优总结(二)-一些概念
Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句:Object ob = new Object(); 这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte转载 2015-04-16 13:56:28 · 345 阅读 · 0 评论 -
JVM调优总结(九)-新一代的垃圾回收算法
垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在几百甚至几十毫秒以内,如果分代垃圾回收方式要达到这个指标,只能把最大堆的设置限制在一个相对转载 2015-04-16 14:33:53 · 331 阅读 · 0 评论