
JVM
学习JVM的知识
余生之君
越努力,越幸运
展开
-
主要垃圾回收器和垃圾回收算法
垃圾回收算法:标记清除算法 mark-sweep复制算法 copying 主要用于年轻代的垃圾回收,分为Eden区和两个survivor区标记整理算法 mark-compact compact紧凑使压实的意思,即标记后不是清除而是将仍存活的对象移向内存的一端,清理掉端界外的垃圾对象,主要用于老年代的垃圾回收分代收集算法:是现在大多JVM采用的方法,即根据对象生存周期的不同把堆分为年轻代和年老代,采用不同的垃圾回收算法分区收集算法:G1引入的回收算法,将整个堆空间划分为连续的小区间,每个小区间独原创 2020-07-18 10:41:57 · 334 阅读 · 0 评论 -
JVM调优技巧与经验
JVM调优其实尽量避免Full GC,因为minor GC时间很短,不会太影响程序的运行。而Full GC会造成stop the world,应该尽量避免。在jvm参数中配置,可以打印GC日志-XX:+PrintGCDetails-Xloggc:/{path}/gc.log如果程序启动时,频繁发生元空间的Full GC,就会启动很慢,需要调大元空间值。...原创 2020-03-08 20:38:25 · 383 阅读 · 0 评论 -
java代码从编译到加载执行的过程
在刚接触java时,我们都知道通过javac命令将java源码文件编译成.class字节码文件,这是由编译器来完成的,包括泛型擦除属于编译时期的语法糖。.class字节码文件是跨平台的,也就是不管什么平台的JVM,都可以加载执行。类的加载Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。...原创 2020-02-20 15:58:38 · 1183 阅读 · 2 评论 -
happens-before规则
1.happens-before定义 happens-before用来指定两个操作之间的执行顺序。由于这两个操作可以在一个线程之内,也可以是在不同线程之间,因此,JMM可以通过happens-before关系向程序员提供跨线程的内存可见性保证(如果A线程的写操作a与B线程的读操作b之间存在happens-before关系,尽管a操作和b操作在不...原创 2020-01-13 10:33:52 · 775 阅读 · 0 评论 -
JVM监控工具有哪些
jps Java Virtual Machine Process Status Tool jps是java自带的查看java进程的命令,可以查看当前系统所有运行中的java进程、java包名、jar包名及JVM参数等。在一个项目中有多个JVM运行时,比windows自带的任务管理器里查看方便...原创 2020-01-11 19:40:44 · 1820 阅读 · 1 评论 -
JVM8内存模型
JVM内存即运行时数据区,分为堆(heap)、方法区、栈、本地方法栈、程序计数器。其中,堆和方法区是线程共享的,栈、本地方法栈和程序计数器是每个线程私有的。本地方法栈提供虚拟机使用到的本地Native方法服务。程序计数器 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。每个线程都需要有一...原创 2019-11-05 19:57:57 · 1952 阅读 · 0 评论 -
java线上排查利器arthas
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?线上遇到某个用户的数据处理有问题,但...原创 2019-09-17 19:27:58 · 1057 阅读 · 0 评论 -
volatile关键字——保证并发编程中的可见性、有序性
文章目录一.内存模型的相关概念二.并发编程中的三个概念1.原子性2.可见性3.有序性三.Java内存模型1.原子性2.可见性3.有序性四.深入剖析volatile关键字1.volatile关键字的两层语义2.volatile保证原子性吗?3.volatile能保证有序性吗?4.volatile的原理和实现机制五.使用volatile关键字的场景  ...转载 2019-09-08 17:01:18 · 1440 阅读 · 0 评论