![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 73
May Hacker
无所谓才能无所畏!我会变得更强!
展开
-
JVM - 关于Java中的守护线程
两者关系Java中线程分为两类,用户线程和守护线程可以把守护线程看作保姆,其作用就是为用户线程提供便捷服务只有当所有用户线程都退出时,守护线程才会退出保姆一辈子兢兢业业,由保姆产生的新线程也是一个守护线程必须在线程启动之前,即执行thread.start()方法前, 执行thread.setDaemon(true) 方法,否则会抛出异常IllegalThreadStateException应用场景我们熟知的GC垃圾回收线程就是一个GC线程,垃圾清洁工,当没用户线程运行了,也就不会产生垃圾原创 2021-12-10 10:13:38 · 514 阅读 · 0 评论 -
JVM知识梳理(五) JVM中的设计优化
前言JVM 解释字节码,之后翻译成对应的机器指令执行,明显是比可执行二进制程序慢得多。为了提高效率,引入了 JIT (即时编译器)优化技术。Java 程序还是会通过解释器进行解释执行,但是如果某个方法或者代码块运行比较频繁的时候,JVM 认为这是热点代码,然后将热点代码翻译成本地机器指令,并且进行优化,缓存起来,下次再运行此段代码的时候直接运行而不用再解释。栈上分配一个对象没有逃逸出方法的时候,就有可能被分配到栈上,从而不需要在堆中进行 GC 回收,提高了性能。逃逸分析逃逸分析,即分析一个对象原创 2021-07-16 21:53:43 · 128 阅读 · 0 评论 -
JVM知识梳理(四) Java 对象的内存布局及创建过程
一、对象的内存布局对象头对象头主要保存对象自身的运行时数据和用于指定该对象属于哪个类的类型指针。实例数据保存对象的有效数据,例如对象的字段信息,其中包括从父类继承下来的。对齐填充对齐填充不是必须存在的,没有特别的含义,只起到一个占位符的作用。二、对象的创建过程实例化一个类的对象的过程是一个典型的递归过程。在准备实例化一个类的对象前,首先准备实例化该类的父类,如果该类的父类还有父类,那么准备实例化该类的父类的父类,依次递归直到递归到Object类。此时,首先实例化Object类,再依次对以原创 2021-06-01 21:57:52 · 223 阅读 · 1 评论 -
JVM知识梳理(三) JVM常见垃圾回收器解析
前言什么是垃圾回收器?之前我们介绍过JVM的垃圾回收算法,标记-清除、标记-压缩、复制算法,都是逻辑上能够实现的一些理论,而垃圾回收器就是这些算法的具体实现方案,真正回收垃圾也就是垃圾回收器,不同的JDK版本默认使用的垃圾回收器也存在不同。常见的垃圾回收器有哪些?共7个,Serial垃圾收集器、Serial Old垃圾收集器、ParNew垃圾收集器、Parallel Scavenge垃圾收集器、Parallel Old垃圾收集器、CMS垃圾收集器、G1垃圾收集器。如何查看当前JDK版本的垃圾回收器原创 2021-01-27 17:05:10 · 1268 阅读 · 1 评论 -
JVM 知识梳理 (二) GC算法
一、前言垃圾收集(Garbage Collection ),简称GC。GC算法包括引用计数法、标记—清除、标记—压缩、复制算法。二、GC算法引用计数法引用计数法是老牌垃圾回收算法,当GC触发时,通过对象的引用来计算要不要回收。给每个对象分配一个引用计数器,只要该对象被应用,计数器+1.取消引用就-1。当GC触发时,如果该对象的引用计数器为零,那这个对象就是垃圾。优点即时回收,因为对象知道自己什么时候没用缺点引用和去除引用伴随着加法减法,影响性能。还有就是很难处理循环引用(看下图)。原创 2021-01-08 14:14:45 · 950 阅读 · 0 评论 -
JVM 知识梳理(一) JVM结构组成及GC种类
一、JVM是什么JVM 是Java Virtual Machine的缩写,即Java虚拟机。二、JVM的组成程序计数器(PC计数器)与操作系统中的PC计数器是一样的,用于指向下一条将被执行指令的地址。方法区存储静态变量、常量、类信息、运行时常量池。本地方法栈主要保存一些本地接口,这些本地接口用来调用的C或者C++的库,这些接口在Java程序中多表现为Native关键字声明。例如Thread类中,启动线程和线程礼让yield都需要调用本地接口,这些可调用的本地接口被“登记”在本地方法栈中。原创 2021-01-07 23:01:55 · 705 阅读 · 1 评论 -
Java 强引用、软引用、弱引用、虚引用
前言在我看来,区分不同引用类型,归根到底是为了更好地划定对象的生命周期,管理内存,及时资源回收,防止内存溢出。1. 强引用强引用是在编码过程中最普遍使用的引用,类似“Object obj = new Object()”这类的引用,只要强引用还存在,垃圾收集器GC永远不会回收掉被引用的对象。2. 软引用软引用是用来描述一些还有用但并非必需的对象。对于软引用关联着的对象,在系统将要内存不足,发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢原创 2021-01-04 11:43:11 · 160 阅读 · 1 评论 -
Java 双亲委派模型机制
前言Java是运行在Java的虚拟机(JVM)中的,在初步学习Java时,我们都知道,编写的Java源代码会被编译器编译成.class的字节码文件。然后ClassLoader负责将这些class文件给加载到JVM中去执行。我们跑Java程序,跟JVM脱不了干系。JVM中提供了三层的ClassLoader:Bootstrap classLoader:主要负责加载核心的类库(java.lang.*等),构造ExtClassLoader和APPClassLoader。ExtClassLoader原创 2021-01-04 10:57:11 · 5810 阅读 · 1 评论