JVM
文章平均质量分 68
帅过驴的袋鼠
这个作者很懒,什么都没留下…
展开
-
JVM1.8(四):垃圾收集器
如果说垃圾收集算法是内存回收的方法论,name垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。下图展示了七种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明他们是可以搭配使用的。垃圾收集器的种类Serial收集器Serial收集器是最基础、历史最悠久的收集器。这是一个单线程工.原创 2021-07-19 17:30:42 · 801 阅读 · 0 评论 -
Java中的引用分类
强引用类似于下面这样的,不会被回收Object o = new A();软引用还有用但并不必须的对象。用SoftReference来实现弱引用非必须对象,比软引用还要弱,垃圾回收时会回收掉。用WeakReference来实现弱引用虚引用也成为幽灵引用或者幻影引用,是最弱的引用。垃圾回收时会回收掉。用PhantomReference来实现虚引用...原创 2021-07-19 15:03:40 · 71 阅读 · 0 评论 -
指令重排序
JVM为了优化,在条件允许的情况下,对指令进行一定的重新排列,直接运行当前能够立即执行的后续指令,避开获取吓一跳指令所需数据造成的等待线程内串行语义,不考虑多线程间的语义不是所有指令都能重拍比如写后读:a = 1;b = a;写一个变量之后,再读这个位置...原创 2021-07-16 10:54:21 · 178 阅读 · 0 评论 -
浅谈Java中的常量池
图解一、常量池分类Java中的常量池分为:Class文件常量池、运行时常量池、全局字符串常量池、基本类型包装对象常量池1.1Class文件常量池class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,我们编写的Java文件就被编译为.class文件格式的二进制数据存放在磁盘中,其中就包括class文件常量池,class文件常量池在在编译阶段就已经确定。既然是常量池,name里面存放的肯定是常量,那么什么是《常量》呢?class文件常量池主要存放两大常量:字面量和符.转载 2021-07-15 15:20:57 · 2396 阅读 · 1 评论 -
JVM1.8(三):内存之间的交互操作
Java内存模型及交互操作简介JCP定义了一中Java内存模型,以前是在JVM规范中,后来独立出来成为JSR-133内存模型:在特定的操作写一下,堆特定的内存或告诉缓存进行读写访问的过程抽象Java内存模型主要关注JVM中把变量值存储到内存和从内存中取出变量值这样的底层细节内存模型基本要求所有变量(共享的)都存储在主内存中,每个线程都有自己的工作内存;工作内存中保存该线程使用到的变量的主内存的副本拷贝线程对变量的所有操作(读、写)都应该在工作内存中完成不同线程不能相互访问原创 2021-07-15 16:13:01 · 596 阅读 · 0 评论 -
JVM1.8(二):JVM1.8内存模型
1、内存模型概览本文介绍的是JDK1.8的内存模型。1.8同1.7相比,最大的差别就是元空间取代了永久代。元空间的本职和永久代类似,都是堆JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不存在虚拟机中,而是使用本地内存。内存模型概览如下:其中程序计数器、虚拟机栈、本地方法栈是线程私有的。方法区、堆是线程公有的。2、各区域详细介绍2.1、程序计数器程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。字节码解释器的工作就是通过改原创 2021-07-08 11:23:41 · 8742 阅读 · 2 评论 -
JVM1.8(一):类加载和类加载器
类加载步骤图解类加载步骤详解加载最常见的加载类的方式:是从本地文件系统中加载、从jar文件中加载其他加载方式:将java源文件动态编译成class、从网络下载、从专有数据库中加载等等加载要完成的功能1.通过类的全限定名来获取类的二进制字节流2.把二进制字节流转化为方法区的运行时数据结构3.在堆上创建一个java.lang.Class对象,用来封装类在方法区内的数据结构,并向外提供了访问方法区内部数据结构的接口类加载器分类启动类加载器启动类加..原创 2021-07-15 17:19:54 · 345 阅读 · 0 评论