![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
所为xy
这个作者很懒,什么都没留下…
展开
-
Java产生OOM的几种类型,解决方案与步骤
说明:发生OOM后,查看程序日志可以获取到发生OOM的类型,也就是下面所列出的打印出的提示信息。然后根据 GC日志(通过 -Xloggc:file:指定文件位置)、OOM日志(-XX:+HeapDumpOnOutOfMemoryError:发生OOM时dump出内存信息)、dump出内存信息、结合代码来定位。1. java heap space:堆发生OOM很常见,一般分为两种情况,内存泄漏与堆内存确实存放不下:1) 内存泄漏:内存泄漏就是不再使用的内存任然保持着强引用,导致无法被GC掉。导致原原创 2020-05-26 12:01:27 · 867 阅读 · 0 评论 -
JVM监控工具
1、JVM 内存分析工具Eclipse Memory AnalyzerJVisual VM2、OOM 异常关键字告警阿里云 APM 产品:https://help.aliyun.com/document_detail/42966.html?spm=a2c4g.11174283.6.685.d69b668cuztvff3、在线诊断工具阿里 Java 在线诊断工具 Arthas(阿尔萨斯):alibaba Arthashttps://github.com/alibaba/arthas4.GC日志原创 2020-06-04 12:30:32 · 185 阅读 · 0 评论 -
偏向锁、轻量级锁
偏向锁:线程执行同步代码块时,首先检查JVM是否开启了偏向锁(1.6后默认是开启的),未开启的执行轻量级锁的流程。**开启的话:**检查对象MarkWord中的偏向线程ID是否是当前线程,是的话,执行同步代码块。**若对象MarkWord的偏向线程ID不是当前线程ID **,则证明已经有线程已经持有了偏向锁。此时使用CAS尝试获取获取,获取成功执行同步代码。未获取到偏向锁的线程会在达到安全点时,暂停已经获取到偏向锁的线程,并将锁升级到 轻量级锁。升级以后,唤醒刚才被停止的持有偏向锁的线程(升级后现在是持原创 2020-05-28 20:32:04 · 108 阅读 · 0 评论 -
JVM中参数分类解读
简介:指定JVM 参数我们就可以指定启动 JVM 进程以哪种模式(server 或 client),运行时分配的堆大小,栈大小,用什么垃圾收集器等等,JVM 参数主要分以下三类:1. 标准参数(-):所有的 JVM 实现都必须实现这些参数的功能,而且向后兼容;例如 -verbose:gc(输出每次GC的相关情况),-server(一服务器模式启动jvm)2. 非标准参数(-X):默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容,栈,堆大小的设置都是通过这个原创 2020-05-25 12:28:52 · 337 阅读 · 0 评论 -
枚举实现单例如何保证线程安全、反射安全、序列化安全
1. 线程安全:enum是一个语法糖,编译后,声明的枚举实例其实对应一个用 static final修饰的变量,其初始化在静态块中完成。所以本质上线程安全也是通过类加载过程中,类构造器(< clinit >)的调用实现了同步。2. 反射安全:不允许对enum进行反射,否则直接抛异常。具体是现在 Constructor::newInstance()方法中,进行了类型判断,如果是Enum(每个枚举类的父类)类型,直接会抛异常。3. 序列化安全:Enum序列化与反序列化时的特殊性。序列化时原创 2020-05-23 23:16:48 · 704 阅读 · 0 评论 -
GC日志分析
可用参数及说明:以常用的 -XX:+PrintGCDetails 打印GC日志进行分析:youngGC:FULL GC:堆空间占用情况日志:使用GC日志分析工具对保存的GC日志进行分析:常见的日志分析工具:GCViewer:本地jar之间运行GCEasy:网站形式,导入文件,会生成报表,界面较为友好...原创 2020-06-04 12:31:10 · 90 阅读 · 0 评论 -
偏向锁、轻量级锁
偏向锁:大多数情况下,不仅不存在多线程竞争,而且一个线程会一直去执行一个同步代码块。基于这种情况,当环境中只有一个线程时,使用无锁机制:偏向锁。当某个线程获取到对象的锁后,会将对象的对象头设置为:(锁标志位置为01,偏向锁标志为1,偏向线程ID为当前线程的ID),并在当前线程的栈帧中记录偏向锁信息。以后再执行同步代码块时,不用在执行CAS进行锁的获取与释放。只需要测试对象的对象头中是否有当...原创 2019-08-25 16:52:11 · 221 阅读 · 0 评论 -
深入解析Java中的String
String及其字符串常量池String:对String进行了再次学习,发下很多地方掌握的很模糊:(1)String s1=“abc”;(2)String s2=new String (“abc”);(3)String s3=new String (“abc”).intern();String s4=new String (“def”).intern();jdk1.8:(1)类加载...原创 2020-02-14 11:57:40 · 108 阅读 · 0 评论