
jvm
xiaoliuliu2050
这个作者很懒,什么都没留下…
展开
-
spring通过annotation注解注册MBean到JMX实现监控java运行状态
代码下载地址:http://www.zuidaima.com/share/1828116267568128.htm原文:spring通过annotation注解注册MBean到JMX实现监控java运行状态1、前言JMX管理及使用日趋成熟。spring对bean的管理功能也很强大,通过annotation把某些方法暴露成MBean,然后通过JMX远程管理,在某些场景下会带来意想不到的效...转载 2019-10-30 18:43:08 · 456 阅读 · 0 评论 -
java自带可视化性能监控工具jconsole
1. 前言想验证你对 jvm 配的一些调优参数(比如 Xms、Xmx 等)有没有起作用吗? 想不想实时监控你自定义的线程池的在实际运行时的线程个数、有没有死锁? 应用出现 java.lang.OutOfMemoryError: Java heap space,你知道需要去调整 Xms、Xmx。想不想实时监控你的 Java 应用的堆内存使用情况,并根据峰值等数据设置最适合你的 Xms、Xmx...转载 2019-10-30 17:34:06 · 198 阅读 · 0 评论 -
java 监控之JMX规范1
1.JMX规范JMX是“Java管理扩展的”的缩写,它和其他JavaEE类似也是曾经的Sun提出的一种规范(规约),从名字上可以看出主要是负责系统管理。是一个为系统加入或者说扩展成有管理功能的规约,只要按照这套规约行事,您的系统,某些某块就具备被其他工具(例如JConsole)管理的能力。换句话说就是可以用JMX来监控咱们的系统运行情况,还有可以在运行时环境像Web Service、RMI...转载 2019-10-30 17:30:07 · 216 阅读 · 0 评论 -
IBM HeapAnalyzer内存分析查看
下载地址https://www.ibm.com/developerworks/community/groups/service/html/communityoverview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091文档https://www.ibm.com/developerworks/community/wi...原创 2019-10-30 14:44:09 · 1709 阅读 · 1 评论 -
java 模拟内存溢出并分析内存溢出 jhat, mat
写一个主函数 while 循环,向list 里添加数据,并设置 启动参数-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m程序运行 ,报错java.lang.OutOfMemoryError: Java heap spaceDumping heap to java_pid23496.hprof ...Heap dump file ...原创 2019-10-29 17:42:01 · 938 阅读 · 0 评论 -
jhat 生成html 页面改怎么看?
使用jhat命令,就启动了一个http服务,端口是7000然后在访问http://localhost:7000/页面如下:三、分析在浏览器里面看到dump文件之后就可以进行分析了。这个页面会列出当前进程中的所有对像情况。该页面提供了几个查询功能可供使用:All classes including platform//Show all members of the r...原创 2019-10-29 17:06:45 · 2404 阅读 · 0 评论 -
MAT内存分析工具-独立版安装
一、背景在java程序运行中发生OOM的时候,我们可以使用强大的内存分析工具MAT进行问题跟踪,但由于习惯了使用idea开发,再为了MAT下载个eclipse太麻烦,所以安装MAT独立版。二、安装下载地址:https://eclipse.org/mat/downloads.php选择自己系统相应的版本下载,下载完得到一个zip文件,笔者这里使用的是Mac OSX (Mac/Cocoa ...转载 2019-10-29 16:39:33 · 311 阅读 · 0 评论 -
jstack生成的Thread Dump日志线程状态解析
Thread Dump日志的线程信息以下面的日志为例:"resin-22129" daemon prio=10 tid=0x00007fbe5c34e000 nid=0x4cb1 waiting on condition [0x00007fbe4ff7c000] java.lang.Thread.State: WAITING (parking) at sun.misc.Un...原创 2019-10-25 14:24:53 · 571 阅读 · 0 评论 -
JVM:内存常见的问题,以及分析处理方法
一.前言各位开发和运维同学,在项目实施落地的过程中,尤其是使用EDAS、DRDS、MQ这些java中间件时,肯定会遇到不少JAVA程序运行和JVM的问题。我结合过去遇到的各种各样的问题和实际处理经验,总结了JAVA问题的处理方式,希望能帮助到大家。二.问题处理总体概括如下图所示:问题处理分为三大类:1.问题发生后的紧急处理原则2.问题归类和分析3.分析排查工具和命...原创 2019-10-23 17:13:54 · 412 阅读 · 0 评论 -
Java jvm gc 垃圾回收日志解析2
日前查看某个程序的日志,发现一直在报GC相关的信息,不确定这样的信息是代表正确还是不正确,所以正好借此机会再复习下GC相关的内容:以其中一行为例来解读下日志信息:[GC (Allocation Failure) [ParNew: 367523K->1293K(410432K), 0.0023988 secs] 522739K->156516K(1322496K), 0.00...转载 2019-10-23 16:55:37 · 302 阅读 · 0 评论 -
Java jvm gc 垃圾回收日志解析
1.开启垃圾回收日志在运行一个java程序时可以在命令行中加入相应的JVM垃圾回收参数,获取程序运行时详细的垃圾回收日志信息。以下是一些大概的参数:-XX:+PrintGC与-verbose:gc 这两个命令效果都是一样,打印最基本的回收信息-XX:+PrintGCDetails 可以打印详细GC信息至控制台-XX:+PrintGCDateStamps 可以记录GC发生的详细时间-Xl...转载 2019-10-23 16:36:16 · 793 阅读 · 0 评论 -
Minor GC、Major GC和Full GC之间的区别 gc的触发时机
概念:● 新生代 GC(Minor GC):从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,因为 Java 对象大多都具备朝生夕灭的特性,所以 Minor GC 非常频繁,一般回收速度也比较快。这一定义既清晰又易于理解。但是,当发生Minor GC事件的时候,有一些有趣的地方需要注意到:1. 当 JVM 无法为一个新的对象分配空间时会触发 Min...转载 2019-10-23 15:40:47 · 1201 阅读 · 0 评论 -
JDK8中JVM堆内存划分
一:JVM中内存JVM中内存通常划分为两个部分,分别为堆内存与栈内存,栈内存主要用运行线程方法存放本地暂时变量与线程中方法运行时候须要的引用对象地址。JVM全部的对象信息都存放在堆内存中。相比栈内存,堆内存能够所大的多,所以JVM一直通过对堆内存划分不同的功能区块实现对堆内存中对象管理。堆内存不够最常见的错误就是OOM(OutOfMemoryError)栈内存溢出最常见...转载 2019-10-23 14:56:53 · 1126 阅读 · 1 评论 -
1.1 java 虚拟机如何启动的?启动之后都做了什么?
如何启动?java 命令java命令是一个入口,执行的时候 会找到对应的执行文件,它会调用java api 接口(java api 接口和jvm 一起构成了jre),接口内部会调用其他接口创建虚拟机(虚拟内存,硬件,CPU等),然后虚拟机会创建 bootstrap 类加载器,bootstrap类加载器,会创建 扩展类加载器和应用程序类加载器,应用程序加载器 会首先会去寻找 方法原创 2016-11-03 17:37:11 · 4481 阅读 · 0 评论 -
java内置锁(synchronized)原理 -- 偏向锁、轻量级锁、自旋锁、重量级锁
锁的基础知识基础知识之一:锁的类型锁从宏观上分类,分为悲观锁与乐观锁。乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。java中的乐观锁基...原创 2018-12-11 13:45:31 · 1560 阅读 · 3 评论 -
java ReentrantLock(显示锁-非公平锁)实现原理深入探究
前言这篇文章被归到Java基础分类中,其实真的一点都不基础。网上写ReentrantLock的使用、ReentrantLock和synchronized的区别的文章很多,研究ReentrantLock并且能讲清楚ReentrantLock的原理的文章很少,本文就来研究一下ReentrantLock的实现原理。研究ReentrantLock的实现原理需要比较好的Java基础以及阅读代码的能力,有...转载 2018-12-17 18:17:21 · 197 阅读 · 0 评论 -
java 如何在代码中优化锁的使用
锁优化以上介绍的锁不是我们代码中能够控制的,但是借鉴上面的思想,我们可以优化我们自己线程的加锁操作;1 减少锁的时间不需要同步执行的代码,能不放在同步快里面执行就不要放在同步快内,可以让锁尽快释放;2 减少锁的粒度它的思想是将物理上的一个锁,拆成逻辑上的多个锁,增加并行度,从而降低锁竞争。它的思想也是用空间来换时间;java中很多数据结构都是采用这种方法提高并发操作的效率:C...原创 2018-12-12 10:46:49 · 344 阅读 · 0 评论 -
java多线程协作方法之 wait notify condition 的理解
java 多线程协作肯定因为共享对象,实现原理是基于线程挂起和线程恢复。wait notify condition 都是 基于锁对象产生的衍生方法,多线程之间可以依靠这些方法实现线程协作。synchronized 的锁原理是在共享对象头里添加标记和对象监控器,这些都是jvm 内部实现的。而 lock 的锁原理是 独立于共享对象之外 新建一个锁监控对象(锁对象就类似于synchroniz...原创 2018-12-18 11:16:13 · 470 阅读 · 0 评论 -
jvm的堆内存 之新生代、老年代、永久代关系(jdk7)
新生代分为三个区域,一个Eden区和两个Survivor区,它们之间的比例为(8:1:1),这个比例也是可以修改的。通常情况下,对象主要分配在新生代的Eden区上,少数情况下也可能会直接分配在老年代中。Java虚拟机每次使用新生代中的Eden和其中一块Survivor(From),在经过一次Minor GC后,将Eden和Survivor中还存活的对象一次性地复制到另一块Survivor空间上(这...原创 2019-02-01 11:53:57 · 2360 阅读 · 0 评论 -
java ReentrantLock(显示锁-公平锁)实现原理深入探究
ReentrantLock reentrantLock=new ReentrantLock(true);reentrantLock.lock();reentrantLock.unlock();1 reentrantLock.lock() 内部实现final void lock() { acquire(1);}2 acquire(1) 内部实现:public fi...原创 2018-12-20 14:45:28 · 637 阅读 · 0 评论 -
java 锁之 synchronized, Lock,ReadWriteLock 的比较
在java多线程编程中,可能我们经常会遇到线程同步的问题,可以使用synchronized或者Lock和ReadWriteLock去控制同步锁,他们都能实现线程的同步,下面来分析下这几种方式的区别:1.synchronized它可以锁住一个方法或者一段代码块,伪代码如下://锁住方法public synchronized void test(){ doSomething......原创 2018-12-14 14:14:34 · 260 阅读 · 1 评论 -
6.1 java 选项 -javaagent、-agentlib、-agentpath
-javaagent、-agentlib、-agentpath都是 jvm 启动的时候可以设置的参数,那这些参数都是什么作用呢? -agentlib:libname[=options] 用于装载本地lib包; 其中libname为本地代理库文件名,默认搜索路径为环境变量PATH中的路径,options为传给本地库启动时的参数,多个参数之间用逗号分隔。在Windows平台上jv...转载 2016-11-11 10:39:25 · 18106 阅读 · 0 评论 -
4.1 jvm 深入学习之 java 引用
java 引用分几种?一、Java引用的四种状态:强引用: 用的最广。我们平时写代码时,new一个Object存放在堆内存,然后用一个引用指向它,这就是强引用。 如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。原创 2016-11-04 18:38:59 · 337 阅读 · 0 评论 -
1.3 运行j2ee 程序的时候,tomcat服务器 和jvm 各自的责任?
待续原创 2016-11-03 14:48:53 · 345 阅读 · 0 评论 -
1.2 :tomcat 启动的时候如何启动虚拟机
tomcat 启动命令 start.bat 会调用 catalina.batcatalina.bat 会调用 java 命令 并且会配置启动参数,用于优化jvm.在catalina.bat 里配置java_opts 这个时候,这个tomcat下的所有的项目都是进行过jvm 调优的原创 2016-11-03 17:45:19 · 1238 阅读 · 0 评论 -
5 :jvm 执行引擎是个啥?
JVM结构 Java编写的代码会按照下图的流程来执行:图 1: Java代码执行流程 类装载器装载负责装载编译后的字节码,并加载到运行时数据区(Runtime Data Area),然后执行引擎执行会执行这些字节码通过类装载器装载的,被分配到JVM的运行时数据区的字节码会被执行引擎执行。执行引擎以指令为单位读取Java字节码。它原创 2016-11-03 17:42:03 · 4388 阅读 · 3 评论 -
4 :jvm 垃圾回收机制
GC对它们的回收:内存区域中的程序计数器、虚拟机栈、本地方法栈这3个区域随着线程而生,线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈的操作,每个栈帧中分配多少内存基本是在类结构确定下来时就已知的。在这几个区域不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟着回收了。GC回收的主要对象:而Java堆和方法区则不同,一个接口中的多个实现类需要的内存可能不...原创 2016-11-03 17:55:48 · 320 阅读 · 0 评论 -
3 jvm runtime data area 运行时数据区 内存分配
图 4: 运行时数据区 运行时数据区是在JVM运行的时候操作系统所分配的内存区。运行时内存区可以划分为6个区域。在这6个区域中,一个PC Register,JVM stack 以及Native Method Statck都是按照线程创建的,Heap,Method Area以及Runtime Constant Pool都是被所有线程公用的。PC寄存器(PC register):每个线...原创 2016-11-03 17:40:41 · 1659 阅读 · 0 评论 -
1 :jvm 是什么?
JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的原创 2016-11-03 14:40:26 · 386 阅读 · 0 评论 -
7.1 :OutOfMemoryError,Java堆溢出了,这表明程序有严重的问题。我们需要找造成OutOfMemoryError原因。一般有两种情况:
OutOfMemoryError,Java堆溢出了,这表明程序有严重的问题。我们需要找造成OutOfMemoryError原因。一般有两种情况:1、内存泄露,对象已经死了,无法通过垃圾收集器进行自动回收,通过找出泄露的代码位置和原因,才好确定解决方案;2、内存溢出,内存中的对象都还必须存活着,这说明Java堆分配空间不足,检查堆设置大小(-Xmx与-Xms),检查代码是否存在对象生原创 2016-10-20 10:05:56 · 12304 阅读 · 1 评论 -
2.1 :java能不能自己写一个类叫java.lang.System/String正确答案
最近学习了下Java类加载相关的知识。然后看到网上有一道面试题是能不能自己写个类叫java.lang.System?网上提供的答案:通常不可以,但可以采取另类方法达到这个需求。所谓的另类方法指自己写个类加载器来加载java.lang.System达到目的。首先表明下我的观点。上述答案完全是误导读者,是不正确的答案。我就纳闷了网上怎么把这种完全不正确的搜索结果排在前面,而且几乎搜转载 2016-11-11 13:57:53 · 733 阅读 · 0 评论 -
java 多线程-中断机制 interrupt(),isInterrupted()和interrupted()
中断的作用:如果线程A正在阻塞,线程B 想要提前结束线程A 的 阻塞状态,则可以通过中断机制来做通知。java 中断依赖于3个方法,interrupt(),isInterrupted()和interrupted()。中断状态为true和falseinterrupt() 设置中断状态为true。 A中调用线程B的interrupt()方法,即会向线程B发出信号(线程中断状态已被设置),...原创 2018-12-14 13:23:35 · 960 阅读 · 0 评论 -
java保证多线程安全的一种机制 : 锁
为了保证共享数据在同一时刻只被一个线程使用,我们有一种很简单的实现思想,就是 在共享数据里保存一个锁 ,当没有线程访问时,锁是空的。当有第一个线程访问时,就 在锁里保存这个线程的标识 并允许这个线程访问共享数据。在当前线程释放共享数据之前,如果再有其他线程想要访问共享数据,就要 等待锁释放 。在共享数据里保存一个锁 在锁里保存这个线程的标识 其他线程访问已加锁共享数据要等待锁释...原创 2018-12-12 17:09:17 · 789 阅读 · 0 评论 -
Java的内存泄漏
问题的提出Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。随着越来越多的服务器程序采用Java技术,例如JS...转载 2018-08-22 13:30:23 · 153 阅读 · 0 评论 -
7 :Tomcat中JVM内存溢出及合理配置
待续转载 2016-11-03 17:56:47 · 3959 阅读 · 0 评论 -
6 :java 启动参数整理
Java启动参数共分为三类;其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用; 一.标准参数-client 设转载 2016-11-07 18:46:29 · 409 阅读 · 0 评论 -
1.4 jvm 知识点汇总 概括
java 虚拟机知识学习:1、Java虚拟机结束生命周期的情况:执行了System.exit()方法程序正常执行结束程序执行过程中遇到了异常或者错误而终止操作系统出现错误而导致Java虚拟机进行终止2、类的加载、连接和初始化:加载:查找并加载类的二进制数据连接:验证:确保被加载的类的正确性准备:为类的静态变量分配内存,并将其初始化为默认值解析:把类中的符号引用转换为直接引原创 2016-10-19 11:20:08 · 305 阅读 · 0 评论