JAVA
文章平均质量分 86
chy_want
一名21届毕业的软件工程本科生,因学识疏浅若博客中有误请大佬们指点,万分感谢!
QQ:1918015946
展开
-
ReentrantLock源码分析(AQS)
1.结构ReentrantLock类内定义了抽象类Sync,以及实现抽象类的NonfairSync和FairSync,重写了lock和tryAcquire(非公平锁直接去调用了抽象类实现的)方法。Sync这边我们可以看到Sync是基于AbstractQueuedSynchronizer实现的。abstract static class Sync extends AbstractQueuedSynchronizer { private static final long serialV原创 2021-04-27 02:39:19 · 287 阅读 · 1 评论 -
更换头像的小案例(fastDFS)
1.介绍环境:SpringBoot+Dubbo+Zookeeper图片服务器:fastDFS数据库:Mysql2.环境搭建需在linux上搭建Tomcat(为了访问zookeeper)、zookeeper、dubbo、fastDFS。tomcat下载:https://tomcat.apache.org/JDK下载:https://www.oracle.com/technetwork/java/javase/archive-139210.htmlzookeeper下载:https://mirr原创 2020-08-23 17:04:25 · 579 阅读 · 0 评论 -
用synchronized或ReentrantLock实现的消费者与生产者
以如下场景为案例:假设某公司有一个仓库,该仓库只能容下3件货物。该公司有4名员工,分别为2名进货员(生产者)与2名销售员(消费者)。每名进货员每次只能进一件货物,每名销售员每次只能卖出一件货物。以synchronized实现:public class SynTest { public static void main(String[] args) { Clerk clerk = new Clerk(); new Thread(() -> {原创 2020-08-22 15:51:58 · 329 阅读 · 0 评论 -
JVM运行时数据区详解(超长)
一、运行时数据区的介绍HotSpot VM的运行时数据区:不用的JVM对内存的划分和管理机制存在部分差异(主要是方法区的有无)。Java虚拟机定义了若干个程序运行期间会使用到的运行时数据区,其中有一些会伴随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是跟线程相对应的,这些与线程对应的数据区的生命周期跟线程一致,随着线程的开始而出生,随着线程的结束而销毁。每个线程拥有独立的虚拟机栈、本地方法栈、程序计数器。多个线程共享堆、方法区(或者说每个进程共有的)。在jdk8后的方法区改名原创 2020-08-22 14:16:46 · 699 阅读 · 0 评论 -
JVM中的GC算法(详细)与垃圾收集器
一、介绍什么是垃圾?垃圾是指运行在程序中没有任何指针指向的对象。为什么要进行垃圾回收?如果不及时对内存的垃圾进行清理,那么这些垃圾所占用的内存会一直保存到应用程序结束,被保留的空间就无法被其他对象所使用,同时也增加了内存溢出的概率。什么是自动内存管理?自动内存管理是:无需开发人员手动参数内存的分配以及回收,降低内存泄漏和内存溢出的风险,让程序员更专注于业务开发。垃圾收集器位于JVM模型的哪里,它作用于哪?垃圾收集器在执行引擎中。垃圾收集器可以对年轻代、老年代甚至是全堆原创 2020-08-22 14:35:09 · 429 阅读 · 0 评论 -
Java中String的特性(JDK1.6、1.7、1.8中的常量池,拼接,intern方法等)
一、String的基本特性String类声明是final的,不可以被继承。String实现了Serializable接口(序列号接口),Comparable接口(比较接口)String在JDK8中是用final char[]存储字符串数据的,JDK9后改为final byte[]存储数据的。因为char类型占两个字节,很多时候的数据只需要一个字节就能存放的,因此会浪费掉一半的空间,之后改成byte[]类型,同时为了能够存放两个字节的数据(例如汉字),会将在使用前判断字符集。例子:pub原创 2020-08-22 14:31:16 · 934 阅读 · 1 评论