# 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来保证内存的有序访问。
  • 从操作线程的角度看来,如果所有的指令执行都是按照普通顺序进行,那么对于一个顺序运行的程序而言,可排序性也是顺序的。

改图来自百度:
在这里插入图片描述

。。。未完待续

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值