
JVM
贾立桐
路漫漫其修远兮,吾将上下而求索
展开
-
面试题 : JDK8采用的是哪种垃圾收集器
垃圾收集器Serial(串行收集器)特性:单线程,stop the world,采用复制算法应用场景:jvm在Client模式下默认的新生代收集器优点:简单高效ParNew特点:是Serial的多线程版本,采用复制算法应用场景:在Server模式下常用的新生代收集器,可与CMS配合工作Parallel Scavenge特点:并行的多线程收集器,采用复制算法,吞吐量优先,...原创 2020-04-06 20:20:01 · 5505 阅读 · 6 评论 -
JVM调优以及调优参数意义
JVM调优JVM调优设计哪几方面?合理的编写程序充分并合理的使用硬件资源合理的进行JVM调优对于非堆内存堆外内存文件句柄Socket句柄数据库连接文件限制文件大小,最好采用异步方式(写sql语句最好使用limit限制,避免栈溢出)网络IO:限流,并及时关闭大对象对于JVM是一个噩梦。避免使用大对象,如果使用尽量减少生存时间JVM调优原...原创 2020-03-04 20:34:57 · 260 阅读 · 0 评论 -
深入了解volatile关键字以及单例模式的双重校验锁
volatile关键字的两个作用关键字volatile可以说是JVM提供的最轻量级的同步机制,但是它并不容易完全被正确理解和使用。JVM内存模型对volatile专门定义了一些特殊的访问规则。当一个变量定义为volatile之后,它将具备两种特性。可见性第一是保证此变量对所有线程的可见性,这里的"可见性"是指 : 当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。...原创 2020-03-04 19:58:59 · 280 阅读 · 1 评论 -
JMM内存模型详解
JMM(Java Memory Model)内存模型详解java线程内存模型跟CPU缓存模型类似,是基于cpu缓存模型建立的,Java线程内存模型是标准化的,屏蔽掉了底层不同计算机的区别.CPU缓存模型JMM证明工作内存的存在public class JMM { public static boolean initFlag = false; public stat...原创 2020-03-04 18:00:34 · 305 阅读 · 0 评论 -
CPU多核并发缓存架构介绍
CPU多核并发缓存架构CPU工作原理首先CPU工作的时候,由控制单元充当大脑,负责协调。让运算单元做运算的时候,会首先从最靠近CPU的寄存器(其实是和CPU一体的)上读取数据,在寄存器上有CPU运行的常用指令如果寄存器上没有想要的数据,则就从三级缓存的L1级缓存中获取,如果L1取到数据了,会加载到寄存器中,再转输给CPU运算单元。如果L1中没有,则从L2级缓存中读取,同理,如果没...原创 2020-03-04 15:21:40 · 845 阅读 · 0 评论 -
JVM垃圾回收收机制
这里要讲的是JVNM的四种垃圾回收算法1.标记-清除算法2.复制算法(新生代回收算法)3.标记-整理算法(老年代回收算法)4.分代算法为什么要进行垃圾回收?回收无用的对象,清理无用的内存碎片,分配给新的内存,防止内存溢出或内存泄漏.怎么对可回收的对象进行标记?需要满足两个条件:经过可达性分析算法后,不可达的对象覆写了finalize()方法或者finalize...原创 2020-03-03 23:16:34 · 163 阅读 · 0 评论 -
回收方法区
回收方法区方法区主要回收的是那些东西?废弃常量无用的类。什么情况下会回收废弃常量回收废弃常量和回收Java堆中的对象十分类似。以常量池中字面量(直接量)的回收为例,假如一个字符串"abc"已经进入了常量池中,但是当前系统没有任何一个String对象引用常量池的"abc"常量,也没有在其他地方引用这个字面量,如果此时发生GC并且有必要的话,这个"abc"常量会被系统清理出...原创 2020-03-03 20:59:39 · 135 阅读 · 0 评论 -
GC Roots根与判断对象死活算法
都说无用的对象会被gc,那怎么判断哪些是无用的对象,那些还是有用的对象?引用计数法给对象增加一个引用计数器,每当有一个地方引用它时,计数器就+1;当引用失效时,计数器就-1;任何时刻计数器为0的对象就是不能再被使用的,即对象已"死"。引用计数法实现简单,判定效率也比较高,在大部分情况下都是一个不错的算法。比如Python语言就采用引用计数法进行内存管理。但是,在主流的JVM中没有选...原创 2020-03-03 20:42:02 · 331 阅读 · 0 评论 -
运行时数据区-程序计数器,方法区,栈,堆区
运行时数据区线程私有区域:程序计数器、Java虚拟机栈、本地方法栈线程共享区域:Java堆、方法区、运行时常量池程序计数器程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。如果当前线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是一个Native方法,这个计数器值为空。程序计数器内存区域是唯...原创 2020-03-03 18:21:54 · 362 阅读 · 0 评论 -
JVM虚拟机运行时数据区---一个程序详细运行步骤
JVM虚拟机运行时数据区想要真正了解各个区执行程序时究竟发生了什么,我们还是从代码开始public class Main { public static void main(String[] args) { Main main = new Main(); main.compute(); } private int compute()...原创 2020-03-03 17:22:00 · 198 阅读 · 0 评论 -
JVM(Java Virtual Machine)整体框架结构介绍
JVM框架结构执行Main.class的顺序先通过类装载系统把文件字节码装载到运行到方法区再通过字节码执行引擎执行相关代码完整 JVM 构成的三个部分类装载子系统运行时数据区(内存模型)字节码执行引擎浅谈堆大家学过jdk之后,估计都知道它存放的都是new出来的对象,深一点就会知道伊甸园,幸存者区和老年代,还有gc等等浅谈栈栈又叫虚拟机栈...原创 2020-03-03 15:38:59 · 362 阅读 · 0 评论 -
深入了解JVM
如果你想深入了解虚拟机结构,但却无从下手,完全可以按这个顺序去学习1. . . . . . . . . . . . . .JVM(Java Virtual Machine),整体框架结构介绍2. . . . . . . . . . . . . .JVM虚拟机运行时数据区3. . . . . . . . . . . . . .运行时数据区-程序计数器和方法区4. . ...原创 2020-03-03 14:42:11 · 210 阅读 · 0 评论 -
Java中基本数据类型和引用数据类型的存放位置
Java中基本数据类型和引用数据类型的存放位置局部变量(方法中)基本数据类型 : int a = 10; 中a 和 10都放在栈中引用数据类型 : A a = new A(); 中 引用 在栈中,new A()在堆中成员属性(类中)基本数据类型 : int a = 10; 中a 和 10都放在堆中引用数据类型 : A a = new A(); 中 对象的引用和new A()都在堆中...原创 2020-02-28 13:36:47 · 800 阅读 · 0 评论 -
JVM中Java内存划分(栈,堆,方法区)
Java内存划分JVM虚拟机栈 : 线程私有,存放的是Java8大基本数据类型,对象引用堆区 : 线程共享,存放的是类的实例对象和数组方法区 : 线程共享,主要存储所有对象数据共享区域,存储静态变量和普通方法、静态方法、常量、字符串常量(严格说存放在常量池,堆和栈都有)等类信息,、说白了就是保存类的模板,方法区也叫"永久代"但jdk8之后被元空间取代...原创 2020-02-28 11:20:23 · 377 阅读 · 0 评论 -
JVM面试题
1.描述一下JVM加载class文件的原理机制?装载:查找并加载类的二进制数据链接:验证:确保加载类的正确性,安全性(有些高手会编写class文件让JVM加载)准备:为类的静态属性分配内存,并将其赋予默认值(static int a = 30,此处a 赋予默认值 0 )解析:把类中的符号引用转换为直接引用初始化:为类的静态属性赋予初始值(上面的a = 30)2.什么时候类初始化?...原创 2020-02-28 10:28:38 · 191 阅读 · 0 评论 -
Java中的内存泄漏以及5中情况
内存泄漏内存泄漏(memory leak) : 一个不再被程序使用的变量或对象还在内存中占有空间,这些无用但可达的对象,无法被GC.内存溢出(OOM) : 使用者申请的内存大小不够申请者使用.两者关系 : 内存泄漏的堆积最终会导致内存溢出内存泄漏的5种情况 :静态集合类, ArrayList , HashMap 等等,如果这些集合类是静态的话,他们的生命周期就会和整个程序形同,那么容器...原创 2020-02-27 18:51:27 · 216 阅读 · 0 评论