随笔分类 - JVM
摘要:一、类加载子系统 类加载子系统负责从文件系统或者网络中加载class文件,Class类信息存放于一块称为方法区的内存空间 1.1、加载模块 类的全限定名获取定义此类的二进制字节流 将字节流所代表的的静态存储结构转化为方法区的运行时数据; (1)、加载器 引导类加载器BootStrapClassLoa
阅读全文
摘要:一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器、本地方法栈和虚拟机栈。 一、堆的核心概念 一个jvm实例只存在一个堆内存,堆也是java内存管理的核心区域 编写Heap_01/Heap_02代码,两个java程序同时启动,就产生两个J
阅读全文
摘要:Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法(一般非Java实现的方法)的调用。 本地方法栈,也是线程私有的。 允许被实现成固定或者是可动态拓展的内存大小。(和Java虚拟机栈在内存溢出方面情况是相同的) 固定:如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Jav
阅读全文
摘要:一、本地方法接口 在讲Java虚拟机运行时数据区中本地方法栈之前,我们先来说说运行时数据区之外的一个叫本地方法接口的东西简称JNI(Java Native Interface) 简单来讲,一个Native Method就是一个java调用非java代码的接口,一个Native Method 是这样一
阅读全文
摘要:一、JVM栈概述 1.1、虚拟机栈出现的背景 由于跨平台性的设计,java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的,寄存器和CPU的耦合性高。 JVM为何选择基于栈的结构? JVM为何要基于栈来设计有几个理由。一个是JVM要设计成与平台无关的,而平台无关性就是要保
阅读全文
摘要:JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。 一个线程对应一个 JVM Stack(虚拟机栈)。J
阅读全文
摘要:内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区) 每个Java应用程序
阅读全文
摘要:一、内存概述 简图 详细图 本章节针对Class Loader SubSystem类加载子系统的工作流程这一块展开讲解 二、类加载子系统作用 类加载子系统负责从文件系统或者网络中加载class文件(以二进制流的方式,物理磁盘中的文件加载到内存,就是以二级制流的方式),class文件在文件开头有特定的
阅读全文
摘要:首先要知道计算机本身不识别高级语言, java程序需要经过解释编译成汇编语言,汇编语言再向下转化成0、1表示的二进制机器指令,CPU执行的是机器指令。 一、java及JVM简介 1.1、Java是夸平台的语言 一次编译,到处运行,是因为不同的操作系统对java虚拟机都有各自的实现,java语言运行在
阅读全文