JVM学习笔记六:本地方法接口和本地方法栈

【个人学习】JVM(5):本地方法接口、本地方法栈 简单地讲,一个Native Methodt是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “c” 告知c++编译器去调用一个c的函数。 阅读详情

0. 前言

声明:
感谢尚硅谷宋红康老师的讲授。
感谢广大网友共享的笔记内容。
B站:https://www.bilibili.com/video/BV1PJ411n7xZ
本文的内容基本来源于宋老师的课件,其中有一些其他同学共享的内容,也有一些自己的理解内容。

目录

1. 本地方法

1.1 什么是本地方法?

简单地讲,一个 Native Method 是一个 Java 调用非 Java 代码的接囗。一个 Native Method 是这样一个 Java 方法:该方法的实现由非Java语言实现,比如 C。这个特征并非 Java 所特有,很多其它的编程语言都有这一机制,比如在C中,你可以用 extern “c” 告知c编译器去调用一个c的函数。

A native method is a Java method whose implementation is provided by non-java code.

在定义一个 native method 时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非 Java 语言在外面实现的。

本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合 C/C++ 程序。
本地方法接口与本地方法
举例:

public class IHaveNatives{
    public native void methodNative1(int x);
    public native static long methodNative2();
    private native synchronized float methodNative3(Object o);
    native void methodNative4(int[] ary) throws Exception;
	// Illegal combination of modifiers: 'native' and 'abstract'
	public native abstract void nativeMethod3(); 
}

标识符native可以与其它java标识符连用,但是 abstract 除外

1.2 为什么使用本地方法?

主要原因:

  1. 特定语言办其擅长的事情。比如,如果是需要和硬件交互,那么使用 C/C++ 编写一个驱动,比 Java 实现更为合适。
  2. 为了满足特定任务的低资源,高效率。

与Java环境的交互:
有时Java应用需要与Java外面的环境交互,这是本地方法存在的主要原因。你可以想想Java需要与一些底层系统,如操作系统或某些硬件交换信息时的情况。本地方法正是这样一种交流机制:它为我们提供了一个非常简洁的接口,而且我们无需去了解Java应用之外的繁琐的细节。

与操作系统的交互:
通过使用本地方法,我们得以用Java实现了jre的与底层系统的交互,甚至JVM的一些部分就是用c写的。还有,如果我们要使用一些Java语言本身没有提供封装的操作系统的特性时,我们也需要使用本地方法。

本地方法的现状:
目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印机或者Java系统管理生产设备,在企业级应用中已经比较少见。因为现在的异构领域间的通信很发达,比如可以使用Socket通信,也可以使用 Web Service 等等。

2. 本地方法栈

Java 虚拟机栈用于管理 Java 方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)。

  • 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOverflowError 异常。
  • 如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个OutOfMemoryError异常。

本地方法是使用C语言实现的。

它的具体做法是 Native Method Stack 中登记 native 方法,在 Execution Engine 执行时加载本地方法库。
本地方法的执行
当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界。它和虚拟机拥有同样的权限。

  • 本地方法可以通过本地方法接口来访问虚拟机内部的运行时数据区。
  • 它甚至可以直接使用本地处理器中的寄存器
  • 直接从本地内存的堆中分配任意数量的内存。

并不是所有的 JVM 都支持本地方法。因为 Java 虚拟机规范并没有明确要求本地方法栈的使用语言、具体实现方式、数据结构等。如果 JVM 产品不打算支持 native 方法,也可以无需实现本地方法栈。

在Hotspot JVM中,直接将本地方法栈和虚拟机栈合二为一。

Revit二次开发——不启动Revit,做rvt文件数据导出 Revit二次开发——不启动Revit,做rvt文件数据导出Node.js部分调用C#端供外部调用的dllC#部分调用RevitNet.dll,做数据导出exe做外部调用dll总结功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 N 阅读详情

相关推荐

高斯投影坐标正反算算法(python)

高斯坐标正反算算法,在正算的时候,y的第一个数字表示是用几度带换算的,第二个数字和第三个数字表示带号。该程序是根据武汉大学出版社出版的第三版的《大地测量学基础》编写, 用于课程实验学习。

weixin_64338372的博客 4586

JVM - 本地方法接口和本地方法栈

JVM - 本地方法接口和本地方法栈

目目沐沐 4万+

从零组装一台会‘看’的无人机:手把手教你配置NUC机载电脑与D435深度相机(环境搭建篇)

本文详细介绍了如何从零开始组装一台具备视觉能力的智能无人机,重点讲解了NUC机载电脑与D435深度相机的配置方法。通过Ubuntu系统安装、ROS环境搭建、深度学习框架配置等步骤,帮助开发者实现无人机的自主避障和目标跟踪功能。文章还提供了性能优化和常见问题解决方案,是无人机视觉系统开发的实用指南。

weixin_30915275的博客 396

JVM运行时数据区——本地方法接口和本地方法栈

本地方法接口、本地方法栈

码说芯语的博客 1216

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

TFN_yzgd的博客 926

【异常】Codybuddy Error Code: 14003 too many requests 限流报错问题排查与解决指南

14003报错本质为服务端限流拦截,并非账号封禁或程序致命故障,90%以上的场景可通过等待冷却+规范使用行为解决。通过本文的排查步骤,可快速恢复工具使用,同时规避后续重复触发该问题。

奶爸的编程之路,也就一周冷个三天 1253

《JVM第6课》本地方法栈

首先要知道什么是本地方法,本地方法并不是 JVM 自己的方法,也不是 jre 里面的方法,而是指那些操作系统自己的方法(如C/C++方法),它们在操作系统目录里。可以这么理解,本地方法就是计算机操作系统对外提供的方法,JVM 通过调用这些方法可以实现 Java 程序和计算机的交互。本地方法是Java程序中的一种特殊方法,其声明在Java代码中,但实现由非Java语言编写。通过本地方法,Java程序可以访问操作系统资源、优化性能、使用现有库和直接访问硬件设备。常见的实现方式包括JNI和JNA。

避免专业名词,喜欢讲人话。 1836

数据挖掘实战-基于随机森林算法的交通事故预测模型

本实验数据集来源于Kaggle,原始数据集共有209306条,该数据集包含不同地区和时间段的交通事故详细信息。它包括各种指标,例如事故日期、天气状况、照明条件、碰撞类型、受伤人数和车辆参与情况。数据涵盖多个地点和事故类型,可全面了解交通事故及其原因。具体包括:crash_date:事故发生的日期。Traffic_control_device:所涉及的交通控制设备的类型(例如交通灯、标志)。weather_condition:事故发生时的天气状况。

m0_64336780的博客 1万+

JVM本地方法栈

本地方法栈可以保存本地方法要执行所需的必要参数,如局部变量表、操作数栈等,使得Java程序能够方便地调用本地方法,实现与底层系统的交互。通过JNI,Java程序可以调用本地方法(即非Java编写的方法),实现Java与C、C++等语言的互操作性。同时,线程隔离的设计也使得线程在调用本地方法时,可以独立地管理自己的栈空间,提高了系统的并发性能。本地方法栈(Native Method Stacks)是为虚拟机使用到的本地(Native)方法服务,与虚拟机栈相似但专门用于管理本地方法的调用,是线程私有的。

guangzhi0633的专栏 1624

0.嵌入式控制器EC实战 Embedded Controller开发概述

文章目录前言1.嵌入式控制器EC概述2.EC芯片框图(IT8502为例)3.General Purpose I/O Port (GPIO)4.SMBus(System Management Bus,系统管理总线)5.PWM、TACH6.KBC(KeyBoard Controller)7.PS/28.ADC(模数转换)总结 前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 1.嵌入式控制器EC概述 嵌入式控制器EC是挂在CPU的L

qq_30135687的博客 1万+

相机标定(六)—— 张正友标定法

相机标定一、相机标定的目的1. 相机的成像过程2. 相机标定的目的3. 畸变与畸变矫正二、张正友标定法简介三、标定相机内外参1. 求解内参和外参的积2. 求解内参矩阵3. 求解外参矩阵四、标定相机的畸变参数五、L-M算法参数优化六、相机标定的步骤七、源代码 一、相机标定的目的 1. 相机的成像过程 2. 相机标定的目的 3. 畸变与畸变矫正 二、张正友标定法简介 三、标定相机内外参 1. 求解内参和外参的积 2. 求解内参矩阵 3. 求解外参矩阵 四、标定相机的畸变参数 五、L-M算法参数优化 六、相机

weixin_41480034的博客 1万+

JVM详解(六&七)本地方法接口-本地方法库-本地方法栈

JVM详解(六&七)在这里感谢尚硅谷JVM(宋红康),在此记录一下自己详细对学习笔记,希望对你有所帮助。06&07本地方法接口-本地方法库-本地方法栈什么是本地方法?为什么要使用Native Method ?现状本地方法栈 在这里感谢尚硅谷JVM(宋红康),在此记录一下自己详细对学习笔记,希望对你有所帮助。 视频地址 代码地址 06&07本地方法接口-本地方法库-本地方法栈 什么是本地方法? 简单地讲,一个Native Method就 是一个Java调用非Java代码的接口。 一个

qq_29310729的博客 1760

http协议

HTTP 协议由起始行、头部、空行、消息体组成。

qq_34059233的博客 88

JVM虚拟机-本地方法接口和本地方法栈

简单地讲,一个Native Method是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C中,你可以用extern "c" 告知c编译器去调用一个c的函数。在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。

weixin_53851491的博客 746

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

图解JVM - 5.本地方法接口和本地方法栈

本文深入解析了JVM本地方法接口与本地方法栈的核心机制,从底层原理到实践应用,涵盖了开发注意事项、性能调优策略及典型问题解决方案。掌握这些知识不仅能提升系统开发能力,更能从容应对技术面试中的深度考察。建议结合实践项目,通过JNI工具包进行实际操作验证,以加深理解。

Anarkh_Lee的博客 989

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JVM本地方法栈解析

场景问题:在一个复杂的Java应用中,开发者需要调用本地库或本地代码来处理一些特定的功能,比如图像处理或硬件操作。这些本地代码通常是用C或C++编写的,它们不能直接在JVM中运行。当这些本地方法被Java方法调用时,如何确保这些本地方法能够正确地在JVM中执行,并且与Java方法栈保持良好的交互呢?这就是本地方法栈发挥作用的地方。知识点重要性:本地方法栈是JVM的一个重要组成部分,它专门用于存储本地方法调用的栈帧。在Java中,虽然大部分代码都在JVM上运行,但有时需要调用本地库或本地代码。

AIHacksCash的博客 676

JVM学习笔记(三)本地方法栈

##本地方法栈(Native Method Stack)   本地方法栈的功能和特点类似于虚拟机栈,均具有线程隔离的特点以及都能抛出StackOverflowError和OutOfMemoryError异常。   不同的是,本地方法栈服务的对象是JVM执行的native方法,而虚拟机栈服务的是JVM执行的java方法。如何去服务native方法?native方法使用什么语言实现?怎么组织像栈帧这种...

qq_37692087的博客 1989

JVM本地方法栈:核心机制与优化

在深入探讨Java虚拟机(JVM)的内部机制时,本地方法栈是一个不容忽视的核心组成部分。想象一下,在一个复杂的Java应用中,除了常规的Java方法调用外,还可能涉及到与本地库(如C/C++库)的交互。这种情况下,本地方法栈扮演着至关重要的角色。本地方法栈是JVM中用于存储本地方法(即非Java编写的本地方法)的栈帧的内存区域。在Java程序中,当调用本地方法时,JVM会创建一个栈帧来存储该方法的局部变量、操作数栈、方法返回地址等信息。

我是Java程序员廖志伟,感谢朋友们的支持! 1128

7. JVM-本地方法栈

本地方法栈

Android系统优化 3267

JVM运行时内存:本地方法接口与本地方法栈

简单地讲,一个Native Method就是一个Java调用非 Java 代码的接口。一个Native Method是这样一个 Java 方法:该方法的实现由非Java语言实现,比如C。这个特征并非 Java 所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。

时间如瑾 代码如诗 712

jvm中的程序计数器、虚拟机栈和本地方法栈

程序计数器、虚拟机栈、本地方法栈

sahuid的博客 1251

JVM本地方法栈/虚拟机栈

JVM的本地方法栈-通俗理解 1.本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的, 2.其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。 3.虚拟机规范中对本地方法栈中的方法使用的语言、使用方式与数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。甚至有的虚拟机(譬如Sun HotSpot虚拟机)直接就把本地方法栈和虚拟机栈合二为一。 4.与虚拟机栈一样,本地方法栈区域也会抛出StackOv

Alice_whj的博客 5561

本地方法栈、JVM栈、本地内存和JVM Heap的区别与关系

在Java出现之前,像C/C++这样的编译型语言写出来的代码都是编译为机器码(machine code)后直接运行的,machine code其实就是native code,直接和操作系统交互。 对于内存,主要分三部分: 1)存储可执行代码(冯·诺依曼的存储程序的思想),即编译后的machine code; 2)用来保存代码执行时用到的局部变量,即stack; 3)代码执行时,动态找操作系统申请(最终要归还给操作系统)的heap; 对于Heap的分配和归还都是由程序代码手工维护的。如下图所示,写一段C++

Hopefully Sky的博客 3389

JVM中虚拟机栈和本地方法栈等

​ native关键字修饰的本地方法被执行的时候,在本地方法栈中也会创建一个栈帧,用于存放该native本地方法的局部变量表、操作数栈、动态链接、方法出口信息。虚拟机栈也是线程私有的区域,每个Java方法被调用的时候,都会在虚拟机栈中创建出一个栈帧,而每个栈帧又由局部变量表、操作数栈、动态链接和方法返回四部分组成,有些虚拟机的栈帧还包括了一些附加信息。虚拟机栈通过pop和push 的方式,对每个方法对应的活动栈帧进行运算处理,方法正常执行结束,肯定会跳转到另一个栈帧上。例如:-Xss 1m。

LIJINGPO的博客 1004

JVM:程序计数器、虚拟机栈、本地方法栈

JVM:程序计数器、虚拟机栈、本地方法接口、本地方法栈

weixin_74019079的博客 1430

6. JVM-本地方法接口

1. 什么是本地方法 2. 为什么使用Native Method? 2.1. 与Java环境的交互 2.2. 与操作系统的交互 2.3. Sun's Java 3. 现状

Android系统优化 3277
上一篇: JVM学习笔记五:虚拟机栈(VMS)
下一篇: JVM学习笔记七:堆
种花途。
博客等级 码龄10年 3粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值