Java进阶
文章平均质量分 89
好好学习!
独饮敌敌畏丶
做自己该做的事,并接收它的事与愿违!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android虚拟机与类加载机制
一.Android虚拟机1.初代虚拟机Dalvik与JVM的不同?①Dalvik执行dex文件DVM也是实现了JVM规范的一个虚拟器,默认使用CMS垃圾回收器(这篇文章中有讲解CMS),但是与JVM运行 Class 字节码不同,DVM执行的是Dex文件。那么class文件和dex文件的区别是什么呢?可以这么说:对于class:one File,one Class对于dex:one File,many classes②DVM的指令集是基于寄存器的除了处理的文件不同,还有一点不同是:DV原创 2021-08-21 15:13:27 · 285 阅读 · 0 评论 -
JVM调优及常量池——JVM(4)
调优分成3种一.JVM调优1:JVM内存的分代划分栈不用管,JVM将内存分成新生代,老年代和持久代。如图这种特殊的划分内存的方式,是JVM的调优方式之一。至于哪个代具体大小是多少,一般有个依据。就是活跃数据大小的倍数。活跃数据就是程序稳定下来后堆中的数据。二.JVM调优2:扩容新生代扩容新生代能够提高GC(垃圾回收)效率,为什么呢?我们看下面一张图当垃圾回收的时候,会进行两个步骤,①扫描新生代②复制非垃圾对象。假设这两个步骤的时间分别为T1,T2。在上图中都有标出。假设A存活的时间原创 2021-08-19 15:55:33 · 282 阅读 · 0 评论 -
CMS——JVM(3)
一.JVM中常见的垃圾回收器立足于JDK1.8版本在一开始的时候,新生代和老年代都有单独的垃圾回收器的,也就是分开的,后来有了G1回收器之后就不严格区分了。垃圾回收器可以分成三种:单线程垃圾回收器,多线程并行垃圾回收器,并发垃圾回收器。按照作用的部位可以分成回收新生代的垃圾回收器和回收老年代的垃圾回收器。具体代表有回收新生代的垃圾回收器回收老年代的垃圾回收器(加上G1)虽然CMS在后面被淘汰了,但是它具有跨时代的意义,其重要思想,非常值得我们学习。二.CMSCMS一般配合的是Pa原创 2021-08-19 14:51:58 · 816 阅读 · 1 评论 -
对象的分配及垃圾回收机制——JVM(2)
一.JVM中对象的创建过程1.详细过程①检查加载(检查有没有进行类加载)符号引用是什么?在类加载的时候,A常量池中可能包含对B的引用,但是B还没有加载进来,所以就用一个符号来表示B,这就叫符号引用。这个符号有时候也叫字面量。所以检查加载这一步还会进行将符号引用变成直接引用的步骤。如果B加载进来了,就变成直接引用。②分配内存划分内存的方式:指针碰撞、空闲列表指针碰撞:假设堆空间是规整的(无内存碎片),那就用一个指针一个一个的进行分配。空闲列表:相反如果堆内存不规整,有内存碎片,那就用原创 2021-08-18 15:35:11 · 312 阅读 · 0 评论 -
JVM概念及虚拟机栈——JVM(1)
一.Java从编译到运行的过程1.图示(JDK,JRE,JVM三者关系)java文件经过javac的编译后形成了class字节码文件,然后送入JVM在JRE的类库的帮助下进行类加载。从这张图也可以看出JDK,JRE,JVM之间的关系。2.三者关系JVM: JVM只是一个翻译,把Class翻译成机器识别的代码,但是需要注意,JVM 不会自己生成代码,需要大家编写代码,同时需要很多依赖类库,这个时候就需要用到JRE。JRE: JRE是什么,它除了包含JVM之外,还提供了很多的类库(就是我们说的ja原创 2021-08-13 16:22:32 · 312 阅读 · 4 评论 -
Json&Gson高级进阶系列2
Json&Gson高级进阶系列1一.Json解析的两种方式{ "name":"ljh", "age":21}①一次性全部解析完(适用于元素较少):比如DOM解析这个就一次性解析成"{" , ""name":"ljh"" , "," , ""age":21" , "}"。然后才使用一次性加载到内存②基于事件驱动的(适用于元素较多):比如SAX,PULL解析与上面的相反,并不是一次性将Json对象全部解析完,而是一个一个地解析比如解析到{的时候就能判断它是一个object可以需原创 2021-07-17 00:51:54 · 604 阅读 · 1 评论 -
Json&Gson高级进阶系列1
json概念定义:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。可用于数据标记,存储,传输。json解析示意图一般有三种方式,即Gson,Jackson,Fastjsonjson语法格式基本就是键值对基本的对象举例:{ "name":"ljh", "age":21}如果是数组,就加个中括号[]举例:array数组里面是两个对象"array":[ { "name":"ljh", "age":21 }, { "n原创 2021-07-16 20:44:13 · 362 阅读 · 1 评论 -
一篇文章搞定你的序列化进阶学习
第七届中国国际“互联网+”大学生创新创业大赛产业命题赛道的试点方案(可以参加)7月中旬开始报名,8月31日截至报名第十届中国创新创业大赛(重庆赛区)暨第七届重庆“高新杯”众创大赛高校分赛(无法参加)2021“荣昌陶”杯川渝青年创新创业大赛(无法参加)2021年度“大创慧谷”大学生创业创新大赛8月份之前截至报名(最好七月份报名)...原创 2021-07-12 10:24:48 · 253 阅读 · 8 评论 -
Java中锁的分类
原创 2021-07-09 22:15:01 · 137 阅读 · 3 评论 -
synchronized原理&优化
一.加锁的底层原理1.synchronized同步块中,Java虚拟机实现加锁的原理比如某一个类由java文件编译成class文件的时候,虚拟机帮我们插入了一些东西我们将class文件反编译一下,可以看到有序号①和序号②两处,即Java文件和class文件的对应。真正的+1操作是在红框里面进行的。而进挨着红框的两个monitorenter和monitorexit就是synchronized的原型。也就是说对于synchronized,虚拟机会缺省地帮我们在字节码文件中插入两个指令monitoren原创 2021-07-09 16:25:32 · 677 阅读 · 9 评论 -
JMM基础与volatile
一.JMM基础1.计算机基础知识在计算机中运算的速度远远大于读取内存中数据的速度。所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲:将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。总之为了提高效率,计算机系统设置了一个缓冲区,如图所示离CPU越近,存储容量越少但读取速度更快。在计算机系统中,寄存器划是L0级缓存,接着依次是L1,L2,L3(接下来是原创 2021-05-19 19:50:28 · 208 阅读 · 2 评论 -
AQS底层原理
1.模板设计方法2.AQS使用3.CLH队列锁4.JMM原创 2021-05-19 14:05:08 · 313 阅读 · 0 评论 -
阻塞队列&线程池
前言阻塞队列是线程池的基础。两者都是面试热点,尤其是线程池。所以我特地花时间学习了一下这方面的知识,并做记录。一.阻塞队列这个其实用的非常多。安卓里面 Handler机制的MessageQueue,我认为就是一个阻塞队列。...原创 2021-05-15 14:07:20 · 1409 阅读 · 0 评论 -
Java的CAS机制
前言CAS机制听起来很高大上,其实就可以把他理解为与synchronized并列的一种方式。我个人把他理解为是实现线程同步的另外一种方式(虽然本质上是异步访问,但是最终的结果与同步访问的结果是一样的)或者说,从微观上来看是异步的,但是从宏观上来看是同步的。就像并发一样,微观上是每一时刻只执行一个进程,但是宏观上来看是多进程并发,一个道理。1.为啥要用CAS机制?在正式介绍CAS之前,不如聊聊它与synchronized的区别,或者它的特点,为啥要用CAS机制?那就不得不提到悲观锁和乐观锁的概念了。原创 2021-05-12 15:54:44 · 1941 阅读 · 1 评论 -
Java并发编程基础知识大全
时间片轮转机制说白了就是并发机制的一种算法在JDK中,线程是协作式的,而不是抢占式的(不能用stop)原创 2021-03-21 10:07:13 · 254 阅读 · 1 评论 -
一篇文章搞懂流
一.File类1.File类的理解①File类的一个对象,代表着一个文件或一个文件目录(即文件夹)②File类声明在java.io包下③File类中涉及关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及写入或读取文件内容的操作,如果需要读取或写入文件内容,必须使用IO流来完成④后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的“终点”⑤这里的相对路径是相对当前module的路径(如果是在单元测试里面调用)或者是当前工程下的路径(如果是在Main里面调用)原创 2021-02-01 15:16:35 · 300 阅读 · 0 评论 -
一篇文章搞懂集合
一.为何要用集合?用数组存储,一旦初始化以后,其长度就确定了,元素的类型也确定了,我们只能操作指定类型的数据,而且是有限个。而且数组提供的方法非常有限,不适合添加,插入和删除等操作。对于无序、不可重复地存数据的需求不能满足。针对数组存储的缺点,集合就应运而生了二.Collection集合继承结构图三.Collection集合的常用方法1.非常常用的,也是很简单的(5个) //声明一个集合 Collection col = new ArrayList();原创 2021-01-29 16:07:45 · 308 阅读 · 0 评论 -
一篇文章搞懂Java反射
一.概念Reflection(反射)是被称为动态语言的关键,反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。1.为啥叫反射?加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(并且一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。我们可以看到正好是相反的。2.动态语言和静态语言二原创 2020-12-22 22:31:51 · 815 阅读 · 0 评论 -
代理模式
首先来介绍一下什么是代理?其实很简单,生活中很常见,比如你在宾馆看到一张小卡片,照着卡片上的号码拨过去,接电话的可能是一位抠脚大汉,等你们商量好了之后,过一会可能就会有女生来敲门。。。好,让我们举个正常点的例子。比如你想出国留学,OK,你有钱,但是不能有钱到把每一家美国大学都拜访个遍吧,也不能把每一家英国大学都拜访个遍吧,也不能把…。所以你要找个中介(代理),这个中介不仅可以节约你的时间和金钱,还可以代替学校完成招生功能。OK,我们来梳理一下上面的例子的特点:①代理是学校代理,学校是目标。②代理不原创 2020-11-10 11:02:51 · 416 阅读 · 0 评论 -
再战Java之注解与反射入门
一.注解的作用注解本身没有任何意义,单纯的注解就是一种注释,它需要结合其他如反射、插桩等技术才有意义。二.注解的基本使用定义:在interface前面加上@@Retention(RetentionPolicy.SOURCE)public @interface DiDiWei { String DiDiWei() default "xxx";//定义一个默认值,这样在使用的时候就不用传参了}最上面的是元注解(注解上的注解,总共就四个,常用的就Target和Retention两个)如果注解原创 2020-11-06 16:15:55 · 243 阅读 · 0 评论 -
Java进阶-泛型
随便扯点我为什么要再次学Javajava知识是作为Android开发的语言基础,虽然现在已经推出了kotlin,但是基于以下原因我还是需要好好牢牢掌握java:①SDK还是改成java,kotlin也需要编译成为java运行;②目前大量的第三方库和继承与前任的代码都是java所写的;③Java语言应用不仅仅在Android,就是在后台开发中也是一个最流行的语言;④大公司面试都要求我们有扎实的Java语言基础。所以,好好学Java!一.为什么要用泛型假如我们需要进行两个整型数字的相加: p原创 2020-11-03 20:14:19 · 382 阅读 · 0 评论
分享