随笔分类 - Java虚拟机
摘要:曹工改bug:cpu狂飙,old gc频繁,线程神秘死亡连环案件调查报告 前言 前两天,访问开发环境上一个java服务,发现一直转圈圈,因为我开着fiddler,可以看到的现象是,接口一直没返回;本来想着直接jenkins重新构建一下开发环境(即重启服务),突然觉得,还是看看到底啥情况吧。 #排查过
阅读全文
摘要:markword #注释 该文件目录在: \openjdk-jdk8u\hotspot\src\share\vm\oops\markOop.hpp #ifndef SHARE_VM_OOPS_MARKOOP_HPP #define SHARE_VM_OOPS_MARKOOP_HPP #include
阅读全文
摘要:背景 大一点的公司,可能有一些组,专门做中间件的;假设,某中间件小组,给你提供了一个jar包,你需要集成到你的应用里。假设,它依赖了一个日期类,版本是v1;我们应用也依赖了同名的一个日期类,版本是v2. 两个版本的日期类,方法逻辑的实现,有一些差异。 举个例子,中间件提供的jar包中,依赖如下工具包
阅读全文
摘要:背景 因为想知道java中的关键字,对应的操作系统级别的api是啥,本来打算整理几个我知道的出来,但是,尴尬的是,我发现java里最重要的synchronized关键字,我就不知道它对应的api是什么。 redis中如何获取锁 在redis源码里,线程如果要进入一个同步区(只能单线程进入的代码块),
阅读全文
摘要:背景 大家知道,jdk安装的目录下,一般会有个src.zip包,这个包基本对应了rt.jar这个包。rt.jar这个包里面,就放了jdk中,jdk采用java实现的那部分类库代码,比如java.lang包下面的,什么ArrayList之类的。 如何才能调试这部分代码呢,这里的调试,是说,能够修改源代
阅读全文
摘要:Jar包冲突的相关文章: 了不得,我可能发现了Jar 包冲突的秘密 一、前言 jar包冲突分多种,简单理解来说,就是同package且同名的类在多个jar包内出现,如果两个jar包在同一个classloader下,那么最终的结果是,只会加载其中的一个。 有时,这个错误一般在运行时出现,报的错可能是,
阅读全文
摘要:一、前言 今天事不是很多,正好在Java交流群里,看到一个比较有意思的问题,于是花了点时间研究了一下,这里做个简单的分享。 先贴一份测试代码,大家可以先猜测一下,执行结果会是怎样的: 不知道,你猜对了没有呢,实际的执行结果会是下面这样的: 二、原因分析 这里,一开始大家分析的是,和new有关系;但下
阅读全文
摘要:一、前言 今天下午本来在划水,突然看到微信联系人那一个红点点,看了下,应该是博客园的朋友。加了后,这位朋友问了我一个问题: 问我,这两块有什么关系? 看到这段 gc 日志,一瞬间脑子还有点懵,嗯,这个可能要翻下书了,周志明的 Java 虚拟机那本神书里面有讲,我果断地打开了 pdf,找了起来,很快,
阅读全文
摘要:一、前言 前一阵子比较好奇,想看到底层(虚拟机、汇编)怎么实现的java 并发那块。 volatile是在汇编里加了lock前缀,因为volatile可以通过查看JIT编译器的汇编代码来看。 但是原子类,本来在jvm中就是汇编实现的,反而没法看。如果能实际跟踪一下断点,应该也算实际验证了。 这边基本
阅读全文
摘要:一、前言 最近在看《深入java虚拟机》,看完后,打算自己实际编译一个jvm出来看看,实践一下。 书上提到了Oracle JDK和OpenJdk的关系,Oracle Jdk7 和OpenJdk 7共用了相当多的代码,所以还是很有学习的必要的: 二、环境 我这里的编译的操作系统是CentOS Linu
阅读全文
摘要:启动时加: -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true
阅读全文
摘要:一、前言 最近学习《深入java虚拟机》,目前看到内存分配策略这块。本文将进行一些实践。 二、内存分配策略 1.大对象直接进入老年代 书中提到了: 下面进行测试,代码如下: 1.1 新生代收集器为Parallel Scavange的情形 以下虚拟机参数,没有显式设置垃圾收集器,默认新生代为Paral
阅读全文
摘要:一、开启方法 For Java 1.4, 5, 6, 7, 8 pass this JVM argument to your application: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:<file-path> For Java 9,
阅读全文
摘要:前言 相信很多人都看过下面这张图,(来自《深入理解Java虚拟机:JVM高级特性与最佳实践》) 在学完几种垃圾收集器类型及组合后,打算看看实际中程序用到的垃圾收集器。 但是在jconsole中看到的,如下: 两边的名称并不完全匹配,给我造成了很多困惑之处。 实际上,jconsole里面用到的,我想应
阅读全文
摘要:一、问题及原因 程序里有个工具类,MQMessageSender.send(),这是个static方法,平时一般调用该方法来发送mq。 调用场景如下: 结果这两天报了个错: java.lang.NoClassDefFoundError: Could not initialize class com.
阅读全文
摘要:一、jinfo命令格式 命令格式: jinfo [option] <pid> 二、打印所有参数 三、查看某个参数 四、动态修改参数 1、禁用(不过该参数不能修改) 2、启用(也遇到了不能改的) 3、来个可改的 五、查看系统属性
阅读全文
摘要:一、序 最近在学习jvm工具时,不少链接直指oracle官网。才发现有不少好东西。 本文翻译自: https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/prepapp002.html 二、正文 这一节描述如何设置环境及
阅读全文
摘要:一、问题概述 参考前一篇: jvisualvm连接远程应用终于成功,附踩大坑记录!!(一:jstatd方式) 这篇主要讲讲jmx方式。 二、启动前设置jmx参数 我这边拿tomcat举例,其余java应用只会比它更简单,读者可以自行尝试下。 在tomcat的bin目录下,创建setenv.sh(文件
阅读全文
摘要:一、问题概述 连接远程java应用除了jstatd方式,还有jmx方式。不必拘泥于一种,一种不行可以果断尝试另一种,兴许就行了。 姊妹篇在这: jvisualvm连接远程应用终于成功,附踩大坑记录!!(二:jmx方式) 目前,在jvisualvm连接失败的相关互联网博客中,我还没看到有人和我一样的解
阅读全文
摘要:一、环境信息 远程tomcat:linux 64位 centos 7 上tomcat 8 本机:windows7 二、步骤 linux上,在tomcat安装目录的bin下,新建setenv.sh,内容如下: 另: 如果在windows下,可以创建setenv.bat脚本,内容如下: 三、本机连接 1
阅读全文