# 深入理解 Java 虚拟机 (二)

news2024/7/4 2:03:25

深入理解 Java 虚拟机 (二)

Java内存模型

主内存与工作内存

  • 所有的变量存储在主内存(虚拟机内存的一部分)
  • 每条线程有自己的工作内存,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行、不能直接读写主内存中的数据。
  • 不同的线程无法直接访问对方工作内存中的变量。
    在这里插入图片描述

内存间交互操作

  • Java中,内存之间的交互操作通常是通过对象的引用来实现的。当一个对象被创建时,它被存储在堆内存中,并且在栈内存中分配一个引用指向该对象。通过这个引用,可以访问和操作对象的数据和方法。
8种基本操作
  • lock:锁定,作用于主内存变量,它把一个变量标识为一条线程独占的状态。

  • unlock:解锁,解锁后的变量才能被其他线程锁定。

  • read:读取,作用于主内存变量,它把一个主内存变量的值,读取到工作内存中。

  • load:载入,作用于工作内存变量,它把read读取的值,放到工作内存的变量副本中。

  • use:使用,作用于工作内存变量,它把工作内存变量的值传递给执行引擎,当JVM遇到一个变量读取指令就会执行这个操作。

  • assign:赋值,作用于工作内存变量,它把一个从执行引擎接收到的值赋值给工作内存变量。

  • store:存储,作用域工作内存变量,它把工作内存变量值传送到主内存中。

  • write:写入,作用于主内存变量,它把store从工作内存中得到的变量值写入到主内存变量中。

原子性可见性与有序性

原子性
  • 原子性是指一个操作或者多个操作要么全部执行并且对外部可见,要么都不执行,不会出现中间状态。
  • Java 中,通过 synchronized 关键字和 Lock 接口来实现原子性操作。
可见性
  • 可见性是指一个线程对共享变量的修改能够及时地被其他线程观察到。
  • Java 中,通过 volatile 关键字和 synchronized 关键字来实现可见性。
  • volatile 关键字可以保证共享变量的可见性,但不能保证原子性;synchronized 关键字可以保证共享变量的原子性和可见性。
有序性
  • 有序性是指一个线程中的操作按照程序代码的先后顺序执行,并且不会被重排序。
  • Java 中,由于处理器、编译器和虚拟机等因素的影响,程序代码中的操作可能会被重排序,从而导致多线程程序出现不可预期的结果。
  • 为了保证有序性,Java 提供了 happens-before 规则,用于定义操作之间的执行顺序。例如,一个unlock操作happens-before于后续对同一个锁的lock操作。

锁优化

自旋锁

  • 自旋锁(Spin Lock)是一种基本的锁实现方式,它是一种忙等待的锁,线程在获取锁时不会被挂起,而是循环检测锁的状态直到获取到锁为止。
  • 自旋锁适用于临界区代码执行时间非常短暂的情况,避免线程频繁地切换和阻塞,提高了锁的性能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端 CSS 经典:图层放大的 hover 效果

效果 思路 设置 3 层元素&#xff0c;最上层元素使用 clip-path 裁剪成圆&#xff0c;hover 改变圆大小&#xff0c;添加过渡效果。 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><meta http-eq…

Linux-笔记 OverlayFS文件系统小应用 恢复功能

前言 通过另一章节 OverlayFS文件系统入门 中已经大致了解了原理&#xff0c;这里来实现一个小应用。通过前面介绍我们已经知道lowerdir是只读层&#xff0c;upperdir是可读写层&#xff0c;merged是合并层&#xff08;挂载点&#xff09;&#xff0c;那么我们可以利用这个机…

[leetcode] smallest-k-lcci. 最小的k个数

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> smallestK(vector<int>& nums, int k) {int L 0, R nums.size() - 1;while (L < R){int left L, right R;int key nums[left];while (left < right){while (left &l…

【人工智能】—基于线性回归和多项式回归模型预测人均收入的研究

引言 随着人工智能技术的飞速发展&#xff0c;机器学习已成为数据分析和预测领域的重要工具。在众多机器学习算法中&#xff0c;线性回归和多项式回归因其模型简单、易于理解和实现而受到广泛应用。本文旨在探讨如何利用这两种回归模型对人均收入进行预测。线性回归模型以其简…

作 业 二

cs与msf权限传递 1、进入cs界面,首先来到 Cobalt Strike 目录下&#xff0c;启动 Cobalt Strike 服务端 2、用客户端进 3、建立监听 4、生成脚本文件 5、开启服务&#xff0c;让win_2012 下载木马文件并运行 6、显示已经获取到了win的权限 转到Metasploit Framework 7、进去m…

使用conda安装第三方包报错CondaSSLError

使用conda安装第三方包报错CondaSSLError 1. 报错信息2. 解决方法 1. 报错信息 错误描述&#xff1a;刚刚下载的 anaconda 在使用 conda 安装 pytorch 时报错&#xff08;CondaSSLError: OpenSSL appears to be unavailable on this machine. OpenSSL is required to download …

算法刷题日志 hot100 数组分类

文章目录 [169. 多数元素](https://leetcode.cn/problems/majority-element/)旋转图像215. 数组中的第K个最大元素](https://leetcode.cn/problems/kth-largest-element-in-an-array/description/)238. 除自身以外数组的乘积](https://leetcode.cn/problems/product-of-array-e…

线性代数基础概念:向量空间

目录 线性代数基础概念&#xff1a;向量空间 1. 向量空间的定义 2. 向量空间的性质 3. 基底和维数 4. 子空间 5. 向量空间的例子 总结 线性代数基础概念&#xff1a;向量空间 向量空间是线性代数中最基本的概念之一&#xff0c;它为我们提供了一个抽象的框架&#xff0c…

计算机视觉全系列实战教程 (十四):图像金字塔(高斯金字塔、拉普拉斯金字塔)

1.图像金字塔 (1)下采样 从G0 -> G1、G2、G3 step01&#xff1a;对图像Gi进行高斯核卷积操作&#xff08;高斯滤波&#xff09;step02&#xff1a;删除所有的偶数行和列 void cv::pyrDown(cv::Mat &imSrc, //输入图像cv::Mat &imDst, //下采样后的输出图像cv::Si…

Ceil()——向上取整函数

函数原型为&#xff1a; double ceil(double x); 大家可以在这个网站里更清晰的了解ceil - C Reference (cplusplus.com) 下面借助一道例题来帮助大家理解&#xff1a;牛牛的快递_牛客题霸_牛客网 (nowcoder.com) 我们分析题得知&#xff0c;在大于1的情况下&#xff0c;只要…

鸿蒙开发系统基础能力:【@ohos.screenLock (锁屏管理)】

锁屏管理 锁屏管理服务是OpenHarmony中系统服务&#xff0c;为锁屏应用提供注册亮屏、灭屏、开启屏幕、结束休眠、退出动画、请求解锁结果监听&#xff0c;并提供回调结果给锁屏应用。锁屏管理服务向三方应用提供请求解锁、查询锁屏状态、查询是否设置锁屏密码的能力。 说明&a…

OutOfMemoryError能被catch(Exception)捕获吗?

背景 写了一个 Kafka 消费者程序&#xff0c;Kafka 集群中数据量过大时&#xff0c;消费线程无故退出了&#xff0c;日志打印了心跳 OOM 异常信息&#xff1a; 但是消费线程里面的 run 方法里面明明包含了 catch (Exception e) &#xff0c;结尾信息没有打印异常&#xff0c;…

星坤Type-A连接器:创新快充技术,引领电子连接!

快速发展的电子时代&#xff0c;消费者对电子设备的性能和便利性有着更高的要求。特别是在充电和数据传输方面&#xff0c;快充技术和高速传输已成为市场的新宠。中国星坤公司推出的Type-A连接器系列&#xff0c;以其卓越的性能和创新的设计&#xff0c;满足了市场对高效、稳定…

考研数学复习(1/9):函数与极限

目录 函数与极限 1. 函数的概念 1.1 函数的定义 1.2 函数的表示方法 1.3 函数的分类 1.4 函数的运算 2. 极限的概念 2.1 极限的定义 2.2 极限的性质 2.3 极限的计算方法 2.4 极限的应用 3. 连续函数 3.1 连续函数的定义 3.2 连续函数的性质 3.3 连续函数的分类 …

从官方源码精简出第1个FreeRTOS程序

一、下载官方源码 1、打开百度搜索freerots&#xff0c;找到官网:FreeRTOS官网 2、将源码解压到没有中文目录的路径下 二、删减目录 1、删除FreeRTOS-Plus和tools 2、删除FreeRTOS/Demo下除CORTEX_STM32F103_Keil外的所有文件 3、删除FreeRTOS\Source\portable下除RVDS和MemM…

观星观景大屏呈现 实时拍摄长焦定格 当当狸智能天文望远镜TW2来啦

《宇宙的奇迹》中有这样一句话&#xff1a;“我们与那些遥远星系息息相关&#xff0c;无论它们是如何与我们天各一方&#xff0c;那些经过数十亿年旅行到达地球的光线&#xff0c;终究会把我们联系在一起”。 想象一下—— 等到繁星低垂&#xff0c;月光皎洁之时&#xff0c;…

景区智能厕所系统让旅游更便捷、更舒适

在旅游业蓬勃发展的今天&#xff0c;游客对于旅游体验的要求越来越高&#xff0c;而景区的基础设施建设也在不断创新和完善。其中&#xff0c;景区智能厕所系统的出现&#xff0c;无疑为游客带来了更加便捷、舒适的旅游体验。 一、智能厕所系统首先体现在其精准的定位和引导功能…

力扣1541. 平衡括号字符串的最少插入次数

Problem: 1541. 平衡括号字符串的最少插入次数 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 Problem: 力扣921. 使括号有效的最少添加 类似于上述题目&#xff0c;不过此时一个左括号要和两个右括号配对 1.同理上述题目&#xff0c;遍历字符串时若遇见一个左括…

Windows Nginx更新版本

一、准备新版安装包 nginx: downloadhttps://nginx.org/en/download.html 二、升级Nginx 1、备份原Nginx 2、上传新版Nginx 上传并解压 3、更新版本 1&#xff09;原文件夹更新 1.关闭nginx 查看原版本号 nginx -v 命今关闭 nginx -s stop 确认进程里没有nginx&#…

绕过命令过滤器:探索UnixLinux中的Bypass技术

前言 在Unix或Linux系统的安全测试和网络防御中&#xff0c;了解如何绕过命令过滤器是非常重要的。今天&#xff0c;我们将探讨几种利用shell命令绕过安全限制的技巧&#xff0c;这些技巧常用于渗透测试中&#xff0c;以检测系统的安全漏洞。 0x00 命令介绍 一般而言&#x…