JVM
文章平均质量分 86
JVM
Java小白白又白
Java小白
展开
-
JVM13 - 垃圾回收相关概念
1.System.gc() 的理解 1.1System.gc() 方法 在默认情况下,通过System.gc()和Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(不能确保立即生效)。JVM实现者可以通过System.gc() 调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触...原创 2021-01-25 22:27:57 · 325 阅读 · 0 评论 -
JVM12 - 垃圾回收相关算法
1.标记阶段:引用计数算法2.标记阶段:可达性分析算法3.对象的finalization机制4.GC Roots溯源5.清除阶段:标记-清除算法6.清除阶段:复制算法7.清除阶段:标记-压缩算法8.垃圾回收算法小结9.分代收集算法...原创 2021-01-21 10:22:29 · 517 阅读 · 0 评论 -
JVM11 - 垃圾回收概述
1.关于垃圾收集 Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要程序员手动收集。垃圾收集不是Java语言的伴生产物,早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。如今垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战。关于垃圾收集有三个经典问题:哪些内存需要回收? 什么时候回收? 如何回收?2....原创 2021-01-20 14:31:36 · 439 阅读 · 0 评论 -
JVM10 - 执行引擎
目录1.执行引擎概述 1.1 执行引擎所在位置 1.2 执行引擎概述 1.3执行工作过程2.Java 代码编译和执行过程 2.1 解释执行和即时编译 2.2解释器和编译器 2.3为什么说Java是半编译半解释型语言?3.机器码、指令、汇编语言 3.1机器码 3.2指令和指令集 3.3汇编语言 3.4高级语言 3.5程序编译流程 3.6字...原创 2021-01-15 11:21:42 · 284 阅读 · 0 评论 -
JVM09 - 对象的实例化内存布局与访问定位
1.创建对象的方式 (1)new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法 (2)Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器,并且权限必须为 public (3)Constructor的newInstance(Xxxx):反射的方式,可以调用空参的,或者带参的构造器 (4)使用clone():不调用任何的构造器,要求当前的类需要实现Cloneable接口中...原创 2021-01-13 19:58:18 · 2204 阅读 · 0 评论 -
JVM08 - 本地方法接口
1.什么是本地方法 简单地讲,一个Native Method是一个非Java语言实现的方法,比如C或C++。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,可以用extern告知C++编译器去调用C的函数。本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序。Demo:Thread类中的start0方法注:标识符native可以与其它java标识符连用,abstract除外(因为被abstract为抽象方法,但本地方法是需要...原创 2021-01-13 14:03:57 · 537 阅读 · 0 评论 -
JVM07 - 方法区
1.栈、堆、方法区三者的交互关系原创 2021-01-12 21:37:10 · 2518 阅读 · 0 评论 -
JVM06 - 本地方法栈
1.本地方法栈 1.1 本地方法栈的特点 (1)本地方法栈用于管理本地方法的调用。 (2)本地方法栈,也是线程私有的。 (3)允许被实现成固定或者是可动态扩展的内存大小,如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个stackoverflowError 异常。如果本地方法栈在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个outofMemoryE...原创 2021-01-12 14:30:20 · 546 阅读 · 0 评论 -
JVM05 - 堆
1.堆的核心概述 1.1 堆的基本概念 (1)一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 (2)Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,堆是JVM管理的最大一块内存空间,并且堆内存的大小是可以调节的。 (3)《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。 (4)所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Alloc...原创 2021-01-11 21:29:53 · 955 阅读 · 0 评论 -
从字节码的角度分析方法调用的本质
目录1.方法调用的本质2.静态链接与动态链接 2.1 静态链接: 2.2 动态链接:3.早期绑定与晚期绑定 3.1 早期绑定 3.2 晚期绑定4.非虚方法与虚方法 4.1非虚方法 4.2虚方法5.静态分派与重载6.动态分派与重写7.多态与虚方法表1.方法调用的本质 Java中可以通过对象.方法来实现方法的调用,但在虚拟机内究竟是怎么实现的呢?Demo:public void me...原创 2021-01-07 21:47:08 · 2344 阅读 · 0 评论 -
JVM04 - 虚拟机栈
1.虚拟机栈概述 1.1 栈和堆的区别 栈是运行时的单位,堆是存储的单位。栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,放在哪里。2.栈的存储单位3.局部变量表...原创 2021-01-05 23:14:45 · 2409 阅读 · 0 评论 -
JVM03 - 程序计数器
1.程序计数器概述 程序计数器(Program Counter Register):并非是广义上所指的物理寄存器,将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址(如果是在执行native方法,则是undefned)。它是程序控制流的指示器,分支、循环、跳转、...原创 2021-01-04 11:30:06 · 508 阅读 · 0 评论 -
JVM02 - 类加载子系统
1.类加载系统的作用 (1)类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识(0xCAFEBABE)。 (2)ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。 (3)加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) ...原创 2020-12-29 22:05:12 · 843 阅读 · 0 评论 -
JVM01 - 概述
目录1.JVM整体结构2.Java代码执行流程3.JVM的生命周期3.1 虚拟机的启动3.2 虚拟机的执行3.3 虚拟机的退出1.JVM整体结构 JVM是Java Virtual Machine的缩写,是一种用于计算设备的规范,是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在...原创 2020-12-29 20:35:28 · 975 阅读 · 1 评论