# Java 进阶知识
Posted MarlonBrando1998
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# Java 进阶知识相关的知识,希望对你有一定的参考价值。
Java 程序执行原理
- 编写Java源文件,
.java
文件 javac
编译java源文件,编译生成.class
的字节码文件JVM
将字节码文件翻译为机器码(0,1)二进制
Jvm 加载Class 文件
jvm类加载见地址 https://blog.csdn.net/qq_37248504/article/details/106302662
加载、连接(验证、准备、解析)、初始化
加载:找到类对应class
文件,读入到内存中。
ClassLoader 双亲委托机制
当一个类加载的时候会先委托给自己的父类去加载,所有的类加载斗湖i委托给顶层的父类去加载,保证了Java核心库的安全。
- 启动类加载器(Bootstrap Classloader):加载jdk 中
rt.jar
中java 下面的类 - 扩展类加载器(Extension Classloader):加载
javahome
下/lib/ext中的类 - 应用程序类加载器(Application Classloader):加载用户路径自己编写的以及应用的第三方jar包中的类
- 自定义加载器(Custom Classloader):特殊类的加载
连接:内存中生成的原始class对象
验证字节码文件的合法性、为对象和变量分配内存、将类中的符号引用转为直接引用
初始化:调用<·Clinit>方法
-
类的静态变量、静态方法的初始化
-
先初始化该类的父类,如果类中有初始化语句,按照顺序依次初始化语句
初始化的条件
-
访问类的静态变量、静态方法;
-
Class.forName()
-
创建类的实例
new
一个对象;
Java IO、NIO
IO
Java IO 详见博客:https://blog.csdn.net/qq_37248504/article/details/112207741
Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
NIO
java.nio全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。
JavaIO
的流是阻塞的,当一个线程调用read() wirte()
时改线程被阻塞,只到数据被读取或写入。Java NIO
非阻塞模式,当如果读不到数据时候不阻塞,再此期间可以去干别的事。
API的使用
- 数据必须先读入缓冲区再处理。
。。。有点难等后面再学。
Java 内存模型(JMM)
内存模型描述了程序中各个变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节。是一种虚拟机规范。
特点
可见性
- 当使用
synchronized
给代码加同步互斥锁的时候,其它的线程不能访问加锁的资源,使内存不可见。 - 可见性就是在多核或者多线程运行过程中内存的一种共享模式,在JMM模型里面,通过并发线程修改变量值的时候,必须将线程变量同步回主存过后,其他线程才可能访问到。
可排序性
- 而在
Java
多线程程序里面,JMM通过volatile
来保证内存的有序访问。 - 从操作线程的角度看来,如果所有的指令执行都是按照普通顺序进行,那么对于一个顺序运行的程序而言,可排序性也是顺序的。
改图来自百度:
。。。未完待续
以上是关于# Java 进阶知识的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情