- 博客(13)
- 收藏
- 关注
原创 《深入理解JVM:JVM高级特性与最佳实践》--Class类文件的结构
《深入理解JVM:JVM高级特性与最佳实践》–Class类文件的结构什么是Class文件? Class文件是java虚拟机执行引擎的数据入口,也是java技术体系的基础构成之一。Class文件结构 ①魔数:确定该文件是为一个能被虚拟机接受的Class文件。 ②版本号:存储Class文件的版本号 ③常量池:Class文件之中的资源仓库 ④访问标志位:识别一些类或接口层次的访问信息 ⑤类索引、父类索引、接口索引:确定Class文件中类的继承关系 ⑥字段表集合:用于描述接口或类中声
2021-03-09 17:47:40
78
原创 《深入理解JVM:JVM的高级特性与实战》--类加载机制
《深入理解JVM:JVM的高级特性与实战》–类加载机制什么 是类加载?类加载器是将 描述类的数据从.class文件转换为二进制字节流后加载到内存当中,并且对这部分数据进行校验、准备、解析和初始化的一个操作过程。类加载机制1)加载 ①通过一个类的全限定名来获取定义此类的二进制字节流 ②将该字节流所代表的静态存储结构转化为方法区中运行时数据结构 ③在java堆中生成该类对应的一个java.lang.Class对象,作为方法区该类数据的访问入口2)验证 确保当前字节流
2021-03-09 17:46:57
95
原创 《深入理解JVM--第三章》--垃圾收集器与内存分配策略
《深入理解JVM–第三章》–垃圾收集器与内存分配策略垃圾回收期GC需要完成的三件事 ①哪些内存需要回收 ②什么时候回收 ③如何回收如何判定对象已死?判定对象存亡有两种方案:①引用计数算法、②引用链法引用计数算法策略:给每一个对象添加一个引用计数器,当有地方引用这个对象时,计数器+1,当这个引用失效时,计数器-1,当任何情况引用计数器都为0时,该对象失效存在的问题:对象间相互循环引用引用链法策略:通过一系列叫做GC Root的对象作为起点,从这些节点开始往下搜索,所走过的路径称为引
2021-03-08 11:39:50
144
原创 《实战Java高并发程序设计》JDK并发包JUC--第三章
《实战Java高并发程序设计》JDK并发包/JUC–第三章synchronized的扩展重入锁:java.util.concurrent.locks.ReentrantLockpublic static ReentrantLock lock=new ReentrantLock();@Overriedepublic void run(){ lock.lock(); try{ .... }finally{ lock.unlock();}}由于这种锁一个
2021-03-06 12:14:23
141
原创 《实战Java高并发程序设计》锁的优化及注意事项--第四章
《实战Java高并发程序设计》锁的优化及注意事项–第四章提高锁性能的几种方法①减少锁持有时间②减少锁粒度:只对需要的一部分加锁,相对是锁的粗化。③读写分离锁来替换独占锁:读与读之间不阻塞④锁的粗化:虽然减少锁的持有时间可以有效的高并发,但是不断的请求和释放会消耗系统资源,因此将多次请求和释放都整合成一次提交Java虚拟机对锁优化所做的努力①偏向锁:第一个线程请求锁并拿到锁之后,下次再请求锁不需要进行同步操作,直接拿到锁,当有第二个线程竞争的时候,偏向锁失效②轻量级锁:如果偏向锁失败,则升级为
2021-03-06 12:07:37
62
原创 《深入理解JVM,JVM高级特性与最佳实践》--Java内存区域
《深入理解JVM,JVM高级特性与最佳实践》–Java内存区域什么是JVM?JVM是java虚拟机,它本质是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。它可以支持多种语言编程,所以这是定义在操作系统上的一个系统。JVM的位置java内存区域–运行时数据区域程序计数器 程序计数器是每个线程执行的行号指示器,它记录的是一个地址,因为线程间的调用cpu采用的是轮换调用策略,因此为了线程切换后能恢复到正确的执行位置,因此每条线程都需要一个独立且互不影响的程序计数器,这
2021-03-06 12:05:16
91
原创 《实战java高并发程序的设计》第二章--volatile详解
《实战java高并发程序的设计》并行程序基础线程的基本操作线程的创建方法–四种①继承Thread类②实现Runnable接口③实现Callable接口④创建线程池线程的终止1)调用Thread.stop()方法 该方法太过于暴力,是一种强行终止线程的方法,在直接终止线程的同时,会立即释放这个线程的所有锁。有 有可能导致读写到一半的数据被其它等待该锁的线程读取写入新的数据,那么会导致对象不一致。2)解决上述问题是调用stopMe()方法,该方法中利用了类中定义的一个标记变量stopm
2021-03-02 17:10:13
92
原创 java并发级别详细解释
《Java高并发程序设计》–基本概念同步和异步同步:是一个方法被调用后只有等这个方法执行完后调用者才能调用其它方法异步:是调用者在调用一个方法后,该方法还未执行完调用者就重新获得了调用权可以调用其它方法。并行和并发并行:多个CPU同时做不同的事,比如在黄山旅游,我们坐缆车的时候可以同时看风景,这样在观看风景时又做了 走路的工作。并发:一个CPU交替做不同的事,比如旅游我们步行的时候,我们走路的时候要专心走路不能看风景,看风景的时 候要停下来看风景,交替的进行。临界区:表示一种公共资源或
2021-03-02 17:05:48
167
原创 # Comparable和Comparator的区别
Comparable和Comparator的区别/**Comparable和Comparator都是接口,前者是在java.lang包,后者是在java.Util包,实现Comparable接口的类需要实现的方法是CompareTo(),这个排序方法简单单一,形式如下:*/public class Person implement Comparable{ private String name; private int age; public Person(String name,int ag
2021-02-25 16:38:22
60
原创 序列化
序列化序列化来源 序列化使用到的知识是I/O流中的对象流序列化机制 序列化其实就是将java内存中的对象转换成以字节序列的形式存储在磁盘或者以网络的形式传输出去,这些字节数据包括了对象的数据和信息,这样做也是为了持久化对象,当我们在A类中要用到另外一个B类时,我们可以直接操作A类,而不用再用磁盘存储B类文件,因为B类信息已经存储到A类当中。反序列化机制 当java内存读取序列化对象时,将这些字节序列恢复成原来的java对象序列化方法ObjectOutputStream反序列化方法
2021-02-25 16:32:10
72
原创 IO流
IO流流的分类按照流的操作单位分类:1.字节流(8bit):就是处理0/1数据的,一般为图片、视频类、word文件2.字符流(16bit):就是一个一个的char型数据,比如’a’,就是文本文件,就是我们平常能看懂的,比如txt文件按照流的流向分类(是站在程序的角度来分析的)1.输入流:从文件读取数据到程序(内存)中2.输出流:从程序中写到文本文件中按照流的角色分类1.节点流:就是一个流2.处理流:一般是在一个流的基础上再包一层或多层的流流向字节流字符流流进In
2021-02-25 16:31:33
130
原创 线程
线程程序:完成特定任务,用某种语言编写的一段静态代码进程:正在运行的程序,进程作为资源分配的单位,系统在运行时为每个进程分配了不同的内存域线程:程序内部的一条执行路径,线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器 并行:多个CPU执行不同的任务,例如多个人执行不同的任务并发:一个CPU(采用时间片的方式)同时执行多个不同的任务,多个人做同一件事,比如一千个人秒杀一台手机。多线程的创建方式(四种)①继承Thread类 1.创建一个继承于Thread类的子类 2
2021-02-25 16:30:40
106
原创 反射
反射1.什么是反射 java反射就是程序在运行状态中,对于任何一个类或者对象,都可以通过反射获取其任意权限的属性和方法,并且还可以对其进行修改;这也就导致java被认为是动态语言的原因(但java并不是动态语言,动态语言是程序在运行时允许对程序中结构或者变量类型进行修改的语言,比如python,Ruby)2.反射与java封装性是否存在冲突 java具有三大特性:封装、继承、多态,我们知道java中所有属性方法都具有权限,四种权限级别从高到低分别为:public、protected、缺省、pri
2021-02-25 16:28:14
83
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人