jvm
LookingNorth
这个作者很懒,什么都没留下…
展开
-
计算Java对象大小
计算Java对象内存大小原创 2022-10-20 00:08:22 · 438 阅读 · 0 评论 -
DCL单例(懒汉)模式
/** * DCL 懒汉模式 * new Singleton() JVM执行过程 * 1.给对象分配内存 * 2.实例化对象 * 3.对象引用指向内存 singleton == ??? * 编译器为了提升执行效率会指令重排,执行顺序并不会1.2.3, * 要是一个线程执行1,3还没有执行2,第二个线程进来看到singleton != null,内存地址不是空的,但是对象还是空对象,拿对象去使用就会报空指针 */public class Singleton { /** .原创 2022-04-25 17:43:35 · 308 阅读 · 0 评论 -
对JVM的一些笔记
Linux IO 模型1.阻塞IO2.异步非阻塞IO3.IO复用4.信号驱动IO5.异步IOJava 类加载器自定义类加载器 Custom ClassLoader启动类加载器 Application ClassLoader扩展类加载器 Extension ClassLoader引导类加载器 Bootstrap ClassLoaderJVM运行时数据区线程私有:程序计数器 记录程序运行位置线程私有栈本地方法栈 通过JNI调用c,c#语言的方法线原创 2022-04-24 17:58:28 · 161 阅读 · 0 评论 -
JVM笔记
Linux IO 模型 1.阻塞IO 2.异步非阻塞IO 3.IO复用 4.信号驱动IO 5.异步IOJava 类加载器自定义类加载器 Custom ClassLoader 启动类加载器 Application ClassLoader 扩展类加载器 Extension ClassLoader 引导类加载器 Bootstrap ClassLoaderJVM运行时数据区 线程私有: ...原创 2021-03-13 15:26:17 · 88 阅读 · 0 评论 -
常用的垃圾回收算法 jvm垃圾回收
常用的垃圾回收算法引用计数法(Reference Counting)原理:对于一个对象A,任何对象引用A,则A的引用计数器+1,引用失效则-1,当引用计数为0的时候,则进行回收缺陷:不能解决循环引用,当A和B互相引用的时候,引用计数器就不会为0,则无法回收,造成内存泄漏,最终会内存溢出。可达对象:通过根对象进行引用搜索,最终可以达到的对象不可达对象:通过根对象进行引用搜索,最终不可达的对象注意:由于不能解决循环引用,所以Java虚拟机并没有采用标记-清除算法(Mark-Sw原创 2020-09-21 18:24:51 · 238 阅读 · 0 评论 -
JVM 配置参数
JVM 配置参数其他配置参数栈帧中的局部变量表中的槽位是可以重用的,超过作用域,并且被重用是可以被gc顺利回收的 -Xss:栈空间的大小,栈越大,调用的方法就越多,越深-XX:+PrintGC:可以看到垃圾回收前后堆的大小-XX:+DoEscapeAnalysis:启用逃逸分析(局部对象不逃逸,成员对象会逃逸)-XX:+EliminateAllocations开启了标量替换(默认打开)-XX:-UseTLAB关闭了TLAB-XX:PermSize和-XX:MaxPermSize指原创 2020-09-19 18:09:19 · 221 阅读 · 0 评论 -
JVM 垃圾收器
并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N8189IpI-1587023418895)(http://reade...原创 2020-04-16 15:51:34 · 156 阅读 · 0 评论 -
JVM垃圾收集算法
文章目录标记-清除算法复制算法标记-整理算法分代收集算法标记-清除算法最基础的收集算法是“标记-清除”(Mark-Sweep)算法,如同它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,它的标记过程其实在前一节讲述对象标记判定时已经介绍过了。之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其不足进行改进...原创 2020-04-14 17:30:41 · 118 阅读 · 0 评论 -
对象回收
在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象)引用计数算法很多教科书判断对象是否存活的算法是这样的:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的客观地说,引用...原创 2020-04-13 18:09:38 · 277 阅读 · 0 评论 -
对象在JVM中的定位访问
建立对象是为了使用对象,我们的Java程序需要通过栈上的reference数据来操作堆上的具体对象。由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用,并没有定义这个引用应该通过何种方式去定位、访问堆中的对象的具体位置,所以对象访问方式也是取决于虚拟机实现而定的。目前主流的访问方式有使用句柄和直接指针两种。句柄访问如果使用句柄访问的话,那么Java堆中将会划分出一...原创 2020-04-13 18:09:08 · 146 阅读 · 0 评论 -
HotSpot虚拟机中,对象在内存中存储的布局
文章目录对象头(Header)实例数据部分对齐填充对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)对象头(Header)HotSpot虚拟机的对象头包括两部分信息第一部分用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部...原创 2020-04-13 18:08:31 · 266 阅读 · 0 评论 -
深入探讨HotSpot虚拟机在Java堆中对象分配、布局和访问的全过程
对象的创建虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定(如何确定将在2.3.2节中介绍),为对象分配空间的任务等同于把一块确定大小的内存从J...原创 2020-04-13 18:07:51 · 207 阅读 · 0 评论 -
JVM 运行时数据区
JVM 运行时数据区JVM 运行时数据区1.程序计数器(Program Cunter Register)2.Java虚拟机栈(Java Virtual Machine Stack)3.本地方法栈(Native Methond Stack)4.Java堆(Java Heap)5.方法区(Methond Area)6.直接内存(Direct Memroy)JVM 运行时数据区1.程序计数器(Pr...原创 2020-04-10 17:09:35 · 132 阅读 · 0 评论 -
Java虚拟机内存
原创 2019-02-27 10:39:36 · 165 阅读 · 0 评论