从本地方法栈看到jni调用
我们都知道java虚拟机所管理的内存区域包括方法区,堆,虚拟机栈,本地方法栈,程序计数器。
在《深入理解java虚拟机》中,周志明老师对虚拟机栈进行了讲解,但是对本地方法栈却一笔带过。今天我们就来对本地方法栈做下深入......
首先我们先回顾一下虚拟机栈。
1.虚拟机栈
1.1虚拟机栈的特点
虚拟机栈是线程私有的,它的生命周期与线程相同。
1.2虚拟机栈的概念
虚拟机栈是java方法执行的线程内存模型:每个java方法在执行时都会创建一个“栈帧”,栈帧的结构分为“局部变量表,操作数栈,动态链接,方法出口”几个部分。栈帧中的局部变量表存放着一个方法的所有局部变量。
对于java类中的方法来说:方法调用时,创建栈帧,并压入虚拟机栈;方法执行完毕,栈帧出栈并销毁。
1.3关于虚拟机栈的异常
单个线程请求的栈深度大于虚拟机允许的深度,则会抛出StackOverflowError;
当整个虚拟机栈内存耗尽时,无法再申请到内存会抛出OutOfMemoryError;
2.本地方法栈
虚拟机栈服务于java方法,本地方法栈服务于Native方法。
2.1那么何为Native方法?
其实Native方法是一个用native关键字修饰的方法,它实质上就是一个java调用其它语言的接口(像调用C,C++等)。
看到这里想到了什么?JNI调用的时候就是依托于Native方法。
2.2为什么会有native方法
①尽管java很好用,但是效率上不如c和c++
②java需要和底层操作系统或者和硬件交互
3.用native的方式实现jni
(这并不是我们在Android开发中使用的方式,但是原理上是相同的)
3.1 编写我们的Native方法,创建MyNative.java文件
public class MyNative {
public static native String myPrint();
static {
System.loadLibrary("print");
}
public static void main(String[] args){
new MyNative().myPrint();
}
}
3.2 编译.java文件,生成字节码文件
3.3 获取.h文件
通过javah -jni MyNative就会产生一个MyNative.h文件。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class MyNative */
#ifndef _Included_MyNative
#define _Included_MyNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: MyNative
* Method: myPrint
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_MyNative_myPrint
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
3.4编写print.cpp文件
#include 'MyNative.h'
JNIEXPORT jstring JNICALL Java_MyNative_myPrint
(JNIEnv *env, jclass jobj)
{ return env->NewStringUTF("hellonative");
}
编译生成dll文件
3.5 运行MyNative文件,打印结果。
从本地方法栈看到jni调用的更多相关文章
- 【JVM第三篇--运行时数据区】程序计数器、虚拟机栈、本地方法栈
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.运行时数据区 我们在编写Java程序时,使用JVM的流程主要如下所示: 虚拟机在 ...
- JVM的本地方法栈
对于一个运行中的Java程序而言,它还可能会用到一些跟本地方法相关的数据区.当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界.本地方法可以通过本地方法接口来访问虚拟机的运行 ...
- 从几个sample来学习JAVA堆、方法区、JAVA栈和本地方法栈
最近在看<深入理解Java虚拟机>,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构: 感觉有 ...
- Java虚拟机栈和本地方法栈
Java虚拟机栈的特征 线程私有 后进先出(LIFO)栈 存储栈帧,支持Java方法的调用.执行和退出 可能出现OutOfMemoryError异常和StackOverflowError异常 Java ...
- 02-JVM内存模型:虚拟机栈与本地方法栈
一.虚拟机栈(VM Stack) 1.1)什么是虚拟机栈 虚拟机栈是用于描述java方法执行的内存模型. 每个java方法在执行时,会创建一个“栈帧(stack frame)”,栈帧的结构分为“局部变 ...
- JVM体系结构之五:本地方法栈
对于一个运行中的Java程序而言,它还可能会用到一些跟本地方法相关的数据区.当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界.本地方法可以通过本地方法接口来访问虚拟机的运行 ...
- JVM本地方法栈及native方法
看到虚拟机栈和本地方法栈的区别的时候有点疑惑,因为本地方法栈为虚拟机的Native方法服务.以下转载一篇关于native方法的介绍: http://blog.csdn.net/wike163/arti ...
- JVM 运行时数据区:程序计数器、Java 虚拟机栈和本地方法栈,方法区、堆以及直接内存
Java 虚拟机可以看作一台抽象的计算机,如同真实的计算机,它也有自己的指令集和运行时内存区域. Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存(运行时内存区域)划分为若干个不同的数 ...
- JVM方法栈的工作过程,方法栈和本地方法栈有什么区别。
JVM的本地方法栈 对于一个运行中的Java程序而言,它还可能会用到一些跟本地方法相关的数据区.当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界.本地方法可以通过本地方 ...
随机推荐
- 达拉草201771010105《面向对象程序设计(java)》第十四周学习总结
达拉草201771010105<面向对象程序设计(java)>第十四周学习总结 第一部分:理论知识 布局管理器: 布局管理器是一组类. 实现java.awt.LayoutManager接口 ...
- 4款java快速开发平台推荐
JBoss Seam JBoss Seam,算得上是Java开源框架里面最优秀的快速开发框架之一. Seam框架非常出色,尤其是他的组件机制设计的很有匠心,真不愧是Gavin King精心打造的框架了 ...
- <select>标签,不要在select标签中写value属性!!!
<select> select标签,一个选择框标签,在开发中很多时候会用到这个标签,例如选择生日19**年,或者在segmentfault中编辑文章时选择'原创','转载',还是'翻译'等 ...
- 在服务器上保存图片没有权限该怎么办?Permission denied:xxxxxx
用Flask框架,写了一个上传图片的接口,把这个Flask服务用nginx+uwsgi部署在了服务器上,保存图片至服务器指定目录,显示没有权限?? 一开始我以为是nginx或者uwsgi影响的(可能很 ...
- 学以致用:手把手教你撸一个工具库并打包发布,顺便解决JS浮点数计算精度问题
本文讲解的是怎么实现一个工具库并打包发布到npm给大家使用.本文实现的工具是一个分数计算器,大家考虑如下情况: \[ \sqrt{(((\frac{1}{3}+3.5)*\frac{2}{9}-\fr ...
- Pycharm IDE安装及注册激活笔记(1)
一.Windows 下的安装及激活. 1.首先去Pycharm官网,或者直接输入网址:http://www.jetbrains.com/pycharm/download/#section=window ...
- Vuex的理解以及它的辅助函数
理解:vue中的“单向数据流”,这里借用官网的图示: Vue是单向数据流,v-model只是语法糖而已.单向数据流就是:数据总是[向下传递]从父级组件传递给子组件,只能单向绑定.子组件内部不能直接修改 ...
- php获取当前周的第一天与最后一天
1 2 3 4 5 6 7 8 9 10 // 当前日期 $sdefaultDate = date("Y-m-d"); // $first =1 表示每周星期一为开始日期 ...
- 实验三——NFS服务器配置
实验三——NFS服务器配置 实 验 基 本 信 息 实验名称:NFS服务器配置(3学时) 实验时间: 年 月 日 实验地点: 信工606实验室 同组同学: 实验目的: 了解NFS服务的基本原 ...
- Oracle 11g rac中关于crsctl stop cluster/crs/has的区别
转载至http://www.oracleplus.net/arch/1203.html,整理后得. 1 通过命令查看cluster/has/crs管理的内容 [root@11rac1 ~]# crsc ...