![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 96
java虚拟机学习笔记
BlogY
这个作者很懒,什么都没留下…
展开
-
JVM—9—Class文件结构
一.字节码文件的跨平台性1.Java语言:跨平台的语言(write once,run anywhere)当Java源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再次编译。这个优势不再那么吸引人了,Python、PHP、Perl、Ruby、Lisp等有强大的解释器。跨平台似乎已经快成为一门语言必选的特性。2.Java虚拟机:跨语言的平台Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格所关联。无论使用何种语言进行软件开发,只要能将源转载 2021-03-27 10:30:18 · 146 阅读 · 0 评论 -
JVM—8—垃圾回收器
垃圾回收器GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性语法层面:Lambda表达式、switch、自动拆箱装箱、enumAPI层面:Stream API、新的日期时间、Optional、String、集合框架底层优化:JVM优化、GC的变化、元空间、静态域、字符串常量池位置变化转载 2021-03-23 22:05:19 · 999 阅读 · 0 评论 -
JVM—7—垃圾回收概述及相关算法
一.垃圾回收概述1.概念这次我们主要关注的是黄色部分,内存的分配与回收2.什么是垃圾在提到什么是垃圾之前,我们先看下面一张图从上图我们可以很明确的知道,Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,转载 2021-03-22 12:20:57 · 280 阅读 · 0 评论 -
JVM—6—直接内存,执行引擎,StringTable
一.对象实例化内存布局与访问定位1.对象实例化1.1 面试题对象在JVM中是怎么存储的?对象头信息里面有哪些东西?Java对象头有什么?从对象创建的方式 和 步骤开始说1.2 对象创建方式new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器Constructor的newInstance(XXX):反射的方式,可以调用空参的,或者带参的构造原创 2021-03-21 11:09:23 · 139 阅读 · 0 评论 -
JVM—5—堆,方法区
文章目录一.堆的核心概念1.前言2.堆内存细分二.设置堆内存大小与OOM1.前言2.OutOfMemory举例三.年轻代与老年代四.图解对象分配过程1.概念2.图解过程3.思考:幸存区区满了后?4.对象分配的特殊情况5.代码演示对象分配过程6.常用的调优工具7.总结五.Minor GC,MajorGC、Full GC1.前言2.Minor GC3.Major GC4.Full GC5.GC 举例六.堆空间分代思想七.内存分配策略八.为对象分配内存:TLAB1.问题:堆空间都是共享的么?2.为什么有TLAB?原创 2021-03-20 00:23:37 · 387 阅读 · 0 评论 -
JVM—4—虚拟机栈,本地方法接口,本地方法栈
一.虚拟机栈概述1.前言由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有Java堆(heap)和Java栈(stack)?为什么?首先栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么原创 2021-03-19 22:43:57 · 193 阅读 · 0 评论 -
JVM—3—运行时数据区概述及线程,程序计数器
文章目录一.运行时数据区概述1.前言2.内存3.运行时数据区的完整图二.线程三.程序计数器1.介绍2.作用3.代码演示4.使用PC寄存器存储字节码指令地址有什么用呢?5.PC寄存器为什么被设定为私有的?6.CPU时间片一.运行时数据区概述1.前言本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时原创 2021-03-19 22:22:03 · 108 阅读 · 0 评论 -
JVM—2—类加载子系统
文章目录一.概述二.类加载器子系统作用三.类的加载过程1.加载阶段2.链接阶段3.初始化阶段四.类加载器的分类1.JVM的两种类加载器2.虚拟机自带的加载器3.扩展类加载器(Extension ClassLoader)4.应用程序类加载器(系统类加载器,AppClassLoader)5.用户自定义类加载器6.查看根加载器所能加载的目录:7.关于ClassLoader五.双亲委派机制1.工作原理2.双亲委派机制举例3.沙箱安全机制4.双亲委派机制的优势六.类的主动使用和被动使用1.如何判断两个class对象是原创 2021-03-18 15:35:39 · 233 阅读 · 2 评论 -
JVM—1—JVM与java体系结构
文章目录一.引言二.字节码三.多语言混合编程四.虚拟机与Java虚拟机1.虚拟机2.Java虚拟机3.JVM的位置4.Java的体系结构5.JVM整体结构6.Java代码执行流程7.JVM的架构模型8.字节码反编译9.JVM生命周期五.JVM发展历程1.Sun Classic VM2.HotSpot VM3.IBM的J94.Taobao JVM5.Graal VM一.引言计算机系统体系对我们来说越来越远,在不了解底层实现方式的前提下,通过高级语言很容易编写程序代码。但事实上计算机并不认识高级语言每个原创 2021-03-16 16:25:40 · 119 阅读 · 0 评论