jvm
文章平均质量分 96
uuboke
这个作者很懒,什么都没留下…
展开
-
Java命令学习系列(七)——cmd
jcmd是jdk自带的一个神器,能够很方便的对java程序进行profiling。jcmd其实可以替代很多常用的工具,比如jstak,jmap。接下来让我们了解下什么是jcmd,jcmd能够帮助我们定位什么问题?工作中我们如何使用jcmd。从jdk7开始,jcmd就是jdk自带的一个工具。在正确配置了JDK的PATH的情况下,我们可以直接在命令行中执行jcmd:[root@vincent...原创 2020-05-02 23:53:29 · 260 阅读 · 0 评论 -
Java命令学习系列(二)——Jstack
jstack是java虚拟机自带的一种堆栈跟踪工具。功能jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事...原创 2019-08-29 15:20:41 · 132 阅读 · 0 评论 -
jvm-monitor原理
在深入理解多线程(一)——Synchronized的实现原理中介绍过关于Synchronize的实现原理,无论是同步方法还是同步代码块,无论是ACC_SYNCHRONIZED还是monitorenter、monitorexit都是基于Monitor实现的,那么这篇来介绍下什么是Monitor。操作系统中的管程如果你在大学学习过操作系统,你可能还记得管程(monitors)在操作系统中是很重...原创 2019-08-29 19:38:33 · 3012 阅读 · 1 评论 -
jvm-Synchronized的实现原理
synchronized,是Java中用于解决并发情况下数据同步访问的一个很重要的关键字。当我们想要保证一个共享资源在同一时间只会被一个线程访问到时,我们可以在代码中使用synchronized关键字对类或者对象加锁。那么,本文来介绍一下synchronized关键字的实现原理是什么。在阅读本文之间,建议先看下Java虚拟机是如何执行线程同步的。反编译众所周知,在Java中,synchr...原创 2019-08-29 19:41:35 · 344 阅读 · 0 评论 -
Java命令学习系列(三)——Jmap
Jmapjmap是JDK自带的工具软件,主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。可以使用jmap生成Heap Dump。在Java命令学习系列(零)——常见命令及Java Dump介绍和Java命令学习系列(二)——Jstack中分别有关于Java Dump以及线程 Dump的介绍。这篇文章主要介绍Java的堆Dump以及jamp命令...原创 2019-08-29 21:19:13 · 177 阅读 · 0 评论 -
Java命令学习系列(四)——jstat
jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形的服务器上,它是运行期定位虚拟机性能问题的首选工具。jstat位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对...原创 2019-08-29 22:00:58 · 163 阅读 · 0 评论 -
Java命令学习系列(五)——jinfo
jinfo可以输出java进程、core文件或远程debug服务器的配置信息。这些配置信息包括JAVA系统参数及命令行参数,如果进程运行在64位虚拟机上,需要指明-J-d64参数,如:jinfo -J-d64 -sysprops pid另外,Java7的官方文档指出,这一命令在后续的版本中可能不再使用。笔者使用的版本(jdk8)中已经不支持该命令(笔者翻阅了,https://docs.orac...原创 2019-08-30 17:01:59 · 167 阅读 · 0 评论 -
Java命令学习系列(六)——javap
javap是jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码。一般情况下,很少有人使用javap对class文件进行反编译,因为有很多成熟的反编译工具可以使用,比如jad。但是,javap还可以查看java编译器为我们生成的字节码。通过它,可以对照源代码和字节码,从而了解很多编译器内部的工作。实例javap命令分解一个class文件,它根据options...原创 2019-08-30 17:07:41 · 298 阅读 · 0 评论 -
深入理解String.intern
在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。如果不是用双引号声明的String对象,可以...原创 2019-09-02 15:16:48 · 245 阅读 · 0 评论 -
Java命令学习系列(一)——Jps
jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号。 jps相当于Solaris进程工具ps。不象”pgrep java”或”ps -ef grep java”,jps并不使用应用程序名来查找JVM实例。因此,它查找所有的Java应用程序,包括即使没有使用java执行体的那种(例如,定制的启动 器)。另外,jps仅查找当前用户的Java进程,而不是当前系统中的所有...原创 2019-08-29 14:39:26 · 261 阅读 · 0 评论 -
jvm-Java对象的内存分配过程是如何保证线程安全的?-Thread Local Allocation Buffer
JVM内存结构,是很重要的知识,相信每一个静心准备过面试的程序员都可以清楚的把堆、栈、方法区等介绍的比较清楚。上图,是一张在作者根据《Java虚拟机规范(Java SE 8)》中描述的JVM运行时内存区域结构画的。很多人都知道Java对象是在堆内存中分配空间的(JIT优化除外),也知道内存分配过程中是线程安全的,那么虚拟机到底是如何保证线程安全的呢?本文就来简单介绍一下。1、Jav...原创 2019-08-29 13:59:52 · 1590 阅读 · 3 评论 -
jvm-使用Eclipse Memory Analyzer Tool(MAT)分析线上故障-内存泄漏-对象
jmap -dump:live,format=b,file=dump.hprof pid Eclipse Memory Analyzer Tool(MAT)是一个强大的基于Eclipse的内存分析工具,可以帮助我们找到内存泄露,减少内存消耗。 工作中经常会遇到一些内存溢出、内存泄露等问题,同时还可能导致CPU使用率也很高,因为在频繁的进行GC垃圾回收,这时候就需要分析导致问题...转载 2018-08-26 19:08:55 · 247 阅读 · 0 评论 -
jvm优化--myself
1、JVM Server与Client运行模式JVM Server模式与client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升.原因是: 当虚拟机运行在-client模式的时候,使用的是一个代号为C1的轻量级编译器, 而-server模式启动的虚拟机采用相对重量级,代号为C2的编译器. C2比C1编译器编译的相对彻底,,服务起...原创 2018-08-26 19:14:40 · 274 阅读 · 0 评论 -
jvm调优--命令-01
运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,另一方面喜欢装X的我们,总喜欢在出现问题的时候在终端输入一些命令来解决。所有的工具几乎都是依赖于jdk的接口和底层的这些命令,研究这些命...转载 2018-08-23 17:37:20 · 151 阅读 · 0 评论 -
JVM-内存监视手段及各区域内存溢出解决
一、虚拟机内存监视手段虚拟机常出现的问题包括:内存泄露、内存溢出、频繁GC导致性能下降等,导致这些问题的原因可以通过下面虚拟机内存监视手段来进行分析,具体实施时可能需要灵活选择,同时借助两种甚至更多的手段来共同分析。比如GC日志可以分析出哪些GC较为频繁导致性能下降、是否发生内存泄露。jstat工具和GC日志类似,同样可以查看GC情况、分析是否发生内存泄露。判断发生内存泄露后,可以通过jm...转载 2018-08-25 16:43:01 · 139 阅读 · 0 评论 -
jvm--类加载器之双亲委派模型
(一)三种系统提供的类加载器JVM类加载器分为两类,一类是启动类加载器BootStrap ClassLoader,由C++语言实现,是JVM的一部分,一类是其他类加载器,由Java语言实现,独立于虚拟机外部,并且都继承自抽象类java.lang.ClassLoader。1.启动类加载器BootstrapClassLoader:加载<JRE_HOME>\lib目录或者-Xboot...转载 2018-08-25 16:55:01 · 115 阅读 · 0 评论 -
g1
1. G1出现的初衷是什么? G1适合在什么场景下使用? G1的trade-off是什么? G1的详细过程? 如何理解G1的gc日志? G1的调优思路? G1和CMS的对比和选择? 一、基础知识1. 初衷在G1提出之前,经典的垃圾收集器主要有三种类型:串行收集器、并行收集器和并发标记清除收集器,这三种收集器分别可以是满足...转载 2019-01-30 14:08:13 · 280 阅读 · 0 评论 -
Java Virtual Machine参数
JVM的参数的类型:1、标配参数:Java -version ;Java -help2、X参数(了解)-Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式3、XX参数1、Boolean类型:格式:-XX:+或者-某个属性者(+表示开启,-表示关闭)2、KV设置类型格式:-XX:属性key=属性值value 如:-X...原创 2019-04-29 01:30:00 · 770 阅读 · 0 评论 -
jvm-别人总结
一、运行时数据区域Java虚拟机管理的内存包括几个运行时数据内存:方法区、虚拟机栈、本地方法栈、堆、程序计数器,其中方法区和堆是由线程共享的数据区,其他几个是线程隔离的数据区1.1程序计数器程序计数器是一块较小的内存,他可以看做是当前线程所执行的行号指示器。字节码解释器工作的时候就是通过改变这个计数器的值来选取下一条需要执行的字节码的指令,分支、循环、跳转、异常处理、线程恢复等基础功...原创 2019-08-29 10:49:54 · 175 阅读 · 0 评论 -
jvm-hotspot的收集器总结
GC垃圾回收算法和垃圾收集器的关系?分别是什么请你谈谈?GC算法(引用计数/复制/标清/标整)是内存回收的方法论,垃圾回收器就是算法落地实现。 因为目前为止还没有完美的收集器出现,更加没有万能的收集器,只是针对具体应用最适合的收集器,进行分代收集怎么查看默认的垃圾收集器是那个?java -XX:+PrintCommandLineFlags -version HotSpot垃圾收集器...原创 2018-08-26 17:18:18 · 135 阅读 · 0 评论