JNI入门之详细介绍
本文主要介绍下 JNI 相关的概念和一些原理,以便对 JNI 有一个整体认识。
本文主要介绍下 JNI 相关的概念和一些原理,以便对 JNI 有一个整体认识。
java
命令用于启动 java 应用:它首先会启动 java 运行时环境(JRE),然后加载指定的类,调用类的 main()
方法。main()
方法必须定义为 public
和 static
的,并且不返回任何值,参数是 String 类型的数组,该方法的形式如下:
1 | public static void main(String[] args) |
本文通过编写一个简单的 HelloWorld 带你熟悉下 JNI,包括如何编写一个 JNI 方法,如何打包成动态链接库,如何加载并调用等。
Linux 系统下命令繁多,每个命令又有不同的使用参数。要记住所有命令的使用方式不太现实,因为实在是太多了,而且大多数平常还用不到,即使一时记住了也会很快忘记。实际上工作时经常用到的命令很少,比如 ls、cd、tail、tar、top、ps 等等,用的多了自然就记住了。
Java 的类加载器采用双亲委派机制解决类的加载问题。在类加载器体系中,除了启动类加载器外,每个类加载器都有自己的父类加载器。这些类加载器都是「啃老族」,对于类加载这件事,总是先请求自己的父类加载器去处理,如果父类加载器处理不了,自己再去执行类加载操作。
JSR-133 定义了新的 JMM 的规范,增强了 volatile 语义和 final 语义等。The JSR-133 Cookbook for Compiler Writers 是一份非正式的指南,本文对其进行了翻译,以方便查阅。可能存在翻译不准确甚至错误的情况,仅供参考,请对比原文查看。
轻量级锁是对 synchronized 的一种优化机制,它是一种乐观锁,适用于多线程竞争比较弱的情况。在这种情况下,相对于传统的重量级互斥锁(使用操作系统互斥量加锁),轻量级锁的性能更好。
并发编程中经常会使用到 volatile 关键字,使用该关键字修饰的共享变量可以保证多线程之间的可见性,也就是说当一个线程修改了变量的值,另一个线程能够读到修改后的值。
在多线程环境下,如果要访问共享变量,通常要使用同步机制来保证访问的正确性。如果变量不需要共享,可以将其移到单个线程内,这样就不需要同步操作。ThreadLocal 把线程和要使用的对象关联起来,线程自己保存一份独立的副本,从而实现了数据访问的安全性。
多个事务并发的情况下,如果没有任何限制,一个事务的操作可能会影响另一个事务的执行结果,从而造成脏读、不可重复读、幻读等并发一致性问题。