JAVA方法和本地方法(转载)

转载自:http://blog.sina.com.cn/s/blog_5b9b4abe01016zw0.html

JAVA中有两种方法:JAVA方法和本地方法

JAVA方法是由JAVA编写的,编译成字节码,存储在class文件中

本地方法是由其它语言编写的,编译成和处理器相关的机器代码

本地方法保存在动态链接库中,即.dll(windows系统)文件中,格式是各个平台专有的

JAVA方法是与平台无关的,但是本地方法不是

运行中的JAVA方法调用本地方法时,虚拟机装载包含这个本地方法的动态库的,并调用这个方法

通过本地方法,JAVA程序可以直接访问底层操作系统的资源,如果你这样用,你的程序就变成平台相关了,因为本地方法的动态库是与平台相关的,此外使用本地方法还可能把程序变得和特定的JAVA平台实现相关

一个本地方法接口——JAVA本地接口JNI——使得本地方法可以在特定主机系统的任何一个JAVA平台实现上运行

JAVA给人们提供了选择的机会

如果希望使用特定主机上的资源,它们又无法从JAVA API访问,那么可以写一个平台相关的JAVA程序来调用本地方法

如果希望保证程序的平台无关性,那么只能通过JAVA API来访问底层系统资源

时间: 2024-08-03 09:41:18

JAVA方法和本地方法(转载)的相关文章

从几个sample来学习JAVA堆、方法区、JAVA栈和本地方法栈

最近在看<深入理解Java虚拟机>,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构: 感觉有必要通过几个实在的例子来加深对这几个区域的了解 1)Java堆 所有对象的实例分配都在Java堆上分配内存,堆大小由-Xmx和-Xms来调节,sample如下所示: [java] view plaincopyprint? public class HeapOOM { static class OOMObjec

java 本地方法(JNI)

最近搞了一个调用第三方so库做登录认证的任务,以前对JNI没什么概念,最近学习了 <java核心技术> 本地方法 一章,把自己写的一些例子记录一下. 自己C语言真是渣渣,所以所有的例子都在可以包括基本API的基础上尽可能简单.以下所有例子都是在centos 7中测试的,window不太熟. 调用本地方法 java调用本地方法,首先需要加载包含对应方法的so库(linux),一般使用下面这种方式加载so库. 1 public class Test{ 2 static 3 { 4 //so库的名字

JVM的本地方法栈

对于一个运行中的Java程序而言,它还可能会用到一些跟本地方法相关的数据区.当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界.本地方法可以通过本地方法接口来访问虚拟机的运行时数据区,但不止如此,它还可以做任何它想做的事情. 本地方法本质上时依赖于实现的,虚拟机实现的设计者们可以自由地决定使用怎样的机制来让Java程序调用本地方法. 任何本地方法接口都会使用某种本地方法栈.当线程调用Java方法时,虚拟机会创建一个新的栈帧并压入Java栈.然而当它调用的是本地方法时,虚

Java使用wait() notify()方法操作共享资源详解_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Java多个线程共享资源: 1)wait().notify()和notifyAll()方法是本地方法,并且为final方法,无法被重写. 2)调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的monitor(即锁,或者叫管程) 3)调用某个对象的notify()方法能够唤醒一个正在等待这个对象的monitor的线程,如果有多个线程都在等待这个对象的monitor,则只能唤醒其中一个线程: 4

从本地方法栈看到jni调用

我们都知道java虚拟机所管理的内存区域包括方法区,堆,虚拟机栈,本地方法栈,程序计数器. 在<深入理解java虚拟机>中,周志明老师对虚拟机栈进行了讲解,但是对本地方法栈却一笔带过.今天我们就来对本地方法栈做下深入...... 首先我们先回顾一下虚拟机栈. 1.虚拟机栈 1.1虚拟机栈的特点 虚拟机栈是线程私有的,它的生命周期与线程相同. 1.2虚拟机栈的概念 虚拟机栈是java方法执行的线程内存模型:每个java方法在执行时都会创建一个"栈帧",栈帧的结构分为"

Java虚拟机栈和本地方法栈

Java虚拟机栈的特征 线程私有 后进先出(LIFO)栈 存储栈帧,支持Java方法的调用.执行和退出 可能出现OutOfMemoryError异常和StackOverflowError异常 Java本地方法栈的特征 线程私有 后进先出(LIFO)栈 作用是支撑Native方法的调用.执行和退出 可能出现OutOfMemoryError异常和StackOverflowError异常 有一些虚拟机(如HotSpot)将Java虚拟机栈和本地方法栈合并实现 栈帧的概念和特征 Java虚拟机栈中存储的

Java虚拟机OOM之虚拟机栈和本地方法栈溢出(4)

一.在 Java 虚拟机规范中,对虚拟机栈这个区域规定了两种异常状况: (1)如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError 异常: (2)如果虚拟机栈可以动态扩展(当前大部分的 Java 虚拟机都可动态扩展,只不过 Java 虚拟机规范中也允许固定长度的虚拟机栈),当扩展时无法申请到足够的内存时会抛出 OutOfMemoryError 异常. (3)与虚拟机栈一样,本地方法栈区域也会抛出 StackOverflowError 和OutOfMemoryEr

JNI(Java本地方法调用)

windows:中C/C++是.dll表示调用的动态链接库,而linux是.so表示动态链接库 JNI(Java Native Interface)的书写步骤 ·编写带有native声明的方法的java类      ·使用javac命令编译所编写的java类      ·使用javah ?jni java类名生成扩展名为h的头文件      ·使用C/C++(或者其他编程想语言)实现本地方法      ·将C/C++编写的文件生成动态连接库 JNI(Java Native Interface)调

浅谈Java中的hashcode方法(转载)

哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到h