1.参数级别
其一是标准参数(-)
所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
其二是非标准参数(-X)
默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
其三是非Stable参数(-XX)
此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
pthread 库中有一个 pthread_self() 接口用来获取线程 ID,但是这个 ID并不是内核中那个线程 ID,pthread_t 到底是个什么样的数据结构呢?因为 POSIX 标准并没有限制 pthread_t 的数据类型,所以该类型取决于具体实现。对于 Linux 目前使用的 NPTL 实现而言,pthread_t 类型的线程 ID,本质上就是一个进程地址空间上的一个地址,而且 pthread_t 类型的线程 ID很有可能被复用。进程之间不会存在重复的线程 ID,而且不同线程之间也不会重复,在任意时刻都是全局唯一的值。
cglib是基于继承的代理的,但是final修饰的类的方法不能被代理,毕竟虚拟机规范限定了final关键字,想要实现代理的功能,自己不要加上final就是了。但是现在别人写好了库里的类,不方便修改想要尝试。
1 | public class Main{ |
Java里的线程和操作系统的线程是一一对应的,为了方便理解Thread 类的底层实现,我们可以自己来仿造一个MyThread, 同样接受一个Runable接口,调用start实现run方法。
还记得前面编译还了的java - v 有个错误,我们来试一下用Clion debug一下
打开 clion,选择 File->ImportProject,选择到 ../openjdk-8/hotspot 目录。
http://jdk.java.net/
下载源码包然后解压。本地需要一个可用的JDK,直接java -verison可用即可,最好版本低于编译版本