LWN:支持Intel线性地址屏蔽功能!

快速了解AMD和英特尔 AMD(Advanced Micro Devices)是一家专注于计算机硬件的半导体公司,成立于1969年,总部位于美国加利福尼亚州的桑尼维尔。AMD的主要产品线包括CPU、显卡、服务器CPU、显示芯片、主板芯片组以及内存等。CPU产品线:AMD的锐龙(Ryzen)系列处理器是其面向主流桌面市场的产品,提供了从入门级到高端的多种选择。例如,AMD Ryzen 7 8745H是一款面向中高端市场的处理器,具备4核心8线程,基础频率为3.8GHz,三级缓存为16MB。 阅读详情

关注了就能看到更多这么棒的文章哦~

Support for Intel's Linear Address Masking

Support for Intel's Linear Address Masking
DeepL assisted translation
https://lwn.net/Articles/902094/

一个 64 位的指针可以对海量的内存进行寻址,远远超过真实世界中一个应用程序可能需要的内存数量。因此,在这种类型的指针中,有一些 bit 在表示地址的方面并不是必须要用的,那么它们就可能会被用于其他需求场景。在指针中存储几个 bit 的 metadata 已经是一个很常见的用例了,以至于目前在多个架构上都有在硬件层面上增加对这个功能的支持。英特尔也不例外;对其 "线性地址屏蔽"(LAM, Linear Address Masking)功能的支持已经在慢慢地靠近 mainline kernel 了。

CPU 可以通过在对指针进行解析引用(dereferencing)之前直接屏蔽某些 bit,就可以支持这种 metadata 了。当然,每个 CPU 厂商都在以不同的方式来支持这个功能。Arm 的 top-byte ignore 功能也是用来将地址中最高位的那个 byte 用来做其他用途的;自 2019 年 Linux kernel 5.4 版问世以来,内核一直就支持该功能。相反,AMD 的 "upper address ignore" 功能只允许以这种方式来使用最上面的七个 bit;今年早些时候提出了对这个功能的支持,但尚未被接受。

AMD 这个功能面临的一个障碍是,这个功能让使用了最高位这个 bit 的用户空间指针也是可以合法创建的了。在目前的内核中,只有内核空间的地址设置了最高 bit,而大量的底层代码都依赖于这个特点来进行判断。混淆用户空间和内核空间地址的后果可能会很严重,会出现大量漏洞也许 CVE 编号都不够用了的,所以开发者对任何可能导致这种混淆的新功能都很紧张。可能会有相当多的代码要被审计,才有可能让我们相信允许用户空间地址设置该 bit 不会引出一系列的安全漏洞。

英特尔的 LAM 功能提供了两种模式,这两种模式都与其他厂家的方案不同:

  • LAM_U57 允许在第 62 到 57 位有 6 位元数据。

  • LAM_U48 允许在第 62 到 48 位有 15 位元数据。

值得注意的是,这两种模式都不允许将第 63 位(最重要的位)用于此目的,所以 LAM 避免了这个给 AMD 带来不小麻烦的陷阱。

Kirill Shutemov 的这个 patch set 增加了对 LAM 的支持。由于 LAM 必须由特权代码在 CPU 中启用,所以该 patch set 以两个新的 arch_prctl()命令的形式来引入了一个新的 API,希望能够支持任何 CPU 的指针 metadata 机制。第一个是 ARCH_ENABLE_TAGGED_ADDR,使当前进程可以使用 LAM。其具有一个整数参数,表示进程希望在指针中存储多少 bit 的数据,并从上面两种方式中选择一种(肯定得要包含该 bit)。

希望使用这个功能的程序需要知道他们的 metadata 可以存储在指针的哪个位置;如果这样的程序要在不同的架构上移植运行,那么就需要一种通用的方法来实现这一点。因此引出了第二个 arch_prctl()操作,ARCH_GET_UNTAG_MASK,它会返回一个 64 位的值,设置了相应的 bit 来表示可用的空间。该 patch set 还在每个进程的 /proc 中的 arch_status 文件中增加了一行,用来指示起作用的 mask。

整体来说,LAM patch 没有什么争议;人们认为此功能比 AMD 的对应功能设计得更好。不过对于 LAM_U48 模式有一些担忧,可能会阻止它能很快在 Linux 中得到支持。

自 2017 年的 4.11 版本以来,Linux 在 x86 系统上支持五级页表。在启用了五级页表的系统上,57 位的地址空间可供系统中运行的进程来使用。内核通常不会将内存映射到该地址空间的前九个 bit,也就是第五级页表所增加的部分,因为担心这会破坏应用程序;除此之外,有一些程序可能会在这些 bit 上存储 metadata,哪怕是没有硬件支持的时候。在使用这个技巧时必须更加小心,因为 metadata 的那些 bit 在解析引用指针之前必须要先 mask 掉,这个确实是可能实现的。不过,如果这些 bit 对于在其地址空间内寻址的内存来说是必须要用的,那么这种程序显然会出问题。

为了避免这种问题,内核只在应用程序在 mmap() 调用中明确要求的时候,会仅仅将内存映射到地址空间的上半部分。很少有应用程序需要这样做,而且在希望这么做的时候,也很容易实现。

LAM_U48 模式使用了 15 个指针位,只为实际地址留下 48 个有效位,显然与之前使用了 57 位地址空间的用法就不一致了。有人可能会争辩说,任何试图同时使用这两种模式的程序员碰到任何问题都是罪有应得的,不过我们最好还是尽可能不要提供 useless footguns 了。由于内核已经在这两种模式的使用中都有办法控制,因此可以很好地确保它们不被同时使用。

在 Shutemov 的 patch set 中,启用 LAM_U48 功能放在了最后的一组可选的 patch 中;如果它们被排除在外,那么内核将只支持 LAM_U57 模式,这当然是解决问题的一种方式。如果这个 patch 被包括在内,那么用户空间必须要选择一下它将使用这两个特性中的哪一个(如果有的话);首先被选中的模式会成为现实。如果 LAM_U48 被启用了,那么这个进程映射内存时就永远不可以利用地址空间的高 9 位了。但是如果该进程在试图启用 LAM_U48 时已经在那个范围内映射了一些内存,那么该尝试就会失败。

这似乎是一个合理的解决方案,它可以让所有的功能都可用,并让进程选择他们将实际使用的功能,但开发人员仍然担心 LAM_U48 模式。Alexander Potapenko 建议,如果这种模式进入 mainline,发行版提供商也会想要移除它,但是随着时间的推移,其他的改动会让他们更加难以进行移除。Dave Hansen,x86 的维护者之一,说他不会立即合并 LAM_U48,但会考虑在将来合并。

因此,虽然似乎没有什么阻碍 LAM 的采用,但目前还无法确定所有的 LAM patch 是否会很快被合入。如果有人有 LAM_U48 的使用场景,那么现在就是一个很好的时机来让开发者们知道这些用例。否则他们可能会发现这个功能未来不再可以使用了。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

【Python爬虫实战】 不生产小说,只做网站的搬运工,太牛逼了~(附源码) 好啦!文章到这里就正式结束,比起听歌我还是更喜欢看小说的啦!大家喜欢什么项目可以评论区留言哦~有问题或者需要视频学习的可以找我沟通哈👇。 阅读详情

相关推荐

电力现货市场出清机制解析:从理论到实践(附节点电价计算实例)

本文深入解析电力现货市场的核心出清机制,重点阐述了节点边际电价的计算原理与实践方法。通过对比系统边际电价、节点边际电价和分区边际电价三种模式,揭示了市场出清价格如何反映电力供需与网络阻塞。文章结合IEEE 30节点系统,提供了基于MATLAB和最优潮流模型的计算实例,详细展示了从构建模型到求解对偶变量以获取节点电价的全过程,为理解电力市场定价机制提供了从理论到实践的完整路径。

whisky的博客 756

Linus批评英特尔的LAM代码,拒绝将其合并到内核

所以我真的认为这是完全错误的,除了命名之外, 它全都是一些无效的假设。简而言之,英特尔 LAM 在使用用户空间地址的未翻译地址位,因此它可用于用户空间内存清理和标记等元数据的多种用途,它的本质上类似于 AMD 的高位地址忽略 “UAI”(Upper Address Ignore )以及 Arm 的顶部字节忽略 “TBI”(Top-Bits-Ignore)功能。所以我真的认为 LAM 是一个根本性的设计错误,虽然我把它拉出来并解决了琐碎的冲突,但我又把它拉了下来,因为它的设计是错误的。

IT界那些事儿 264

VNC Viewer建立多个图形界面,来远程访问同一个服务器(Ubuntu)

如题。目前已经有了一个VNC viewer连接,那么如果再开一个图形界面呢? 思路主要是:新建一个用户,从这个用户新建一个vnc连接,然后访问图形界面。

the Blog of 等不到天亮丶等时光 5899

搬运工——ubuntu(1)

1.在Ubuntu上安装gcc https://www.linuxidc.com/Linux/2019-06/159059.htm 2.Ubuntu执行apt-get update报错:W: 无法下载 http://cn.mirrors.ustc.edu.cn/ubuntu/dists/bionic/InRelease 连接失败 https://blog.youkuaiyun.com/BigData_Mini...

forest_6120的博客 10万+

ComfyUI-controlnet控制出图

提供加载预处理器节点。

Bu2n的博客 5494

FastH3 + vLLM-Omni:MiniMax H3 视频生成本地部署与加速实战

随着多模态大模型在视频生成领域的普及,如何高效部署和加速推理成为工程实践的关键。vLLM作为高性能推理框架,通过PagedAttention和continuous batching显著优化了大模型吞吐;而FastH3则针对特定模型结构进行算子融合和CUDA优化。结合vLLM-Omni对多模态输入的支持,可以将MiniMax H3的视频生成耗时从分钟级压缩至秒级。本文以视频生成模型为例,详细拆解环境配置、推理优化与问题排查,为多模态模型本地部署提供参考。

ciya3282的博客 482

【懒懒】我不生产笑话,我只是笑话的搬运工 [问题点数:200分]

发帖的时候出错,又得重来。。 1 本人男结婚三年,不懂浪漫。 昨天老婆过生日想给她惊喜,于是乎就花了点私房钱,买了条项链给她。 在我拿出项链的那一刻,她紧紧抱住了我,场面相当浪漫。 十秒左右她说了一句具有毁灭性的话:买项链的钱哪来的…… 2 一高校食堂挂牌“禁止民工在此用餐”。 此规定一出,在校生们都很遗憾, 以后没办法再天天见到已经毕业参加了工作的师哥师姐了。 3

我用CV我自豪。 2万+

使用VIVADO 2019.1 搭建以太网接口

以太网 MAC+SGMII->GMII接口转换 以FPGA V7为例,搭建一个千兆以太网接口。运行环境为Vivado2019.1。板卡的FPGA V7与千兆网口芯片采用SGMII互联,最终实现FPGA与上位机之间的千兆网卡通信,实际实现时,V7采用MAC + GMII ->SGMII的结构。SGMII接口使用1G/2.5G Ethernet PCS/PMA or SGMII ip核,MAC层使用Tri Mode Ethernet MAC ip核。 由于MAC层IP不支持SGMII接口,因此需要G

qq_44641513的博客 8414

bt种子爬虫程序和种子解析(大蟒蛇语言编写)

最近亲眼看到快播被大批警察包围,感觉到快播注定要关闭很多东西,很多宅男宅女们又要寂寞了,于是乎,疯狂的研究DHT网络技术 看到网上也有开源的代码,这不,我拿来进行了二次重写,呵呵,上代码: #encoding: utf-8 import socket from hashlib import sha1 from random import randint from struct import u

PHP/Python 爱生活爱编程 3万+

芒果YOLO11改进146:OBB旋转检测头Head篇:即插即用|轻量化非对称多级压缩LOADH旋转检测头,原创改进适配YOLOv8高效检测头,检测头新颖改进,全网首发独一份

OBB旋转检测头Head篇:即插即用|轻量化非对称多级压缩LOADH旋转检测头,原创改进适配YOLOv8高效检测头,检测头新颖改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 641

【AI智能体】Claude Code 核心记忆文件 CLAUDE.md实战操作详解

Claude Code 核心记忆文件 CLAUDE.md实战操作详解

congge 5457

Linux下逻辑地址、线性地址、物理地址(系列三:总结)

转载:Linux下逻辑地址、线性地址、物理地址详细总结 转载原因:通俗易懂,逻辑清晰。 分析linux内存管理机制,离不了上述几个概念,在介绍上述几个概念之前,先从《深入理解linux内核》这本书中摘抄几段关于上述名词的解释: 一、《深入理解linux内核》的解释 1. 逻辑地址(Logical Address) 包含在机器语言指令中用来指定一个操作数或一条指令的地址(有...

Yannick Jiang 的专栏 641

基于STM32单片机设计的智能坐垫_431

本文设计了一款基于STM32F103C8T6单片机的智能坐垫系统,该系统集成了压力传感器、SHT30温湿度传感器、薄膜加热垫、涡轮风机、语音播报模块、OLED显示屏及HC-05蓝牙模块,实现了对用户就坐状态与坐垫微环境的实时监测与智能调控。系统通过压力传感器检测用户就坐情况,自动启动久坐计时并触发语音提醒;温湿度数据用于控制通风与加热功能,以改善座椅舒适性;用户可通过按键或手机APP设置久坐时长、手动开关通风与加热,并通过OLED屏或APP实时查看环境参数与计时状态。本设计体现了嵌入式系统在健康关怀与舒适性

409

Python随机IP地址生成器

请生成一个符合IP地址规范的随机ip地址生成器,并将生成的10进制IP地址转化为2进制 最终显示效果如:192.168.1.16 >11000000.10101000.00000001.00010000

m0_53662095的博客 1363

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

我理解的逻辑地址、线性地址、物理地址和虚拟地址

本贴涉及的硬件平台是X86,如果是其它平台,嘻嘻,不保证能一一对号入座,但是举一反三,我想是完全可行的。一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字

4332

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Swagger登录地址(首次登录可能会报错)

关于Swagger,登录地址报错的描述

旺仔爱编程 7244

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Ubuntu14.04下安装vim显示没有可用的软件包vim-gtk

Ubuntu14.04下安装vim,若出现了无法下时,可以用看看

Lmikic的专栏 2万+

Docker的深入浅出(入门新手篇)

Docker的深入浅出(入门新手篇) (持续更新中。。。。。。) 什么是Docker? 这个问题百度的话会有很多标准答案,但是晦涩难懂,鄙人从小语文不好所以在以下内容鄙人会用个人粗俗的语音加通俗的理解来向入门的小伙伴介绍Docker到底是个什么东西? 要解决Docker是什么这个问题就要引出另外一个问题,就是计算机系统的分类问题,我给大家讲一个故事,我是一个java新手程序员,我现在需要储存一些数据(不要问我java中数据是什么),必然最好的办法就是将数据存储在数据库中(不要问我数据库是什么),而数据库的运

m0_58076263的博客 657

洛谷 P2562 [AHOI2002]Kitty猫基因编码

P2562 [AHOI2002]Kitty猫基因编码 题目描述 小可可选修了基础生物基因学。教授告诉大家 Super Samuel 星球上 Kitty猫的基因的长度都是 2 的正整数次幂 ), 全是由两种不同的基因单元组成的。 这两种不同的基因单元分别记成 0 和 1,于是 Kitty 猫基因可以写成一个 01 串表达式 。 为了便于分析和降低数据存...

HJ921004的博客 1519

日剧·日综资源集合(建议收藏)

91日剧:http://www.91riju.com/东京不够热:http://www.tokyonothot.com/猪猪日剧字幕组:http://www.jpdrama.cn/日青字幕组:http://www.mytvbt.net/隐社:http://www.hideystudio.com/追新番:http://zhuixinfan....

weixin_34082177的博客 6万+

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 224

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 149

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 328

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 195

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 117

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365
上一篇: LWN:BPF 中可以长存的指针!
下一篇: LWN:塞满return stack buffer!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值