![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
xiaomin_____
努力~~
展开
-
j9vm JIT编译器
JIT编译器 是Java运行时环境(Java Runtime Environment)的一部分。尽管在Java虚拟机觃范中幵没有定丿JIT编译器,JIT的优劣不否已经成为衡量虚拟机性能的重要挃标乀一。它的任务是在Java应用运行时,将字节码(bytecode)编译成本地机器码(native machine code),从而提高Java应用的运行速度。class文件是平台无关的字...原创 2013-05-03 10:18:51 · 245 阅读 · 0 评论 -
Java垃圾回收调优
在Java中,通常通讯类型的服务器对GC(Garbage Collection)比较敏感。通常通讯服务器每秒需要处理大量进出的数据包,需要解析,分解成不同的业务逻辑对象并做相关的业务处理,这样会导致大量的临时对象被创建和回收。同时服务器如果需要同时保存用户状态的话,又会产生很多永久的对象,比如用户session。业务越复杂的应用往往用户session包含的引用对象就越多。这样在极端情况下会发生...原创 2015-09-18 00:18:30 · 75 阅读 · 0 评论 -
Java锁的种类以及辨析
锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA中常见的锁以及其特性,为大家答疑解惑。 1、自旋锁2、自旋锁的其他种类3、阻塞锁4、可重入锁5、读写锁6、互斥锁7、悲观锁...原创 2015-09-19 09:44:20 · 74 阅读 · 0 评论 -
《Java程序性能优化》-笔记
第一章:性能调优概述 1.最有可能成为系统瓶颈的计算资源: 网络操作、磁盘I/O、异常(异常的捕获和处理非常消耗资源)、数据库、锁竞争、CPU(计算性程序)、内存 2.根据“木桶原理”,必须对系统中表现最差的组件进行优化,而不是其它表现良好的。 3.提供系统性能应该尽力去降低串行化比重提高并行化比重,而不是一味的增加CPU数量。 4.调优层次: 设计调优(宏观):开发前的优化,...原创 2015-09-19 09:44:50 · 79 阅读 · 0 评论 -
JVM中锁优化简介
自旋锁互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性能带来了很大的压力。而在很多应用上,共享数据的锁定状态只会持续很短的一段时间。若实体机上有多个处理器,能让两个以上的线程同时并行执行,我们就可以让后面请求锁的那个线程原地自旋(不放弃CPU时间),看看持有锁的线程是否很快就会释放锁。为了让线程等待,我们只须让线程执行一个忙循环(...原创 2015-09-19 09:45:33 · 313 阅读 · 0 评论 -
JVM锁实现探究2:synchronized深探
这里我们来聊聊synchronized,以及wait(),notify()的实现原理。在深入介绍synchronized原理之前,先介绍两种不同的锁实现。阻塞锁我们平时说的锁都是通过阻塞线程来实现的:当出现锁竞争时,只有获得锁的线程能够继续执行,竞争失败的线程会由running状态进入blocking状态,并被登记在目标锁相关的一个等待队列中,当前一个线程退出临界区,释放锁后,会将...原创 2015-09-19 09:48:38 · 83 阅读 · 0 评论 -
Java SE1.6中的Synchronized Mark Word
引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。2 术语定义术语英文说明...原创 2015-09-19 09:49:03 · 151 阅读 · 0 评论 -
Java Reference引用 强引用 软引用 弱引用 虚引用
1,强引用:package com.myjava.reference;/** * ①强引用不会被垃圾回收器自动回收 * ②当内存空间不足时,Java虚拟机宁可抛出OutOfMemoryError错误,也不会随意回收强引用对象来解决内存不足问题 * @author Administrator * */public class TestStrongRefer...原创 2015-10-06 09:46:08 · 69 阅读 · 0 评论 -
深入理解Java虚拟机笔记---方法调用
方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。在程序运行时,进行方法调用是最普遍、最频繁的操作。在Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于直接引用)。这个特性给Java带来了更强大的动态扩展能力,...原创 2015-10-09 20:24:43 · 79 阅读 · 0 评论 -
JVM致命错误日志(hs_err_pid.log)分析
当jvm出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导致crash的根源,从而改善以保证系统稳定。当出现crash时,该文件默认会生成到工作目录下,然而可以通过jvm参数指定生成路径(JDK6中引入):?1-XX:ErrorFile=./hs_er...原创 2015-11-18 16:56:47 · 166 阅读 · 0 评论 -
JVM指令详解(上)
一、未归类系列A此系列暂未归类。指令码 助记符 说明0x00 nop 什么都不做0x01 aconst_null 将null推送至栈顶二、const系列该系列命令主要负责把简单的...原创 2015-12-09 11:19:15 · 88 阅读 · 0 评论 -
jvm 变量 内存分配
public class T { // 常量池中分配 String final private String a = "aa"; // 常量池中分配 final int ee = 22; // 堆中分配 int ff = 20; // 超过一定的范围 在常量池中 int ff2 = 200000; // 堆中分配 Integer i =...原创 2015-12-09 12:50:36 · 98 阅读 · 0 评论 -
sa-jdi.jar
sa-jdi.jar是HotSpot自带的底层调试支持,Serviceability Agent的实现。它的来龙去脉请参考2001年的一篇报告:http://static.usenix.org/event/jvm01/full_papers/russell/russell_html/ SA意义上的agent跟JVMTI/Java agent不是同一个层次上的。 现有的SA实现只支持“snapsh...原创 2015-12-22 11:53:25 · 905 阅读 · 0 评论 -
Java中堆内存和栈内存详解
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。堆内存用于存放由new创建的对象和数组。 在堆中分配的内存,由java虚拟机自动垃圾回收器来...原创 2015-12-22 15:20:11 · 75 阅读 · 0 评论 -
jdk6 vs jdk7 string intern 区别
package com.goods;class Test{ /** * jdk6 vs jdk7 string intern 区别 * 6:将字符串加入常量池.返回常量值。(不改变当前引用) * 7:将字符串加入常量池.返回常量值。(改变当前引用)1、判断常量池中是否有该值,没有的话将该字符串加入常量池,并返回常量值,2.常量池中有的话,就返回当前的内存地址...原创 2016-02-24 19:00:02 · 146 阅读 · 0 评论 -
JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...
前提概要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一种工具都有其自身的特点,用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测。接下来的两个专题分别会讲VisualVM的具体应用。 现实企业级Java...原创 2017-08-26 09:20:08 · 715 阅读 · 0 评论 -
开发者的自测利器-Hprof命令(寻找cpu热点)
测试代码: 1 public class HProfTest { 2 public void slowMethod() { 3 try { 4 Thread.sleep(1000); 5 } catch (Exception e) { 6 e.printStackTrace(...原创 2017-08-28 13:39:50 · 164 阅读 · 0 评论 -
HPROF: 一个Heap/CPU Profiling工具
HPROF: 一个Heap/CPU Profiling工具http://blog.csdn.net/ae86_fc/article/details/5960719J2SE中提供了一个简单的命令行工具来对java程序的cpu和heap进行 profiling,叫做HPROF。HPROF实际上是JVM中的一个native的库,它会在JVM启动的时候通过命令行参数来动态加载,并成为 J...原创 2017-08-28 13:40:35 · 146 阅读 · 0 评论 -
JVM垃圾回收算法 总结及汇总
先看一眼JVM虚拟机运行时的内存模型: 1.方法区 Perm(永久代、非堆)2.虚拟机栈3.本地方法栈 (Native方法)4.堆5.程序计数器 1 首先的问题是:jvm如何知道那些对象需要回收 ?目前两种标识算法、三种回收算法、两种清除算法、三种收集器引用计数法每个对象上都有一个引用计数,对象每被引用一次,引用计数器就+1...原创 2015-09-18 00:18:11 · 105 阅读 · 0 评论 -
垃圾收集器Serial 、Parallel、CMS、G1
这里介绍4个垃圾收集器,如果进行了错误的选择将会大大的影响程序的性能。 时至今日,仍然有两个事情困扰着开发人员:垃圾收集(GC)和了解异性(程序猿的悲鸣),后者我确实不太了解,因为我被前者搞的无暇顾及怎么了解异性,特别是当知道在JAVA8中对这一区域有了很大的改进和提升还有移除了PermGen和以一些新的令人兴奋的调优。 当我们谈到垃圾回收时,我们绝大多数都知道利用它的概...原创 2015-09-18 00:17:41 · 178 阅读 · 0 评论 -
一行命令获取当前JVM所有可设置的参数以及当前默认值
一行命令获取当前JVM所有可设置的参数以及当前默认值java -XX:+PrintFlagsInitial >>1.txt然后查看这个1.txt即可[plain] view plaincopy uintx AdaptivePermSizeWeight = 20 {product...原创 2015-09-18 00:16:51 · 296 阅读 · 0 评论 -
Java 中的垃圾回收策略
垃圾回收需要解决的问题谁需要被回收什么时候回收怎么回收谁需要被回收如果一个对象再也不会被用到,就可以回收它了,所以关键在于如何知道一个对象再也不被使用了。引用计数当一个对象被引用时,引用计数加1,当引用失效时,计数减1。简单直观,但会出现循环引用问题。a.tb = bb.ta = a即使 a 和 b 再也不会被用到了,但他们之间互相引用...原创 2015-07-25 22:25:38 · 65 阅读 · 0 评论 -
JVM性能调优
最近因项目存在内存泄漏,故进行大规模的JVM性能调优 , 现把经验做一记录。一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为:New(年轻代)Tenured(年老代)永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟...原创 2015-07-26 21:07:35 · 62 阅读 · 0 评论 -
JAVA 垃圾收集器与内存分配策略
引言 垃圾收集技术并不是Java语言首创的,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。垃圾收集技术需要考虑的三个问题是:哪些内存需要回收什么时候回收如何回收 http://my.oschina.net/jiangmitiao/blog/470426 中讲到java内存运行时区域的分布,其中程序计数...原创 2015-07-26 21:08:29 · 111 阅读 · 0 评论 -
Java final关键字详解
在java中,final关键字可以有如下的用处: final关键字可以被加到类的声明中,final类是不允许继承的; final关键字可以被加到方法声明中,final方法是不允许重写的(override),这个效果同私有方法一样; final关键字可以被家到属性或者变量的声明中,final属性或者变量一旦赋值之后就不允许再发生变化。对于基本类型(primitive type),比如int、do...原创 2016-05-25 23:34:22 · 126 阅读 · 0 评论 -
java.lang.OutOfMemoryError:GC overhead limit exceeded
我遇到这样的问题,本地部署时抛出异常java.lang.OutOfMemoryError:GC overhead limit exceeded导致服务起不来,查看日志发现加载了太多资源到内存,本地的性能也不好,gc时间消耗的较多。解决这种问题两种方法是,增加参数,-XX:-UseGCOverheadLimit,关闭这个特性,同时增加heap大小,-Xmx1024m。坑填了,but why?O...原创 2015-08-18 00:13:46 · 168 阅读 · 0 评论 -
JVM调优:GC 参数
参考:《Memory Management in the Java HotSpot™ Virtual Machine 》《Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning 》《Garbage Collector Ergonomics 》一、 理论基础参见《[Java性能剖析]Sun JV...原创 2015-08-18 09:38:53 · 81 阅读 · 0 评论 -
JVM系列三:JVM参数设置、分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配...原创 2015-08-18 09:39:28 · 83 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集器
Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下:图中如果两个垃圾收集器直接有连线,则表明这两个垃圾收集器可以搭配使用。(1).Serial垃圾收集器:Serial是最基本、历史最...原创 2015-08-19 09:42:57 · 80 阅读 · 0 评论 -
JVM调优总结
一、相关概念基本回收算法引用计数(Reference Counting)比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。标记-清除(Mark-Sweep)此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。...原创 2015-08-19 09:43:23 · 64 阅读 · 0 评论 -
详解Java GC的工作原理
JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆、栈、本地方法栈、方法区等部分组成,另外JVM分别对新生代和旧生代采用不同的垃圾回收机制。首先来看一下JVM内存结构,它是由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示。JVM学习笔记 JVM内存管理和JVM垃圾回收JVM内存组成结构JVM内存结构由堆、栈、本地方法栈、方法区等部分组成,结构图如下所...原创 2015-08-19 09:43:40 · 71 阅读 · 0 评论 -
Java内存与垃圾回收调优
要了解Java垃圾收集机制,先理解JVM内存模式是非常重要的。今天我们将会了解JVM内存的各个部分、如何监控以及垃圾收集调优。Java(JVM)内存模型正如你从上面的图片看到的,JVM内存被分成多个独立的部分。广泛地说,JVM堆内存被分为两部分——年轻代(Young Generation)和老年代(Old Generation)。年轻代年轻代是所有新对象产生的地方。当年轻代...原创 2015-08-19 09:45:19 · 69 阅读 · 0 评论 -
JVM 垃圾回收 Minor gc vs Major gc vs Full gc
原文: Minor GC vs Major GC vs Full GC在Plumbr进行GC暂停检测功能的工作时, 我不得不阅读大量与此相关的文章,书籍和报告。在研究过程中, 对于Minor, Major和Full GC时间我一再的困惑,这也就导致本博文的产生, 希望我能理清我的一些困惑。本文期望读者熟悉JVM内建的垃圾回收的基本原理。JVM的内存堆对 Eden, Survivor 和 T...原创 2015-08-20 09:42:48 · 443 阅读 · 0 评论 -
深入JVM系列(二)之GC机制、收集器与GC调优
一、回顾JVM内存分配 需要了解更多内存模式与内存分配的,请看 深入JVM系列(一)之内存模型与内存分配 1.1、内存分配:1、对象优先在EDEN分配2、大对象直接进入老年代 3、长期存活的对象将进入老年代 4、适龄对象也可能进入老年代:动态对象年龄判断动态对象年龄判断:虚拟机并不总是要求对象的年龄必须达到MaxTenuringThreshold才能晋升到老年...原创 2015-08-20 09:43:18 · 106 阅读 · 0 评论 -
面向GC的Java编程
Java程序员在编码过程中通常不需要考虑内存问题,JVM经过高度优化的GC机制大部分情况下都能够很好地处理堆(Heap)的清理问题。以至于许多Java程序员认为,我只需要关心何时创建对象,而回收对象,就交给GC来做吧!甚至有人说,如果在编程过程中频繁考虑内存问题,是一种退化,这些事情应该交给编译器,交给虚拟机来解决。这话其实也没有太大问题,的确,大部分场景下关心内存、GC的问题,显得有点“...原创 2015-08-20 09:43:37 · 59 阅读 · 0 评论 -
IO系统性能之一:衡量性能的几个指标
几个基本的概念 读写IO(Read/Write IO)操作 单个IO操作 随机访问(Random Access)与连续访问(Sequential Access) 顺序IO模式(Queue Mode)/并发IO模式(Burst Mode) 单个IO的大小(IO Chunk Size) IOPS(IO per Second) IOPS计算公式...原创 2015-08-21 09:44:18 · 112 阅读 · 0 评论 -
IO系统性能之二:缓存和RAID如何提高IO
高速缓存(Cache) 缓存数据 预读 回写 RAID(Redundant Array Of Inexpensive Disks) RAID0 RAID1 RAID5 RAID6 RAID10 四个性能指标的变化 IO响应时间(IO Response Time) IOPS 传输速度(Transfer R...原创 2015-08-21 09:44:51 · 144 阅读 · 0 评论 -
JVM的重排序
重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段。重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境。在并发程序中,程序员会特别关注不同进程或线程之间的数据同步,特别是多个线程同时修改同一变量时,必须采取可靠的同步或其它措施保障数据被正确地修改,这里的一条重要原则是:不要假设指令执行的顺序,你无法预知不同线程之间的指令会以何种顺序执...原创 2015-09-17 00:08:37 · 72 阅读 · 0 评论 -
JVM性能调优监控工具专题二:VisualVM基本篇之监控JVM内存,CPU,线程
前言: 上一个专题中讲述了JVM中自带的各种性能测试的小工具:包括jps,jstatck,jmap,jhat,jsats,hprofhttp://josh-persistence.iteye.com/blog/2161848,根据项目应用中的具体情况,如果想要查看Java进程中线程堆栈的信息,可以选择jstack,如果要查看堆内存,可以使用jmap导出并使用jhat来进行分...原创 2017-08-28 14:08:22 · 393 阅读 · 0 评论