
jvm
追寻北极
没有月亮的晚上,我们相信星光。没有路可走的时候,我们相信远方.--
展开
-
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足转载 2015-01-27 11:48:47 · 658 阅读 · 0 评论 -
jhat命令
jhat命令 -- Java Head Analyse Tool 用途:是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言第一步:导出堆 第二步:分析堆文件 第三步:查看html有时你dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数:jhat -J-Xmx512m 对转载 2015-01-27 11:47:38 · 732 阅读 · 0 评论 -
通过jaht分析dump文件
1,执行命令jhat oom.txt日志如下:Reading from oom.txt...Dump file created Mon Jan 26 14:44:15 CST 2015Snapshot read, resolving...Resolving 15223723 objects...WARNING: Failed to resolve object id原创 2015-01-27 09:38:15 · 1191 阅读 · 0 评论 -
AbstractQueuedSynchronizer的lock原理介绍
ReentrantLock是java.util.concurrent.locks中的一个可重入锁类.内部是通过AbstractQueuedSynchronizer来实现的。 Sync,FairSync和NonFairSync都是ReentrantLock的静态内部类。Sync 是一个抽象类,而FairSync和NonFairSync则是具体类,分别对应了公平锁和非公平锁。实际中公平锁吞吐量比非公平原创 2014-09-27 14:42:38 · 955 阅读 · 0 评论 -
jdk1.5、1.6、1.7新特性详细介绍(整理)
jdk1.5新特性1.泛型2.foreach3.自动拆箱装箱4.枚举5.静态导入(Static import)6.元数据(Metadata)7.线程池8.Java Generics 让我们详细讨论每个新特性,并看一些例子。 1、泛型(Generics) 泛型是JDK1.5中一个最“酷”的特征。通过引入泛型,我们将获得编译时类型的安全和运行转载 2014-09-04 09:29:44 · 1078 阅读 · 0 评论 -
Fork and Join: Java也可以轻松地编写并发程序
在开始尝试 Fork/Join 模式之前,我们需要从 Doug Lea 主持的 Concurrency JSR-166 Interest Site 上下载 JSR-166y 的源代码,并且我们还需要安装最新版本的 JDK 6(下载网址请参阅参考资源)。Fork/Join 模式的使用方式非常直观。首先,我们需要编写一个 ForkJoinTask 来完成子任务的分割、中间结果的合并等工作。随后转载 2014-09-04 09:57:26 · 933 阅读 · 0 评论 -
深入JVM锁机制1-synchronized .
目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。 数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU转载 2014-09-03 22:13:04 · 770 阅读 · 0 评论 -
JAVA多线程和并发基础面试问答
原文出处: Pankaj 译文出处:ifeve-郑旭东 欢迎分享原创到伯乐头条多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。(校对注:非常赞同这个观点)Java多线程面试问题1. 进程和线程之间有什么不同?一个进程是一个独立(self con转载 2014-09-03 09:54:27 · 551 阅读 · 0 评论 -
Arrays.copyOf(...)和System.arraycopy(...)
首先观察先System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)的声明:[java] view plaincopyprint?public staticnativevoid arraycopy(Object src, int srcPos,转载 2014-09-03 09:53:18 · 800 阅读 · 0 评论 -
VisualVM监控远程主机JVM配置
服务端配置:1,在JAVA_OPTS中追加下面参数-XX:HeapDumpPath=/data/project/zqgame_backend_oom.txt -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.au原创 2015-01-27 09:31:41 · 1140 阅读 · 0 评论 -
jvm OnOutOfMemoryError时dump堆内存配置
配置JAVA_OPTS追加参数如下:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/joeyon/oom.txt -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.au原创 2015-01-27 09:22:36 · 1925 阅读 · 0 评论 -
Java heap dump触发和分析(转)
为了分析java应用的内存泄漏,使用thread dump往往解决不了问题。使用jstat【eg:jstat -gcutil pid 1000 5】工具查看运行的java应用的heap size,perm size ,survivor ratio等,当时你无法知道是什么对象把堆填满了。什么是 Java heap dump 首先需要搞懂什么是java heap,java转载 2015-01-27 11:51:07 · 1464 阅读 · 0 评论 -
高吞吐低延迟Java应用的垃圾回收优化
本文由 ImportNew - hejiani 翻译自 linkedin。欢迎加入翻译小组。转载请见文末要求。高性能应用构成了现代网络的支柱。LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求。要优化用户体验,低延迟地响应这些请求非常重要。比如说,用户经常用到的一个功能是了解动态信息——不断更新的专业活动和内容的列表。动态信息在LinkedIn随处可见,包括公司页面,转载 2015-03-25 17:47:24 · 863 阅读 · 0 评论 -
TreeMap源码导读
1,public class TreeMap extends AbstractMap implements NavigableMap, Cloneable, java.io.Serializable{/** * The comparator used to maintain order in this tree map, or * null if it u原创 2015-03-24 13:41:30 · 626 阅读 · 0 评论 -
LinkedList源码导读
1, /** * Appends the specified element to the end of this list. * * This method is equivalent to {@link #addLast}. * * @param e element to be appended to this list *原创 2015-03-24 12:01:06 · 548 阅读 · 0 评论 -
java中treemap和treeset实现(红黑树)
TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。TreeSet 和 TreeMap 的关系为了让大家了解 TreeMap 和 TreeSet 之间的关系,下面先看 TreeSet 类的部分源代码: public class TreeSet extends AbstractSet imp转载 2015-03-24 14:11:08 · 863 阅读 · 0 评论 -
ARRAYLIST VECTOR LINKEDLIST 区别与用法
最近用到了,所以依然是转载ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向转载 2015-03-24 11:20:35 · 547 阅读 · 0 评论 -
G1垃圾收集器入门
说明concurrent: 并发, 多个线程协同做同一件事情(有状态)parallel: 并行, 多个线程各做各的事情(互相间无共享状态)参考: What’s the difference between concurrency and parallelism概述目的本文介绍如何使用G1,及在 Hotspot JVM 中怎么使用G1垃圾收集器。 您将转载 2015-03-25 17:48:13 · 1960 阅读 · 0 评论 -
成为Java GC专家系列(3) ——如何优化Java垃圾回收
为什么需要优化GC影响GC性能的参数GC优化过程监控GC状态及分析结果设定GC类型/内存空间大小CONCURRENT MODE失败分析GC优化结果优化示例结论转载自:http://shellblog.sinaapp.com/?p=733本文是成为Java GC专家系列文章的第三篇。在第一篇《成为Java GC专家系列(1) ——Java垃圾回转载 2015-03-25 17:44:21 · 756 阅读 · 0 评论 -
深入浅出JVM(四)新一代的垃圾回收算法G1
垃圾回收的瓶颈传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在几百甚 至几十毫秒以内,如果分代垃圾回收方式要达到这个指标,只能把最大堆的设置限制在一个相对较转载 2015-03-25 17:47:34 · 2122 阅读 · 0 评论 -
ContextClassLoade与 ClassLoader
一、同一工程中:String path = Thread.currentThread().getContextClassLoader().getResource(".").getPath(); System.out.println(path); String string = Sample1.class.getClassLoader().getResource("转载 2014-12-10 09:33:25 · 677 阅读 · 0 评论 -
Java SE1.6中的Synchronized
1 引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。2 术语定义术语相关厂商内容转载 2014-09-03 22:37:11 · 860 阅读 · 0 评论 -
synchronized同步的对象不能是Integer等类型
以下这段代码不是线程安全的 Integer i = 0;...... synchronized(i) { i++; }......原因是Java的自动封箱和解箱操作在作怪。这里的i++实际上是i = new Integer(i+1),所以执行完i++后,i已经不是原来的对象了,同步块自然就无效了。其它基本类型的封装类,如Short、L原创 2014-09-02 10:05:47 · 2169 阅读 · 0 评论 -
tomcat5类加载器介绍
1,Bootstrap:该加载器包含由JVM提供的基本的运行时类,加上放置在系统扩展目录()的JAR文件中的类。注:一些JVAM将该加载器实现为一个以上的类加载器,或者它完全不可见;2,System:系统加载器,该加载器通常使用CLASSPATH环境变量来初始化。但是标准的Tomcat 5启动脚本(/bin/catalina.sh或者/bin/catalina.bat>)完全忽略了CL原创 2014-09-01 11:43:00 · 831 阅读 · 0 评论 -
Tomcat5 和 Tomcat6 类加载器架构
1. Tomcat 5 ClassLoader 架构: Bootstrap | System | Common / \Catalina Shared / \ Webapp1 Webapp2在Tomcat转载 2014-09-01 11:31:15 · 526 阅读 · 0 评论 -
探索 ConcurrentHashMap 源码导读
ConcurrentHashMap 是 Java concurrent 包的重要成员。本文将结合 Java 内存模型,来分析 ConcurrentHashMap 的 JDK 源代码。通过本文,读者将了解到 ConcurrentHashMap 高并发性的具体实现机制。这对于我们在实际应用中更加高效的使用它是很有帮助的。3评论:程 晓明 (abccheng@hotmail.co转载 2014-09-01 15:56:44 · 559 阅读 · 0 评论 -
jvm Classload method介绍
1,jvm Classload默认几个重要方法介绍findClass:Finds and loads the class with the specified name from the URL search path.找到class文件并把字节码加载到内存中,如果自定义的加载器仅覆盖了findClass,而未覆盖loadClass(即加载规则一样,但加载路径不同);则调用getClass()原创 2014-09-01 11:10:04 · 1026 阅读 · 0 评论 -
Java中的HashCode(1)之hash算法基本原理
一、为什么要有Hash算法Java中的集合有两类,一类是List,一类是Set。List内的元素是有序的,元素可以重复。Set元素无序,但元素不可重复。要想保证元素不重复,两个元素是否重复应该依据什么来判断呢?用Object.equals方法。但若每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。也就是说若集合中已有1000个元素,那么第1001个元素加入集转载 2014-09-01 16:02:03 · 654 阅读 · 0 评论 -
jvm笔记
root@mobile-site2:/data/logs/pay1.api.xxx.com# jmap -heap 8379Attaching to process ID 8379, please wait...Debugger attached successfully.Server compiler detected.JVM version is 23.7-b01usi原创 2014-06-13 09:29:12 · 762 阅读 · 0 评论 -
JDK1.8垃圾回收
你注意到了吗?JDK 8早期可访问版本已经提供下载了,java 开发人员可以使用java 8 提供的新的语言和运行特性来做一些实验。其中一个特性就是完全的移除永久代(Permanent Generation (PermGen)),这从JDK 7开始Oracle就开始行动了,比如:本地化的String从JDK 7开始就被移除了永久代(Permanent Generation )。JDK 8让它最转载 2014-09-05 13:47:52 · 12757 阅读 · 0 评论 -
解析JDK 7的Garbage-First收集器
Garbage-First(后文简称G1)收集器是当今收集器技术发展的最前沿成果,在Sun公司给出的JDK RoadMap里面,它被视作JDK 7的HotSpot VM 的一项重要进化特征。从JDK 6u14中开始就有Early Access版本的G1收集器供开发人员实验、试用,虽然在JDK 7正式版发布时,G1收集器仍然没有摆脱“Experimental”的标签,但是相信不久后将会有一个成熟的商转载 2014-09-05 13:47:14 · 883 阅读 · 0 评论 -
java的发展史
JDK 1.1.4 Sparkler 宝石 1997-09-12 JDK 1.1.5 Pumpkin 南瓜 1997-12-13 JDK 1.1.6 Abigail 阿比盖尔--女子名 1998-04-24 JDK 1.1.7 Brutus 布鲁图--古罗马政治家和将军 1998-09-28 JDK 1.1.8 Chelsea 切尔西--城市原创 2014-09-05 13:36:39 · 984 阅读 · 0 评论 -
hashcode用途
总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?这就是Object.equals方法了。但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数原创 2014-09-01 15:58:27 · 955 阅读 · 0 评论 -
ContextClassLoader介绍
Thread.currentThread().getContextClassLoader()的意义:1,父Classloader可以使用当前线程Thread.currentthread().getContextLoader()中指定的classloader中加载的类。颠覆了父ClassLoader不能使用子Classloader或者是其它没有直接父子关系的Classloader中加载的类这原创 2014-09-01 12:32:57 · 1376 阅读 · 0 评论 -
jvm classloader 原理
1,类加载器构成Bootstrap(启动类加载器 $JAVA_HOME/lib)---extension(ExtClassLoader扩展类加载器$JAVA_HOME/lib/ext)---system(AppClassLoader系统类加载器Classpath)2,加载机制双亲委派机制,某个特定的类加载器接受到加载请求时,首先将加载请求委托给父类加载器,一次递归,父类加载器可以完成加原创 2014-09-01 10:50:42 · 622 阅读 · 0 评论 -
ABA问题
首先要知道什么叫CAS(compare and swap):在jdk里面可以由UnSafe提供一个针对于volatile变量的操作,其原理是直接调用的CPU的CAS动作举个例子: 我们经常会有这样的操作 if(a==b) a = b+1; 在多线程的环境下,如果在执行完a==b之后,a发生了改变,我们就达不到预期的结果了 所以,就有了cas操作 具体你可以看看J转载 2014-09-02 10:03:01 · 942 阅读 · 0 评论 -
自旋锁、排队自旋锁、MCS锁、CLH锁
自旋锁(Spin lock)自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。自旋锁适用于锁保护的临界区很小的情况,临界区很小的话,锁占用的时间就很短。简单的实现import java.util.concurrent.atomic.AtomicReference;public class SpinLoc转载 2014-09-03 22:11:06 · 697 阅读 · 0 评论 -
深入JVM锁机制2-Lock .
我们主要关注lock和unlock方法 Java代码 public void lock() { sync.lock(); } public void lock() { sync.lock(); }直接调用的是sync的lock. Java代码 pu转载 2014-09-03 21:50:19 · 716 阅读 · 0 评论 -
AtomicInteger介绍
JDK1.5之后的java.util.concurrent.atomic包里,多了一批原子处理类。主要用于在高并发环境下的高效程序处理。网上关于这个原理介绍的比较靠谱的一片文章是出自IBM工程师的一篇:流行的原子 值得一看。这里,我们来看看AtomicInteger是如何使用非阻塞算法来实现并发控制的。AtomicInteger的关键域只有一下3个:转载 2014-09-02 09:57:07 · 746 阅读 · 0 评论 -
java同步块的几个问题
前言 对于Java多线程,接触最多的莫过于使用synchronized,这个简单易懂,但是这synchronized并非性能最优的。今天我就简单介绍一下几种锁。可能我下面讲的时候其实很多东西不会特别深刻,最好的方式是自己做实验,把各种场景在代码中实验一下,这样发发现很多细节。volatile 作为Java中的轻量级锁,当多线程中一个线转载 2014-09-02 10:11:18 · 549 阅读 · 0 评论