
JVM
文章平均质量分 77
wuzhenwei0419
这个作者很懒,什么都没留下…
展开
-
050、动手实验:使用 jstat 摸清线上系统的JVM运行状况
1、前文回顾上周我们已经通过带着大家分析GC日志的方式,给大家重新回顾了一遍JVM的整体运行原理,包括对象优先在Eden区分配,YoungGC的触发时机和执行过程,对象进入老年代的时机,Full GC的触发时机和执行过程,相信大家通过GC日志可以把JVM整体运行原理理解的更加的深入而且透彻。本周我们就要带着大家开始用一个工具来分析运行中的系统,他的对象增长的速率,Young GC的触发频率...翻译 2020-04-08 15:50:32 · 403 阅读 · 0 评论 -
OOMError总结
OOM结构StackOverflowErrorjava.lang.OutOfMemoryErrorjava.lang.OutOfMemoryError: Java heap spacejava.lang.OutOfMemoryError: GC overhead limitjava.lang.OutOfMemoryError: Direct buffer memory结构StackOverf...原创 2019-06-12 16:06:51 · 493 阅读 · 0 评论 -
如何选择垃圾收集器
如何选择垃圾收集器组合的选择新生代与老年代收集器的对应关系JAVA SpringBoot微服务的生产部署和调优组合的选择单CPU或小内存,单机程序-XX:+UseSerialGC多CPU,需要最大吞吐量,如后台计算型应用-XX:+UseParalellGC或者-XX:+UseParalellOldGC多CPU,追求低停顿时间,需快速响应如互联网应用-XX:+UseParNewGC或...原创 2019-06-13 14:30:09 · 1254 阅读 · 0 评论 -
JVM参数类型及常用参数
JVM参数类型及常用参数JVM参数类型标配参数X参数XX参数JVM默认配置参数如何查看一个正在运行中的java程序,它的某个jvm参数是否开启?具体指是多少常用的JVM参数JVM参数类型标配参数java -versionjava -helpjava -showversionX参数-Xint 解释执行-Xcomp 编译执行-Xmixed 混合执行(先编译后执行)XX参数...原创 2019-06-10 17:13:21 · 1092 阅读 · 1 评论 -
voletile
voletile 是JVM提供的一个轻量级的同步机制1. 保证可见性(多个线程操作数据时,彼此不可见)2. 不保证原子性 (程序不可分割、完整性,要么成功,要么失败)3. 禁止命令重排 //此方法是用来测试多个线程执行完之后 再执行这段代码之后的主线程 //main 方法中的一个方法 while(Thread.activeCount > 2){ T...原创 2019-06-06 15:40:04 · 224 阅读 · 0 评论 -
DCL(双端检索)机制不一定线程安全
DCL(双端检索)机制不一定线程安全,原因是有指令重排序的存在,加入volatile可以禁止指令重排。原因在于某一个线程执行到第一次检测,读取到的instance不为null时,instance的引用对象可能没有完成初始化。instance = new SingletonDemo();可以分为以下3步骤完成(伪代码)memory = allocate(); //分配对象内存空间insta...原创 2019-06-17 15:07:25 · 2134 阅读 · 0 评论 -
深入理解JVM--Java虚拟机栈
深入理解JVM--Java虚拟机栈概述局部变量表操作数栈动态连接方法返回地址概述Java Virtual Machine Stacks,线程私有,生命周期与线程相同,描述的是Java方法执行的内存模型:每一个方法执行的同时都会创建一个栈帧(Stack Frame),由于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法的执行就对应着栈帧在虚拟机栈中的入栈,出栈过程。 局部变量...转载 2018-12-21 15:43:35 · 200 阅读 · 0 评论 -
深入理解JVM--解释执行和编译执行
深入理解JVM--解释执行和编译执行概述工作方式比较即时编译被编译对象和触发条件编译过程概述在部分的商用虚拟机中,Java 程序最初是通过解释器( Interpreter )进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁的时候,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,即时编译器(Just In Time Compiler )会把这些代码编译成与本地平...转载 2018-12-21 18:13:24 · 4164 阅读 · 6 评论 -
深入理解JVM--引用类型
深入理解JVM--引用类型概述强引用(StrongReference)软引用(SoftReference)弱引用(WeakReference)虚引用(PhantomReference)概述JDK1.2以后,Java对引用的感念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种(引用强度逐渐减弱)强引用(StrongReference)以前我们使用的大部分引用实际上都是强引用,这是使用...原创 2018-12-28 10:38:36 · 243 阅读 · 0 评论 -
深入理解JVM--垃圾收集算法
深入理解JVM--垃圾收集算法标记-清除算法复制算法标记-整理算法分代收集算法HotSpot的算法实现标记-清除算法算法分为"标记"和"清除"两个阶段: 首先标记出所有需要回收的对象,在标记完成后,统一回收所有被标记的对象。它是最基础的收集算法,会带来两个明显的问题效率问题:标记和清除两个过程的效率都不高空间问题:标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致在程序运行...转载 2018-12-28 17:44:52 · 179 阅读 · 0 评论 -
深入理解JVM--Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen详解
深入理解JVM--Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen详解概述Eden SpaceSurvivor SpaceOld GenCode CachePerm GenHotSpot虚拟机GC算法采用分代收集算法:概述JVM区域总体分两类,heap区和非heap区。heap区又分为:Eden Space(伊甸园)、Surviv...转载 2018-12-24 14:01:59 · 1542 阅读 · 0 评论 -
深入理解JVM--深入理解虚拟机之Java内存区域
深入理解JVM--深入理解虚拟机之Java内存区域概述Java程序执行流程运行时数据区域概述对于Java程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为内一个new 操作去写对应的delete/free操作,不容易出现内存泄漏和内存溢出问题。正是因为Java程序员把内存控制权利交给Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的...转载 2018-12-24 14:06:53 · 206 阅读 · 0 评论 -
深入理解JVM--JVM中的对象
深入理解JVM--JVM中的对象概述对象的创建对象的内存布局对象的访问定位概述当今在实际上有三种JVM:SUN 公司最早改良的HotSpot;BEA 公司的: JRockit; (最初三个SUN公司的老员工创立)IBM的JVM’S;建立对象就是为了使用对象,我们的Java程序通过栈上的reference数据来操作堆上的具体对象。对象的访问方式有虚拟机实现而定,目前主流的访问方式有①...转载 2018-12-24 19:52:47 · 288 阅读 · 0 评论 -
深入理解JVM--垃圾收集器
深入理解JVM--垃圾收集器前言新生代收集器Serial收集器ParNew 收集器并发和并行Parallel Scavenge 收集器老年代收集器Serial Old收集器Parallel Old收集器CMS收集器优点缺点G1收集器特点横跨整个堆内存建立可预测的时间模型避免全堆扫描——Remembered SetG1收集器的运作步骤总结前言如果说收集算法是内存回收的方法论,那么垃圾收集器就是内...转载 2019-01-10 16:40:01 · 199 阅读 · 0 评论 -
深入理解JVM--如何判断对象是否死亡
深入理解JVM--如何判断对象是否死亡概述引用计数法可达性分析算法概述堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断那些对象已经死亡(即不能再被任何途径使用的对象)引用计数法给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1;当引用失效,计数器就减1;任何时候计数器为0的对象就是不可能再被使用的。这个方法实现简单,效率高,但是目前主流的虚拟机中并没有选择这个算法...转载 2018-12-26 14:13:20 · 260 阅读 · 0 评论