
jvm
varyall
这个作者很懒,什么都没留下…
展开
-
JVM性能调优实践——G1 垃圾收集器分析、调优篇
前言关于G1 GC以及其他垃圾收集器的介绍可以参考前一篇JVM性能调优实践——G1 垃圾收集器介绍篇。了解了G1垃圾收集器的运行机制之后,就可以针对一些GC相关参数来调整内存分配以及运行策略。下文的调优主要针对G1垃圾收集器进行介绍,以及会分析一下G1 GC的日志格式。G1 GC日志分析在执行具体的调优任务前,需要结合GC日志以及应用本身的特点。打印详细GClog,需要添加如下启动参数:-XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateSta转载 2020-10-16 22:56:02 · 1460 阅读 · 1 评论 -
一次 Young GC 的优化实践
这个 GC 案例比较有意思,排查问题有点像侦探断案,先分析各种可能性,再按照获得的一个个证据,去排除各种可能性、然后定位原因,最终解决问题。问题某同学在微信上问我,有没有办法排查 YoungGC 效率低的问题?听到这话,我也是不知从何说起,就让他说下具体情况。 具体情况是: 有个服务在没有 RPC 调用时,YoungGC 时间大约在 4-5ms,但是有 RPC 调用时,YoungGC 的耗时在 40ms 以上,几乎没有什么对象晋升,频率 4-5 秒一次。GC 日志截图如下。后来他为了排查问题.转载 2020-05-19 00:06:39 · 810 阅读 · 0 评论 -
什么是JIT
一些其他解释的网站:http://www.sohu.com/a/169704040_4640841、动态编译(dynamic compilation)指的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。2、JIT编译(just-in-timecompilation)狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”。JIT编译是动态编译的一种特例。JIT编译一词后..转载 2020-05-09 20:33:55 · 715 阅读 · 0 评论 -
JVM 默认参数
uintx AdaptiveSizeDecrementScaleFactor = 4 {product} uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product} ...转载 2020-05-07 16:21:09 · 739 阅读 · 0 评论 -
垃圾优先型垃圾回收器调优
了解如何针对评估、分析和性能来调整和调优 G1 GC。2013 年 8 月发布垃圾优先型垃圾回收器 (G1 GC)是适用于 Java HotSpot VM 的低暂停、服务器风格的分代式垃圾回收器。G1 GC 使用并发和并行阶段实现其目标暂停时间,并保持良好的吞吐量。当 G1 GC 确定有必要进行垃圾回收时,它会先收集存活数据最少的区域(垃圾优先)。垃圾回收器 (GC) 是一个内存管理...转载 2020-05-06 16:48:31 · 370 阅读 · 0 评论 -
jvm:优化-栈上分配
转载请注明博客来处:https://blog.youkuaiyun.com/qq_42709262/article/details/84800251几乎所有的对象实例,都是在堆上分配的,但存在部分例外,栈上分配就是这种除了堆上分配的例外。1.栈上分配指的是什么?①将线程中的私有对象打散(即图中user),让它在栈上分配,而不是在堆上分配比如方法中的user引用,就是方法的局部变量,n...转载 2020-05-06 13:58:54 · 504 阅读 · 0 评论 -
关于栈上分配和TLAB的理解
引言我们知道,一般在java程序中,new的对象是分配在堆空间中的,但是实际的情况是,大部分的new对象会进入堆空间中,而并非是全部的对象,还有另外两个地方可以存储new的对象,我们称之为栈上分配以及TLAB栈上分配为什么需要栈上分配在我们的应用程序中,其实有很多的对象的作用域都不会逃逸出方法外,也就是说该对象的生命周期会随着方法的调用开始而开始,方法的调用结束而结束,对于这种对象...转载 2020-05-06 13:44:52 · 958 阅读 · 0 评论 -
java new一个对象的过程中发生了什么
java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载。加载并初始化类完成后,再进行对象的创建工作。我们先假设是第一次使用该类,这样的话new一个对象就可以分为两个过程:加载并初始化类和创建对象。一、类加载过程(第一次使用该类) java是使用双亲委派模型来进行类的加载的,所以在描述类加载过程前,我们先看一下它的工作过程:...转载 2020-04-23 18:15:15 · 326 阅读 · 0 评论 -
Java new一个对象的过程
1,首先到常量池中找类的带路径全名,然后检查对应的字节码是否已被加载,解析,验证,初始化,如果没有先执行类加载过程(class.forname())。2,类加载过程完成后,虚拟机会为对象分配内存。分配内存有两种方式,根据使用的垃圾收集器的不同使用不同的分配机制。(1)指针碰撞,当虚拟机使用复制算法或标记整理算法实现的垃圾收集器时,内存区域都是规整的,这时候使用指针碰撞分配内存,用过的内存放...转载 2020-04-23 18:13:48 · 672 阅读 · 0 评论 -
Java中new一个对象是一个怎样的过程?JVM中发生了什么?
Java中new一个对象的步骤:1.当虚拟机遇到一条new指令时候,首先去检查这个指令的参数是否能在常量池中能否定位到一个类的符号引用(即类的带路径全名),并且检查这个符号引用代表的类是否已被加载、解析和初始化过,即验证是否是第一次使用该类。如果没有(不是第一次使用),那必须先执行相应的类加载过程(class.forname())。2.在类加载检查通过后,接下来虚拟机将为新生的对...转载 2020-04-23 18:12:02 · 840 阅读 · 0 评论 -
Java中new一个对象是一个怎样的过程?JVM中发生了什么?
Java中new一个对象的步骤:1.当虚拟机遇到一条new指令时候,首先去检查这个指令的参数是否能在常量池中能否定位到一个类的符号引用(即类的带路径全名),并且检查这个符号引用代表的类是否已被加载、解析和初始化过,即验证是否是第一次使用该类。如果没有(不是第一次使用),那必须先执行相应的类加载过程(class.forname())。2.在类加载检查通过后,接下来虚拟机将为新生的对...转载 2020-04-23 18:11:31 · 3607 阅读 · 0 评论 -
Monitoring Tomcat – MBean Metrics Part I
In this blog post I will show you how to use the JavaApp to monitor application servers like Tomcat, JBoss and FUSE.We’ll start off with Tomcat, since it is fairly easy to set up.Before we get star...转载 2020-04-10 22:55:32 · 522 阅读 · 0 评论 -
JMX获取tomcat监控信息
最近用JAVA写了个获取tomcat信息资源的代码,随便保存一下。大致的步骤全在这了,可以获取到任何想要的指标:首先可以用JDK提供的工具jconsole来供我们查看,这个在服务端配置下catalina.bat文件,加入以下内容:Linux下要监控的java进程需要配置参数:-Djava.rmi.server.hostname=192.168.1.126 # Lin...转载 2020-04-10 22:11:28 · 949 阅读 · 0 评论 -
Zabbix使用jmx监控tomcat
前提:编译zabbix server时需要提供java支持,即添加--enable-java该选项。1、zabbix server段配置java支持。此处编译安装zabbix的目录为/usr/local/zabbix。编辑/usr/local/zabbix/sbin/zabbix_java/settings.sh,修改完成之后内容如下: LISTEN_IP="0.0.0.0" ...转载 2020-04-10 22:10:38 · 319 阅读 · 0 评论 -
Monitoring and Managing Tomcat
Table of ContentsIntroduction Enabling JMX Remote Manage Tomcat with JMX remote Ant Tasks JMXAccessorOpenTask - JMX open connection task JMXAccessorGetTask: get attribute value Ant task JMXAcce...转载 2020-04-10 22:08:45 · 301 阅读 · 0 评论 -
三十一、Springboot整合JMX(监控)
(一)JMX规范和应用场景介绍 参见Java分布式应用学习笔记08JMX规范与常用的监控场景(二)Springboot整合JMX1、暴露MBean@Component@ManagedResource( objectName = "org.pc.jmx:type=SimpleBean", description = "这里是描述")public c...转载 2020-04-10 19:36:06 · 924 阅读 · 0 评论 -
什么是MBean?什么是JMX架构?
# 什么是MBean- MBean就是一种规范的JavaBean,通过集成和实现一套标准的Bean接口,这种叫MBean,Mbean注册到MBeanServer中。之后将被MBeanServer中注册过的Adapter(比如渲染为HTML的HtmlAdapter)渲染为直观的页面将MBean的属性和方法展示给用户。MBean -> MBeanServer -> HtmlAda...转载 2020-04-10 14:51:19 · 1412 阅读 · 0 评论 -
HikariCP MBean (JMX) Monitoring and Management
The JMX MBean for HikariCP exposes:Idle Connection count Active Connections (in use) Total Connections The number of threads waiting for a connection???? In order to use JMX, you must set the pool ...转载 2020-04-09 10:17:47 · 1111 阅读 · 0 评论 -
java.lang.manament API 简介
java.lang.management包提供管理接口用于监控以及管理 JVM 以及 Java 运行时的其他组件。我们开发的 JVM Agent 就是通过这个包提供的接口,收集到 JVM 中包括内存、GC、线程在内的信息。java.lang.management包提供了以下的接口:BufferPoolMXBean:bufferPool 管理接口,例如:直接缓冲池、映射缓冲池 ClassL...原创 2020-03-21 21:53:01 · 473 阅读 · 0 评论 -
JVM中即时编译器JIT与解释器并存-深入理解jvm
一.学习目标1.了解解释器与编译器的概念与作用。2.知道jvm中三种执行模式。3.了解热点代码。二.解释器模式与编译器模式以及混合模式 字节码文件通过类装载器装载,被分配被分配到JVM的运行时数据区,然后会被执行引擎执行。执行引擎以指令为单位读取Java字节码。它就像一个CPU一样,一条一条地执行机器指令。每个字节码指令都由一个1字节的操作码和附加的操作数组成。执行引擎取得一...转载 2020-01-27 13:26:56 · 752 阅读 · 0 评论 -
java堆外内存泄漏
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.youkuaiyun.com/f529352479/article/details/51908655问题描述最近有个系统在做压力测试,环境配置:4核CPU 8g内存 jdk1.6.0_25,jvm配置-server -Xms2048m -Xmx2048m...转载 2019-11-06 11:24:37 · 616 阅读 · 0 评论 -
java面试:你真的知道metaspace??
一些看过Java8以后的垃圾回收日志的同学一般会对这么一句话感到很困惑:Metaspace used 2425K, capacity 4498K, committed 4864K, reserved 1056768Kclass space used 262K, capacity 386K, committed 512K, reserved 1048576K第一个问题是,按照一般的理解...转载 2019-10-27 23:13:15 · 672 阅读 · 0 评论 -
JVM 默认Xss大小
[abin@lee ~]$ java -XX:+PrintFlagsFinal -version | grep ThreadStackSize intx CompilerThreadStackSize = 0 {pd product} intx ThreadStackSize原创 2015-11-04 00:14:52 · 15355 阅读 · 0 评论 -
Java虚拟机学习 - 体系结构 内存模型
一:Java技术体系模块图二:JVM内存区域模型1.方法区也称"永久代” 、“非堆”, 它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小。运行时常量池:是方法区转载 2016-12-17 23:55:19 · 277 阅读 · 0 评论 -
JVM 垃圾回收算法 .
在说垃圾回收算法之前,先谈谈JVM怎样确定哪些对象是“垃圾”。1.引用计数器算法:引用计数器算法是给每个对象设置一个计数器,当有地方引用这个对象的时候,计数器+1,当引用失效的时候,计数器-1,当计数器为0的时候,JVM就认为对象不再被使用,是“垃圾”了。引用计数器实现简单,效率高;但是不能解决循环引用问问题(A对象引用B对象,B对象又引用A对象,但是A,B对象已不被任何其转载 2016-12-17 23:56:01 · 387 阅读 · 0 评论 -
JVM调优总结(三)-基本垃圾回收算法
可以从不同的的角度去划分垃圾回收算法:按照基本回收策略分引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 标记-清除(Mark-Sweep): 此算法执行分两阶转载 2016-12-17 23:58:22 · 254 阅读 · 0 评论 -
JVM调优总结(九)-新一代的垃圾回收算法
垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在几百甚至几十毫秒以内,如果分代垃圾回收方式要达到这个指标,只能把最大堆的设置限制在一个转载 2016-12-18 00:03:02 · 298 阅读 · 0 评论 -
JVM原理和优化
JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境.1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例 4.调用JNIEnv实例装载并处理class类。 在我们运行和调试Java程序的时候,经常会提到一个JVM的概念.JVM是Java程序运行的转载 2017-02-04 14:19:27 · 410 阅读 · 0 评论 -
java+内存分配及变量存储位置的区别
Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象)转载 2017-12-19 19:32:30 · 533 阅读 · 0 评论 -
String常量池问题的几个例子
String常量池问题的几个例子示例1:Java代码 String s0="kvill"; String s1="kvill"; String s2="kv" + "ill"; System.out.println( s0==s1 ); System.out.println( s0==s2 ); 结果为: tru转载 2017-12-19 19:31:36 · 355 阅读 · 0 评论 -
JVM —— Object Header(对象头)
HotSpot 虚拟机的对象头包括两部分信息:Mark Word(标记字段)和 Klass Pointer(类型指针) 1. Mark Word 用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等等。JVM 对象头一般占用两个机器码,在 32-bit JVM 上占用 64bit, 在 64-bit转载 2017-12-12 18:20:25 · 905 阅读 · 0 评论 -
聊聊JVM(一)相对全面的GC总结
最近时间比较紧张,要写的东西也有很多,只能想到一点写一点。关于GC,网上的资料太多,之前对一个系统调优的时候又回顾了一下,找了几篇广泛流传的资料,大部分都是大同小异,这里总个总结,希望能够做个相对的全集,并写出一些新的点,比如Card Marking(卡片标记)等。首先是大家都要提到的GC的基础算法:标记清除,标记整理,复制,分代。这些算法的第一步都是做的一件事: 标记(Mar转载 2017-12-21 19:28:48 · 322 阅读 · 0 评论 -
java中方法不要写太长的真正原因-DontCompileHugeMethods
java中一般建议一个方法不要写的过长,不方便维护和阅读是其中的一个原因,但是其真正性能的原因大家知道吗? 我们知道,JVM一开始是以解释方式执行字节码的。当这段代码被执行的次数足够多以后,它会被动态优化并编译成机器码执行,执行速度会大大加快,这就是所谓的JIT编译。 hotsopt源码中有一句if (DontCompileHugeMe转载 2017-12-14 17:32:27 · 1934 阅读 · 0 评论 -
Java性能调优笔记
Java性能调优笔记调优步骤:衡量系统现状、设定调优目标、寻找性能瓶颈、性能调优、衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈)、性能调优结束。寻找性能瓶颈性能瓶颈的表象:资源消耗过多、外部处理系统的性能不足、资源消耗不多但程序的响应速度却仍达不到要求。资源消耗:CPU、文件IO、网络IO、内存。外部处理系统的性能不足:所调用的其他系统提供的功能或数据库转载 2017-12-14 18:25:03 · 335 阅读 · 0 评论 -
栈帧、局部变量表、操作数栈
1.定义 栈帧(stack frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。 每一个方法从调用开始到执行完成的过程,就对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。 对于执行引擎来说,活动线程中,只有栈顶的栈帧是有效的,称为当前栈帧,这个栈帧所关联...转载 2018-04-09 23:54:42 · 266 阅读 · 0 评论 -
Classloader的双亲委托机制
JVM自带的ClassLoader类JDK中提供了三个ClassLoader,根据层级从高到低为:Bootstrap ClassLoader,主要加载JVM自身工作需要的类。Extension ClassLoader,主要加载%JAVA_HOME%\lib\ext目录下的库类。Application ClassLoader,主要加载Classpath指定的库类,一般情况下这是程序中的默认类加载器,...转载 2018-04-17 21:08:09 · 1219 阅读 · 0 评论 -
JVM CMS GC算法解析
CMS,全称Concurrent Low Pause Collector,是jdk1.4后期版本开始引入的新gc算法,在jdk5和jdk6中得到了进一步改进,它的主要适合场景是对响应时间的重要性需求 大于对吞吐量的要求,能够承受垃圾回收线程和应用线程共享处理器资源,并且应用中存在比较多的长生命周期的对象的应用。CMS是用于对Old+Perm回收,采用CMS时候,新生代必须使用Serial GC或者...转载 2018-04-21 23:33:11 · 342 阅读 · 0 评论 -
一次CMS GC问题排查过程(理解原理+读懂GC日志)
这个是之前处理过的一个线上问题,处理过程断断续续,经历了两周多的时间,中间各种尝试,总结如下。这篇文章分三部分:1、问题的场景和处理过程;2、GC的一些理论东西;3、看懂GC的日志先说一下问题吧问题场景:线上机器在半夜会推送一个700M左右的数据,这个时候有个数据置换的过程,也就是说有700M*2的数据在heap区域中,线上系统超时比较多,导致了很严重(严重程度就不说了)的问题。问题原因:看日志,...转载 2018-04-18 12:38:09 · 218 阅读 · 0 评论 -
jvm内存很大,cms报错concurrent
最近上线一个定时任务:根据条件查询数据,然后生成excel,当成邮件中的附件发送给指定用户。在这个定时任务执行的时候,从gc的日志部分如下:2016-10-12T15:10:56.017+0800: 2130.042: [GC2016-10-12T15:10:56.017+0800: 2130.042: [ParNew: 605431K->65838K(613440K), 0.0397940...转载 2018-04-18 13:01:53 · 421 阅读 · 0 评论 -
JVM调优——之CMS 常见参数解析
最近在学习使用CMS这个GC,这里记录下常用的参数。1. UseCMSCompactAtFullCollection 与 CMSFullGCsBeforeCompaction 有一点需要注意的是:CMS并发GC不是“full GC”。HotSpot VM里对concurrent collection和full collection有明确的区分。所有带有“FullCollection”字样...转载 2018-04-22 17:41:17 · 3439 阅读 · 0 评论