
jvm
文章平均质量分 76
Wheat_Liu
戒骄戒躁,学无止境
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM原理解读-CMS垃圾回收流程
JVM原理解读-CMS垃圾回收流程1、初始标记单线程STW标记GC Roots可达的老年代对象遍历新生代对象,标记可达的老年代对象GC Roots虚拟机栈中引用的对象方法区中类静态属性引用的对象方法区中敞亮引用的对象本地方法栈中JNI引用的对象2、并发标记顺着初始标记的对象递归找出所有存活的对象,并标记老年代存活的对象监听已经过扫描的对象中有变动的对象,并标记对象所在的块为dirty,变动的途径包括:从新生代晋升到老年代的对象:cms虽然会同时扫描新生代和老年代的对象,原创 2021-09-06 15:51:00 · 358 阅读 · 0 评论 -
JVM原理解读——垃圾回收
JVM原理解读——垃圾回收1、垃圾判断算法1.1、引用计数法(已废弃)记录对象被引用的次数,当引用指向该对象时计数+1,取消指向该对象时计数-1。当对象被引用次数为0时,判定该对象可回收引用计数法无法回收循环引用的对象,造成内存泄漏泄漏问题,所以被废弃1.2、可达性分析将一些堆外指向堆内的引用(GC Roots)作为根,从根开始探索所有可访问到的对象,并将他们标记为存活,后续再根据不同的垃圾回收算法进行垃圾对象的回收可作为GC Root的对象包括但不限于:栈中的引用的对象方法区中的静态原创 2021-01-13 23:34:47 · 280 阅读 · 0 评论 -
JVM原理解读——即时编译
JVM原理解读——即时编译1、解释执行编译器(javac)将源文件(.java)编译成java字节码文件(.class)的步骤是前端编译。在前端编译将字节码放入JVM后,每次执行方法调用时,JVM都会将字节码翻译成机器码并执行的过程叫解释执行解释执行没有在启动时将字节码全部翻译成机器码,所以启动效率较高但是由于执行时要进行翻译,所以执行效率相对较低2、编译执行与解释执行相反,JVM直接将第一次编译后的字节码转换为机器码,在执行方法调用时直接执行机器码,这样的过程叫编译执行编译执行在启动时将字原创 2021-01-13 23:34:20 · 408 阅读 · 2 评论 -
JVM原理解读——反射
JVM原理解读——反射以一个简单的例子开始:public class User { private Integer age; public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; }}User user = new User(); Class<?> kClass =原创 2020-11-28 14:06:44 · 264 阅读 · 0 评论 -
JVM原理解读——静态绑定和动态绑定
JVM原理解读——静态绑定和动态绑定JVM在执行方法调用时,寻找对应方法的过程就是方法的绑定分为静态绑定和动态绑定1、静态绑定静态绑定也叫编译时多态,是编译器在编译时就明确了调用方法的所在位置。符号引用在解析成实际引用时,实际引用是目标方法的内存地址以简单的例子看一下什么样的方法静态绑定:package com.company;public class Animal { public void eat() { }}public class Cat extends原创 2020-11-26 17:41:17 · 1419 阅读 · 0 评论 -
JVM原理解读——类加载过程
JVM原理解读——类加载过程java文件编译成class文件,进入虚拟机,一共需要一下三个步骤加载->链接(验证->准备->解析)->初始化1、加载将类文件流放进JVM的过程称为加载,加载的类文件流会先放到元空间(堆外内存)的静态常量池(类文件常量池)中,加载完成后会将静态常量池的符号引用放入堆内存的运行时常量池中类文件流不仅能通过class文件获取,还能从程序内部或者外部网络获取基本类型和数组类由虚拟机直接加载,其他类型需要由JVM通过类加载器找类文件的字节流加载1原创 2020-11-26 11:34:12 · 219 阅读 · 0 评论 -
JVM原理解读——Java基本类型
JVM原理解读——Java基本类型Java有8大基本类型byte、short、int、long、float、double、boolean、char1、byte值域-128~127,默认值0整型存储比较简单,直接转化为二进制存在内存中如果一个byte类型存一个超过自己范围的数会溢出Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); theUnsafe.setAccessible(true);原创 2020-11-23 17:10:13 · 181 阅读 · 2 评论 -
JVM原理解读——内存分区
JVM原理解读——内存分区我们把jvm虚拟机管理的内存区域叫做运行时数据区,把不由jvm虚拟机管理的的区域叫做直接内存或本地内存运行时数据区在逻辑上总共分为5个分区:堆、程序计数器、方法区、虚拟机栈、本地方法栈其中所有线程共享堆和方法区,每个线程都有自己的程序计数器、虚拟机栈和本地方法栈1、堆(Heap)堆是JVM内存中占用最大的一块内存空间主要用来存储大部分的对象和数组堆内存被分为新生代和老年代,新生代又被分为Eden、From Servivor和To Survivor,新生代默认比例8:原创 2020-11-23 14:35:37 · 250 阅读 · 0 评论 -
JVM调优之——禁用偏向锁优化
JVM调优之——禁用偏向锁优化JVM参数-XX:-UseBiasedLocking //关闭偏向锁(默认打开)或者-XX:+UseHeavyMonitors //设置重量级锁使用条件STW的开销>用户态与内核态切换的开销如果你想了解原理,请往下看首先我们来复习几个概念用户态与内核态操作系统中的程序,一般都是在用户态下运行的。当程序需要借助操作系统来完成一些自己无法完成的操作时,便会从用户态切换到内核态,如果频繁切换,这样的开销还是很大的重量级锁其实现原理是通过操作系统调用原创 2020-05-31 15:37:03 · 4768 阅读 · 0 评论