jvm
文章平均质量分 65
学习笔记cmj
学习笔记
展开
-
jvm垃圾回收器之CMS收集器
jvm垃圾回收器之CMS收集器cms收集器 (Concurrent Mark Sweep 并发标记删除)cms收集器摘要CMS (Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的 Java应用集中在互联网站或者B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。CMS收集器就非常符合这类应用的需求。学习cms收集器之前带着问题去学习cms收集器在执行时都包含那几..原创 2021-03-27 11:08:16 · 238 阅读 · 0 评论 -
jvm内存模型
jvm内存模型主内存和工作内存内存间的交互操作对volatile的特殊规则对long和double的特殊规则原子性,可见性和有序性先行发生原则jvm内存模型的作用(为什么要定义内存模型)1:用来屏蔽硬件和各种操作系统之间内存访问的差异。可以让Java程序在各种不同硬件的操作系统上具有一致的访问效果。(外话: 这也就是为什么说,java具有具有跨平台性,因为不同平台jvm)。2:java内存模型主要通过定义内存访问规则来屏蔽硬件和操作系统之间内存访问的差异。内存访问规则通常指实.原创 2021-03-26 09:54:33 · 383 阅读 · 1 评论 -
Java中的JVM关闭钩子
Java中的JVM关闭钩子(翻译篇)关机钩子是一种特殊的构造,允许开发人员插入一段代码,以便在JVM关闭时执行。当我们需要在VM关闭时执行特殊的清理操作时,这就很方便了。通常使用关机钩子处理的一般结构,如确保我们调用特殊过程在应用程序退出(调用system . exit(0))将不工作情况下VM关闭是由于外部原因(例如杀死请求从O / S),或由于资源问题(内存)。我们很快就会看到,shutdown钩子很容易解决这个问题,因为它允许我们提供一个任意的代码块,JVM在关闭时将调用这个代码块。从表面上看原创 2020-08-14 00:54:54 · 18902 阅读 · 0 评论 -
<init>构造器 与构造方法的关系
java中的构造器有两种:分别是 实例构造器<init>和类构造器<cinit> . 构造器的作用: 构造器的产生过程实际上是一个**代码收敛的过程**,**编译器会把语句块**(对于实例构造器而言是“{}”块,对于类构造器而言是“static{}”块)、**变量初始化**(实例变量和类变量)、**调用父类的实例构造器**(仅仅是实例构造器,<clinit>()方法中无须调用父类的<clinit>()方法,虚拟机会自动保证父类构造器的执行,但在<clinit>()方法中经常会生成调用java.lang.原创 2020-06-28 22:48:42 · 20534 阅读 · 2 评论 -
读书笔记之 jvm的 关闭钩子
参考书籍: java并发编程实战.jvm在正常关闭时会调用以注册的关闭钩子(ShutDown Hook), 通过 Runtime.getRuntime().addShutdownHook(Thread) 注册关闭钩子, jvm不保证关闭钩子的执行顺序. 在jvm关闭时,如果有线程(守护线程和非守护线程)仍然在运行, 那么这些线程将与关闭钩子线程一起并发执行, 当所有关闭钩子正常执行结束时,jvm会运行终结器,然后再停止. 当jvm最终结束时,所有的线程被强行结束. 如果关闭钩子或终结器没有执行完成, 那原创 2020-06-21 15:09:01 · 5626 阅读 · 0 评论 -
读书笔记之 volatile关键字理解与使用
volatile关键字我们在开发的时候很少使用,在看spring源码的时候很有可能会看到,但是很少有人知道在什么环境下使用。本人查看一些书籍资料后做一下总结。volatile 通常理解为jvm虚拟机提供的最轻量级的同步机制(本句来源于‘深入理解JAVA虚拟机’)两大特征:(1)使用volatile的变量对所有线程具有可见性。(2)使用volatile的变量禁止指令重排序两大特征的具体理解...原创 2020-04-21 02:33:44 · 18654 阅读 · 6 评论 -
类的加载过程,初始化和实例化的区别你是否真的明白?
本人的编程母语是java 语言,java语言入门很简单,但是随着时间自己对java的底层越发的有兴趣, 因为你不知道底层在做开发的时候种感觉有种我能开发代码但是不知道代码为什么会这样。同样底层知道的多一点对你的代码优化也是有好处的。先来个经典的类加载图片: 这个图片在 网上可以说是烂大街了,但是 真正能解释清楚的很少,甚至在我看到的文章中总是感觉有很多点矛盾,在网上看到最多的类加载讲解大部分是...原创 2019-04-21 22:01:47 · 1544 阅读 · 0 评论 -
读书笔记之 jvm “操作栈 和 局部变量表的关系”和“判断对象是否已死或者说需要被垃圾回收时机的算法”
判断对象是否已死或者说需要被垃圾回收时机的算法有两种:#引用计数器算法:对象被引用一次加一,引用被取消时减一,直至为0时,才会满足垃圾回收条件#引用连可达算法:对象与gcRoot存在引用连,如果不存在则满足垃圾回收条件。操作栈 和 局部变量表的关系: 举例说明如下代码清单8-16 一段简单的算术代码public int calc(){int a=100;int b=200;i...原创 2020-04-19 00:49:01 · 167 阅读 · 0 评论 -
2020-02-10 深入理解JVM读书笔记之类加载器加载职责
Bootstrap ClassLoader: 加载$JAVA_HOME/lib 核心包Extension ClassLoader: 加载$JAVA_OHOME/ext 扩展包Application ClassLoader: 加载 ClassPath ,也就是我们的项目User ClassLoader: 程序猿自己实现的类加载器,加载自定义的类双亲委派模型: 优先托父类...原创 2020-02-10 16:09:11 · 5655 阅读 · 1 评论 -
读书笔记之 工作内存和主内存 理解
内存模型: 定义内存交互动作的一种规范(工作内存和主内存只是一种概念定义,在内存中并不是划分一块区域定义为工作/主内存)#局部基本类型变量 存在方法栈中,局部引用类型变量存在方法栈中,引用对象存在堆内存中#成员变量 都在堆内存中,无论基础类型还是引用类型#线程访问成员变量,都是以copy 方式进行读取。#局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需...原创 2019-12-16 22:53:59 · 5686 阅读 · 1 评论 -
读书笔记之类初始化和实例化本质
# 类的加载,验证,准备,解析,这四个步骤中除了类加载器可以自定义外,其余都有jvm虚拟机控制。类初始化时才开始执行我们程序中代码(或字节码),本质上:是执行构造<clinit>方法的过程类实例化时执行我们的类构造方法中的代码(或字节码),本质是执行构造<init>方法的过程#构造<clinit> 和 构造<init> 的区别clin...原创 2019-12-16 22:46:33 · 5609 阅读 · 0 评论 -
main memort and work memory
Java Memory ModelThe Internal Java Memory Model Hardware Memory Architecture Bridging The Gap Between The Java Memory Model And The Hardware Memory Architecture Visibility of Shared Objects Rac...转载 2019-12-12 19:20:28 · 170 阅读 · 0 评论 -
读书笔记 之 类初始化规定
什么情况下需要开始类加载过程的第一个阶段:加载?Java虚拟机规范中并没有进行强制约束,这点可以交给虚拟机的具体实现来自由把握。但是对于初始化阶段,虚拟机规范则是严格规定了有且只有5种情况必须立即对类进行“初始化”(而加载、验证、准备自然需要在此之前开始):1)遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其...原创 2019-01-03 13:03:13 · 131 阅读 · 0 评论