# 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 进阶知识的主要内容,如果未能解决你的问题,请参考以下文章

如何进行 Java 代码阅读分析?

java学习--基础知识进阶第一天--笔记

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

Java进阶知识23 Spring对JDBC的支持

java学习--基础知识进阶第四天--笔记

Java基础知识面试题以及进阶指南(2021最新版)