如何使用 jstat 命令查看 gc 情况
jstat 是 jdk 自带的一个命令行工具,用于监控 java 虚拟机的统计信息,通常可用它查看指定 java 进程的 gc 情况。
jstat 是 jdk 自带的一个命令行工具,用于监控 java 虚拟机的统计信息,通常可用它查看指定 java 进程的 gc 情况。
本文主要介绍下 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 把线程和要使用的对象关联起来,线程自己保存一份独立的副本,从而实现了数据访问的安全性。