首页 > 编程语言 >#yyds干货盘点#Java虚拟机基本结构

#yyds干货盘点#Java虚拟机基本结构

时间:2023-08-01 15:06:45浏览次数:35  
标签:yyds Java 常量 虚拟机 线程 内存 方法

#yyds干货盘点#Java虚拟机基本结构_方法区

类加载子系统

类加载子系统负责从文件系统或网络中加载Class信息,加载的类的数据结构存放于一块叫方法区的内存空间中。

方法区

方法区主要存储类加载后的数据结构信息、运行时常量池信息、字符串、数字常量(这部分常量信息是Class文件中常量池部分的内存映射)(JDK1.7之前,JDK1.7之后字符串常量池、静态变量移至堆中)。

运行时常量池

运行时常量池(Runtime Constant Pool)是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区运行时常量池中。

Java堆

Java堆在虚拟机启动的时候建立,它是Java程序最主要的内存工作区域。几乎所有的Java对象实例都存放于Java堆中。堆空间是所有线程共享的,这是一块与Java应用密切相关的内存区域。

直接内存

Java的NIO库允许Java程序使用直接内存。直接内存是在Java堆外的、直接向系统申请的内存区域。通常访问直接内存的速度会优于Java堆。因此,出于性能考虑,读写频繁的场合可能会考虑使用直接内存。由于直接内存在Java堆外,因此,它的大小不会直接受限于Xmx指定的最大堆大小,但是系统内存是有限的,Java堆和直接内存的总和依然受限于操作系统的最大内存。

垃圾回收系统

垃圾回收系统是Java虚拟机的重要组成部分,垃圾回收器可以对方法区、Java堆和直接内存进行回收。其中,Java堆是垃圾收集器的工作重点。和C/C++不同,Java中所有的对象空间释放都是隐式的。也就是说,Java中没有蕾丝free()或者delete()这样的函数释放指定的内存区域。对于不再使用的垃圾对象,垃圾回收系统会在后台默默工作,默默查找、标识并释放垃圾对象,完成包括Java堆、方法区和直接内存中的全自动化管理

Java栈

每一个Java虚拟机线程都有一个私有的Java栈。一个线程的Java栈在线程创建的时候被创建。Java栈中保存着帧信息,Java栈中保存着局部变量、方法参数,同时和Java方法调用、返回密切相关。

本地方法栈

本地方法栈和Java栈非常类似,最大的不同在于Java栈用于方法的调用,而本地方法栈则用于本地方法的调用。作为对Java虚拟机的重要扩展,Java虚拟机允许Java直接调用本地方法(通常使用C语言编写)。

PC(Program Counter)寄存器

PC寄存器也是每个线程私有的空间,Java虚拟机会为每一个Java线程创建PC寄存器。在任意时刻,一个Java线程总是在执行一个方法,这个正在被执行的方法称作当前方法。如果当前方法不是本地方法,PC寄存器就会指向当前正在被执行的指令。如果当前方法是本地方法,那么PC寄存器的值就是undefinded。

执行引擎

执行引擎是Java虚拟机的最核心组件之一,它负责执行虚拟机的字节码。现代虚拟机为了提高执行效率,会使用即时编译技术将方法编译成机器码后在执行。

标签:yyds,Java,常量,虚拟机,线程,内存,方法
From: https://blog.51cto.com/u_11365839/6922092

相关文章

  • 视频直播网站源码,前端效果-css+javascript
    视频直播网站源码,前端效果-css+javascript <!DOCTYPEhtml><html><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content="w......
  • Java集合框架
    Java集合框架集合框架用于存储数据的容器,集合框架是为表示和操作集合而规定的一种统一的标准的体系结构任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法接口表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态......
  • java两个list对象取差集
    在Java开发中,我们经常会遇到需要对两个List对象进行比较并取得它们的差集的情况。差集是指在第一个List中出现而在第二个List中没有出现的元素集合。本文将介绍如何使用Java来实现这个功能,并提供代码示例。方法一:使用循环嵌套遍历比较一种常见的方法是通过嵌套循环遍历比较两个Li......
  • 剥下“java.lang.OutOfMemoryError: unable to create new native thread”的外衣
     星期一早上到了公司,据称产品环境抛出了最可爱的异常—OutOfMemory, 它是这样来描述他自己的:java.lang.OutOfMemoryError:unabletocreatenewnativethread而且这位仁兄竟然还堂而皇之地同时出现在了3个application里面,所有应用全部遭殃。那可爱的OOM是如何产生的呢?直接原因......
  • 智慧校园源码:vue2+Java+springboot+MySQL+elmentui+jpa+jwt
    智慧校园综合管理云平台源码系统主要以校园安全、智慧校园综合管理云平台为核心,以智慧班牌为学生智慧之窗,以移动管理平台、家校沟通为辅。教师—家长一学校—学生循环的无纸化管理模式及教学服务,实现多领域的信息互联互通以及校园管理一体化、信息数据化、数据自动化。智慧班牌融合......
  • java安装失败错误代码
    java安装错误安装路径不是默认的安装路径,并且安装路径有中文。电脑是32位系统,但是安装的jdk64位的。安装过程中内存不足,程序本身有缺陷。 点击Windows键+R打开运行程序。在运行框中键入控制面板。在出现的窗口中找到Java并将其打开。在Java控制面板中打开安全选项卡。删除浏......
  • Java常用类
    Java常用类Object类getClass() 获取类notify()和wait() 唤起进程和阻塞进程equals()判定两个对象是否相等,注意子类需要重写判定方法,因为原方法比较的是引用,肯定不相等Math类常见方法abs绝对值pow求幂ceil向上取整floor向下取整......
  • java-多线程并发,CompletableFuture
    //无返回值@OverridepublicvoidexecCreateYmDetDataSubTask(YmDetCreateWorkerDtoymDetCreateWorkerDto){List<Long>sendIdList=ymDetCreateWorkerDto.getSendIdList();List<List<Long>>subLists=Lists.partition(sendIdList,1......
  • java时间天数差
    时间天数差privateintdiffInDays(Datestar,DateendDay){DatenextDay=star;intdiffInDays=1;while(nextDay.before(endDay)){//当明天不在结束时间之前是终止循环Calendarcld=Calendar.getInstance();cld.setTime(star);cld......
  • java怎么写接口,java开发api接口教程
    在大家的工作中,经常写界面。而且,最常用的是http接口。但是,对于初学者Java工作人员来说,写http界面还很难。那么,用实例来说明吧。一、建设项目首先,生成SpringBoot项目。省略如何构建此处,并引入相关依赖关系:org.springframework.bootartifactIdspring-boot-starter/从属从属关系or......