news 2026/4/28 8:07:56

Native关键字、程序计数器、方法区

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Native关键字、程序计数器、方法区

目录

一.什么是Native关键字?

1.名字的含义

2.JNI的含义

3.JNI在JVM的位置

4.JNI(或者叫native关键字)的作用

5.代码演示

二. PC 计数器:线程的“书签”

1.什么是PC计数器?

2.程序计数器的作用

3.为什么它不会内存溢出(OOM)?

三.方法区


一.什么是Native关键字?

1.名字的含义

Native这个英文单词,本意是“本地的”、“原生的”、“土著的”

你可以这样理解:

  • Java 代码:就像是一个“外来户”。因为它运行在虚拟机(JVM)里,是被隔离起来的,不管是在 Windows 还是 Mac 上,Java 看到的都是同一个虚拟环境,它并不真正属于这个操作系统。
  • Native 代码:就像是“本地土著”。它是用 C 或 C++ 写的,直接运行在操作系统(Windows/Linux)上,它是这个系统真正的“本地人”,熟悉这里的一草一木(硬件、文件、驱动)。

所以,native关键字的含义就是:
告诉 Java:“这个方法别在虚拟机里瞎琢磨了,直接去呼叫本地土著(操作系统底层)来帮忙解决。”

2.JNI的含义

即:Java Native Interface,翻译过来就是Java本地接口

3.JNI在JVM的位置

4.JNI(或者叫native关键字)的作用

让 Java 代码能够突破虚拟机的限制,直接调用操作系统底层的 C/C++ 库,从而实现对硬件(如打印机)的精准控制。

5.代码演示

使用native关键字,调用硬件(比如打印机)。

public class PrinterController { // 1. 定义 native 方法 // 作用:告诉 Java,我要打印这段指令,但具体怎么发,我不管,交给 native public native void printLabel(String command); // 2. 加载“帮手” // 这一步非常关键!系统启动时,必须先把写好的 C 语言库(dll文件)加载进来 static { // 这里加载的是一个叫 "PrinterLib.dll" 的文件 // 就像你要用某个功能,得先插上对应的 U 盘或驱动 System.loadLibrary("PrinterLib"); } public static void main(String[] args) { PrinterController pc = new PrinterController(); // 这是一个简单的打印指令(比如让打印机走纸) // 不同的打印机有专门的指令集,比如 TSC 用的是 TSPL 指令 String cmd = "SIZE 40 mm,30 mm\nGAP 5 mm,0 mm\nPRINT 1,1\n"; // 调用! pc.printLabel(cmd); System.out.println("指令已发送!"); } }

二. PC 计数器:线程的“书签”

1.什么是PC计数器?

全称:程序计数器 (Program Counter Register)

2.程序计数器的作用

通俗理解:
想象你在读一本书(执行代码)。如果你被叫去接个电话(CPU 时间片轮转,线程切换),你需要在这个页面夹一个书签,这样回来时才知道刚才读到哪一行。

PC 计数器就是这个“书签”

  • 它是线程私有的:每个人(每个线程)读自己的书,互不干扰,每个人都有自己的书签。
  • 它记录的是下一条指令的地址:CPU 执行完这一行,就看 PC 计数器,去执行下一行。

特殊情况:

  • 执行 Java 代码时:PC 计数器里记着字节码指令的地址(比如第 5 行代码对应的机器指令在哪)。
  • 执行 Native 代码时:PC 计数器的值是空(Undefined)的。因为这时候代码跑在 Java 虚拟机之外(C/C++ 世界),JVM 的“书签”管不着那里。

3.为什么它不会内存溢出(OOM)

因为程序计数器本身非常小,只存一个地址数字,而且生命周期随线程结束就销毁,所以它是 JVM 规范里唯一一个不会发生 OutOfMemoryError(内存溢出) 的区域。

三.方法区

方法区专门存放类的“骨架”(类结构信息、静态变量、常量、字节码),绝对不存具体的“血肉”(也就是new出来的对象实例及其非静态属性,那些都在堆里)。


说白了:

  • 方法区用来存模板性质的东西,比如类、静态变量、常量等等
  • 堆用来存一些具体的东西,比如对象实例的属性等等

以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 8:07:33

通义千问3-VL-Reranker-8B在遥感图像分析中的突破性应用

通义千问3-VL-Reranker-8B在遥感图像分析中的突破性应用 遥感图像分析,简单来说就是让机器看懂卫星拍的照片。过去,这活儿主要靠两种方法:一种是传统算法,像给照片做“体检”,检查颜色、纹理、形状;另一种…

作者头像 李华
网站建设 2026/4/28 8:02:23

基于LLM的智能数据问答系统技术方案

基于 LLM 的智能数据问答系统技术方案让业务人员用"人话"查数据,而不是写 SQL一、问题引入:数据分析师的"翻译困境" 最近跟一位做电商数据分析的朋友聊天,他跟我吐槽:“业务部门每天问我几百个问题&#xff0…

作者头像 李华
网站建设 2026/4/28 8:00:20

别再用普通回归了!用SPSS岭回归处理你的问卷数据,结果更稳健

别再用普通回归了!用SPSS岭回归处理你的问卷数据,结果更稳健 当市场分析师小王面对一份消费者调研数据时,他遇到了典型的多重共线性问题——品牌认知、价格敏感度和社交影响力这些变量彼此高度相关。使用普通最小二乘回归(OLS)分析时&#xf…

作者头像 李华
网站建设 2026/4/28 7:56:23

高性能计算在天体物理与宇宙学中的关键应用

1. 高性能计算在天体物理与宇宙学中的核心价值天体物理与宇宙学研究本质上是一个"计算密集型"的科学领域。当我们试图理解宇宙中从恒星形成到星系演化的各种现象时,面临的物理系统往往具有极端的时间尺度和空间尺度跨度。传统实验手段在这些领域几乎无能为…

作者头像 李华
网站建设 2026/4/28 7:52:26

终极免费方案:让Windows电脑变身专业级AirPlay 2接收器

终极免费方案:让Windows电脑变身专业级AirPlay 2接收器 【免费下载链接】airplay2-win Airplay2 for windows 项目地址: https://gitcode.com/gh_mirrors/ai/airplay2-win 还在为Windows电脑无法接收iPhone或iPad的AirPlay投屏而困扰吗?Airplay2-…

作者头像 李华