JVM
L-Zhang
这个作者很懒,什么都没留下…
展开
-
JVM内存对象分配率和提升率
对JVM关注最多的就是其内存管理、垃圾回收,本文从java内存对象在JVM中的分配率和提升率来分析对程序性能的影响。主要信息来自网络。高分配速率(High Allocation Rate)分配速率(Allocation rate)表示单位时间内分配的内存量。通常使用 MB/sec作为单位, 也可以使用PB/year 等。分配速率过高就会严重影响程序的性能。在JVM中会导致巨原创 2017-08-18 10:16:16 · 1845 阅读 · 0 评论 -
JVM(7):JVM调优-工具篇
16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化。工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题,长长可以到达事半功倍的效果来。jvm监控分析转载 2017-08-14 10:23:22 · 893 阅读 · 0 评论 -
JVM(8):JVM知识点总览-高级Java工程师面试必备
在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功。对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后,内功就更主要了。一个内功低的人招式在奇妙也打不过一个内功高的人。比如,你剑法再厉害,一剑刺过来,别人一掌打断你的剑,你还怎么使剑法,你一掌打到一个武功高的人身上,那人没什么事,却把你震伤了,转载 2017-08-14 10:24:09 · 1055 阅读 · 0 评论 -
G1垃圾收集器入门
G1垃圾收集器入门说明concurrent: 并发, 多个线程协同做同一件事情(有状态)parallel: 并行, 多个线程各做各的事情(互相间无共享状态)参考: What’s the difference between concurrency and parallelism概述目的本文介绍如何使用G1,及在 Hotspot J转载 2017-08-14 14:25:30 · 1059 阅读 · 0 评论 -
JVM之几种垃圾收集器简单介绍
本文中的垃圾收集器研究背景为:HotSpot+JDK1.7一、垃圾收集器概述如上图所示,垃圾回收算法一共有7个,3个属于年轻代、三个属于年老代,G1属于横跨年轻代和年老代的算法。JVM会从年轻代和年老代各选出一个算法进行组合,连线表示哪些算法可以组合使用 二、各个垃圾收集器说明1、Serial(年轻代)年轻代收集器,可以和Serial Old、C转载 2017-08-14 14:30:25 · 932 阅读 · 0 评论 -
快速解读GC日志
本文是 Plumbr 发行的 Java垃圾收集指南 的部分内容。文中将介绍GC日志的输出格式, 以及如何解读GC日志, 从中提取有用的信息。我们通过 -XX:+UseSerialGC 选项,指定JVM使用串行垃圾收集器, 并使用下面的启动参数让 JVM 打印出详细的GC日志:-XX:+PrintGCDetails-XX:+PrintGCDateStamps-XX:+PrintG转载 2017-08-14 15:10:37 · 882 阅读 · 0 评论 -
GC性能优化-参考手册翻译
共7篇博文,翻译的相当不错,英文地址:https://plumbr.eu/java-garbage-collection-handbook1. 垃圾收集简介 - GC参考手册顾名思义,垃圾收集(Garbage Collection)的意思就是 —— 找到垃圾并进行清理。但现有的垃圾收集实现却恰恰相反: 垃圾收集器跟踪所有正在使用的对象,并把其余部分当做垃圾。记住这一原创 2017-08-14 16:51:58 · 1030 阅读 · 0 评论 -
JVM调优定位最耗cpu的线程
JVM调优定位最耗cpu的线程 jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有 ps、top、printf、jstack、grep。第一步先找出Java进程ID可以通过 jps 或 ps -ef|grep java找到 java进程; [ro原创 2017-09-08 10:39:12 · 1382 阅读 · 0 评论 -
JVM堆栈跟踪之Jstack命令
jstack是java虚拟机自带的一种堆栈跟踪工具。功能jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线转载 2017-09-08 10:40:48 · 1674 阅读 · 0 评论 -
OOM异常解析
JVM对象访问解析对象访问过程的内存情况?123publicvoid function(){ Object obj =new Object();}function方法被执行的时候,JVM在JVM栈中为function创建一个栈帧,用于存放function在运行过程中的一些信息。Ob转载 2017-08-31 10:35:25 · 777 阅读 · 0 评论 -
教你如何成为Java的OOM Killer
前言虽然事隔半年,当时排查线上OOM事故的过程记忆犹新,每一个步骤都历历在目,感谢业务组、系统部、压测组、监控与应急部对架构组的强力支持,得以让这个Java内存问题水落石出,经过半年多的全面的应用日志切割方式的改造,现在基本没有OOM的问题了,线上服务运行非常健康,对可用性的保障起到了很大的作用,如果你在经历OOM,读了这个文章会有很大的启发。Become OOM Killer我们都知转载 2017-08-31 10:38:16 · 1163 阅读 · 0 评论 -
java内存泄漏的定位与分析
1、为什么会发生内存泄漏Java如何检测内在泄漏呢?我们需要一些工具进行检测,并发现内存泄漏问题,不然很容易发生down机问题。编写java程序最为方便的地方就是我们不需要管理内存的分配和释放,一切由jvm来进行处理,当java对象不再被应用时,等到堆内存不够用时,jvm会进行垃圾回收,清除这些对象占用的堆内存空间,如果对象一直被应用,jvm无法对其进行回收,创建新的对象时,无法从Heap...转载 2018-09-10 09:56:04 · 458 阅读 · 0 评论 -
JVM(6):JVM调优-从eclipse开始
概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配、回收的情况来调整各区域内存比例或者gc回收的策略;更深一层就是根据dump出来的内存结构和线程栈来分析代码中不合理的地方给予改进。eclipse优化主要涉及的是前者,通过gc日志来分析。本文主要是通过分析eclipse gc日志为例来示例如何根据gc日志来分析jvm内存而进行调优,像根据关闭eclipse启动项转载 2017-08-13 16:54:13 · 803 阅读 · 0 评论 -
JVM(5):tomcat性能调优和性能监控(visualvm)
tomcat服务器优化1、JDK内存优化 根据服务器物理内容情况配置相关参数优化tomcat性能。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。 Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大.Tomcat默认可以使用的内存为128MB,W转载 2017-08-13 16:53:00 · 772 阅读 · 0 评论 -
Java 类加载体系与ContextClassLoader
Java是非常简单精巧的语言,背后的基本原来也很简单,总的说来有两点:1 . JVM的内存管理,理解了这个,有关对象的问题都能解决。比如线程安全问题,内存泄露问题等。2.JVM的类加载体系,理解了这个,有关jar包的配置问题,包括各种appServer的配置,应用的发布问题都能解决。 有关JVM的内存管理,只要理解了以上的图,基本上就能理解得八九不离十。本文档主要讲解JVM转载 2017-07-28 14:36:47 · 1454 阅读 · 0 评论 -
ClassLoader解惑
ClassLoader解惑<div title="MDH:PGRpdj4jIOS4gOOAgeS7gOS5iOaYr0NsYXNzbG9hZGVyPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A75LiA5LiqSmF2Yeeoi+W6j+imgeaDs+i/kOihjOi1t+adpe+8jOmmluWFiOmcgOimgee7j+i/h+e8luivkeeUn转载 2017-07-28 11:52:47 · 1812 阅读 · 0 评论 -
配置Java虚拟机内存大小
配置Java虚拟机内存大小java虚拟机可使用的最大内存是有限制的,缺省值通常为64MB或128MB。如果一个应用程序为了提高性能而把数据加载内存中而占用较大的内存,比如超过了默认的最大值128MB,需要加大java虚拟机可使用的最大内存,否则会出现Out of Memory(系统内存不足)的异常。启动java时,需要使用如下两个参数: -Xms java虚拟机初始化时使用的内存大小原创 2017-07-01 16:04:06 · 3164 阅读 · 0 评论 -
Java启动命令大观
Java启动命令是所有java应用程序的入口,通过它来启动Java运行时环境,并加载相关的class。不过由于IDE的盛行,我们Java程序员中的大多数并不是非常的了解Java启动命令。本文希望做一个Java启动命令的汇总,和各位同道分享,也便于日后作为自己的参考。Java启动命令语法Java启动命令有两个,java以及javaw,它们的唯一区别是javaw不会启动一个控制台窗口(启动失败的时候会转载 2017-07-01 16:04:09 · 2809 阅读 · 0 评论 -
Java内存分配浅析1
本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。进入正题前首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所以在学习J转载 2017-07-01 15:54:07 · 2475 阅读 · 0 评论 -
程序员必备利器——Java程序性能分析工具Java VisualVM(Visual GC)
程序员必备利器——Java程序性能分析工具Java VisualVM(Visual GC)VisualVM 是一款免费的\集成了多个JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。在内存分析上转载 2017-08-13 16:21:15 · 1211 阅读 · 0 评论 -
JVM调优工具
jpsJVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。jstatjstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。jmapjmap(JVM Memory Map)命令用于原创 2017-08-13 16:33:46 · 871 阅读 · 0 评论 -
JVM(1):Java 类的加载机制
1、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被“首次主转载 2017-08-13 16:44:05 · 848 阅读 · 0 评论 -
JVM(2):JVM内存结构
所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问题就会变的非常常见,了解JVM内存也是为了服务器出现性能问题的时候可以快速的了解那块的内存区域出现问题,以便于快速的解决生产故障。先看一张图,这张图能很清晰的说明JVM内存结构布局。J转载 2017-08-13 16:46:32 · 729 阅读 · 0 评论 -
JVM(3):Java GC算法 垃圾收集器
概述垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。jvm 中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和转载 2017-08-13 16:48:31 · 821 阅读 · 0 评论 -
JVM(4):Jvm调优-命令篇
运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,另一方面喜欢装X的我们,总喜欢在出现问题的时候在终端输入一些命令来解决。所有的工具几乎都是依赖于jdk的接口和底层的这些命令,研转载 2017-08-13 16:51:51 · 834 阅读 · 0 评论 -
getClassLoader()和getContextClassLoader()的区别
区别一: getClassLoader()是当前类加载器,而getContextClassLoader是当前线程的类加载器 区别二: getClassLoader是使用双亲委派模型来加载类的,而getContextClassLoader就是为了避开双亲委派模型的加载方式的,也就是说它不是用这种方式来加载类当前类加载器加载和定义当前方法所...转载 2019-02-13 17:46:59 · 7319 阅读 · 2 评论