JVM学习整理(一)

img

一、JVM的基本介绍

JVM 是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机,一种规范。通过在实际的计算机上仿真模拟各类计算机功能实现···

好,其实抛开这么专业的句子不说,就知道JVM其实就类似于一台小电脑运行在windows或者linux这些操作系统环境下即可。它直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作。

1.1 Java文件是如何被运行的

比如我们现在写了一个 HelloWorld.java 好了,那这个 HelloWorld.java 抛开所有东西不谈,那是不是就类似于一个文本文件,只是这个文本文件它写的都是英文,而且有一定的缩进而已。

那我们的 JVM 是不认识文本文件的,所以它需要一个 编译 ,让其成为一个它会读二进制文件的 HelloWorld.class

① 类加载器

如果 JVM 想要执行这个 .class 文件,我们需要将其装进一个 类加载器 中,它就像一个搬运工一样,会把所有的 .class 文件全部搬进JVM里面来。

② 方法区

方法区 是用于存放类似于元数据信息方面的数据的,比如类信息,常量,静态变量,编译后代码···等

类加载器将 .class 文件搬过来就是先丢到这一块上

③ 堆

主要放了一些存储的数据,比如对象实例,数组···等,它和方法区都同属于 线程共享区域 。也就是说它们都是 线程不安全

④ 栈

这是我们的代码运行空间。我们编写的每一个方法都会放到 里面运行。

我们会听说过 本地方法栈 或者 本地方法接口 这两个名词,不过我们基本不会涉及这两块的内容,它俩底层是使用C来进行工作的,和Java没有太大的关系。

⑤ 程序计数器

主要就是完成一个加载工作,类似于一个指针一样的,指向下一行我们需要执行的代码。和栈一样,都是 线程独享 的,就是说每一个线程都会有自己对应的一块区域而不会存在并发和多线程的问题。

小总结

  1. Java文件经过编译后变成 .class 字节码文件
  2. 字节码文件通过类加载器被搬运到 JVM 虚拟机中
  3. 虚拟机主要的5大块:方法区,堆都为线程共享区域,有线程安全问题,栈和本地方法栈和计数器都是独享区域,不存在线程安全问题,而 JVM 的调优主要就是围绕堆,栈两大块进行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4827.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSP网上订餐管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 网上订餐管理系统是一套完善的web设计系统,对理解JSP java SERLVET mvc编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发,数据库为Mysql5.0&a…

Java微服务金融项目智牛股 项目简介与金融知识介绍及技术特点

项目简介 金融交易平台服务于金融衍生产品, 包含外汇、贵金属、期货、股票。 各产品具有不同属性与交易规则, 本项目对标MT4等大型交易平台, 遵循FIX全球最广泛的金融市场通用协议。 实现从证券注册开户、行情订阅与呈现, 股票撮合…

【GPT】如何拥有离线版本的GPT以及部署过程中的问题

【背景】 目前很多公司由于数据安全的问题,不能使用OpenAI的GPT,同时也没有必要非得使用如此泛用化的GPT。很多公司因此有训练自己的离线GPT的需求,这样的GPT只需要具备专业知识即可。 要使这个成为可能,首先就需要能够让GPT的Mo…

SAP ABAP 如果某字段没有参数ID,如自开发程序使用的自建表 新建参数ID

1)新建参数ID sm30 TPARA 维护 输入ID和描述 2) 参数ID和Se11数据元素 绑定

【MySQL学习笔记】(六)MySQL基本查询

表的增删查改 1 create1.1 单行数据全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2 retrieve2.1 select列2.1.1 全列查询2.2.2 指定列查询2.2.3 查询字段为表达式2.2.4 为查询结果指定别名2.2.5 结果去重 2.2 where 条件2.2.1 null的查询 2.3 结果排序2.4 筛选分…

Leetcode 75算法题( 上)(使用C++实现)

数组 / 字符串 1768.交替合并字符串 两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 ​ 代码如下&#xff1a…

初识SpringMVC

HelloSpringMVC 1.新建一个moudle&#xff0c;添加web的支持 2.导入了SpringMVC的依赖 <!-- 依赖--><dependencies> <!-- Junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version&…

如何找到更多音视频开发学习资料和资源?

如果你对学习音视频开发感兴趣&#xff0c;以下是一些建议&#xff0c;可以帮助你获取更多相关的资料和资源&#xff1a; 在线学习平台&#xff1a;参考一些知名的在线学习平台&#xff0c;如Coursera、Udemy、edX等&#xff0c;搜索他们的课程目录&#xff0c;看是否有与音视频…

基于深度学习的高精度条形码二维码检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度条形码二维码检测识别系统可用于日常生活中或野外来检测与定位条形码二维码目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的条形码二维码目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系…

Android音视频开发实战02-Jni

一 JNI 1.1 什么是JNI JNI是Java Native Interface的缩写&#xff0c;是Java提供的一种机制&#xff0c;用于在Java代码中调用本地&#xff08;C/C&#xff09;代码。它允许Java代码与本地代码进行交互&#xff0c;通过JNI&#xff0c;Java应用程序可以调用一些原生库或者操作…

责任链模式(Chain of Responsibility)

别名 命令链&#xff08;Chain of Command&#xff09;。 定义 责任链是一种行为设计模式&#xff0c;允许你将请求沿着处理者链进行发送。收到请求后&#xff0c;每个处理者均可对请求进行处理&#xff0c;或将其传递给链上的下个处理者。 前言 1. 问题 假如你正在开发一…

Linux基于thundersvm使用GPU对svm进行加速

Linux基于thundersvm使用GPU对svm进行加速 文章目录 Linux基于thundersvm使用GPU对svm进行加速下载方法pip快速下载命令 普通下载命令问题解决方法以下操作需要使用sudo权限 使用thundersvm调用方式 在代码中的使用训练代码更改更改内容 加载模型同样需要导入thundersvm更改内容…