-
yexindonglai@163.com
2022-03-01 11:18
Java
822°
0
晋升的四种方式担保机制大对象直接进入老年代长期存活的对象动态年龄判断1、担保机制1.1什么是担保机制 我们都用过花呗借呗、或者信用卡吧?就是你身上的前不够用的时候,你可以去借信用卡、借花呗、借借呗,但是你必须有个东西来担保,不然人家凭什么借给你?现在来说一般都是用你的信用分来担保的,就像支付宝有芝麻信用分数;还有一些比较大的数目是需要你用车子或房子来抵押的,这就是担保,以确保你不会跑掉;那其实jvm在内存分配的时候也有担保机制,就是你的新生代内存不足的时候,通过担保分配的方式让大对象直接分配到老年代;1.2代码示例接下来,我们运行一组代码测试一下,在运行前需要先加上以下几个jvm的参数-X
-
yexindonglai@163.com
2022-03-01 11:17
Java
754°
0
1、什么是热部署 相信大家在写代码的时候都有这个困扰,就是每次我改完代码之后都需要重启项目才能看到结果,小项目还好,启动不会占用太多时间,如果是一个大项目,每次重启都要耗费很多时间的情况下,这无疑对开发效率都会大幅下降,那么有没有这样一种技术?我修改后无需重启服务器,就可以马上看到效果?我可以很肯定地回答你:“有”,就是热部署技术,在你修改完代码之后,这项技术会自动帮你重新加载被修改后class文件,真正实现实时查看改动的结果;2、准备 要知道热部署,就得先了解class加载机制,在我们启动项目的时候,首先编辑器会将后缀为.java的文件编译成.class文件,之后jvm虚拟机会把cla
-
yexindonglai@163.com
2022-03-01 11:16
Java
823°
0
乐观锁和悲观锁独占锁和共享锁互斥锁和读写锁公平锁和非公平锁可重入锁自旋锁分段锁锁升级(无锁|偏向锁|轻量级锁|重量级锁)锁优化技术(锁粗化、锁消除)1、悲观锁 悲观锁对应于生活中悲观的人,悲观的人总是想着事情往坏的方向发展。 举个生活中的例子,假设厕所只有一个坑位了,小明上厕所会第一时间把门反锁上,这样其他人上厕所只能在门外等候,这种状态就是「阻塞」了 在数据中因为总是假设最坏的情况,所以每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁,有任何一线程对数据进行读写操作都会上锁,数据库的行锁、表锁、读锁,写锁都是悲观锁
-
yexindonglai@163.com
2022-03-01 11:14
研发管理
1623°
0
1、准备 测试之前需要先准备相关的工具,JMeter是运行在jdk下的一款压测工具,所以,要运行JMeter首选要安装jdk并配置环境变量,具体请自行百度jdk环境变量安装; 2、JMeter是什么ApacheJMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java小服务程序、CGI脚本、Java对象、数据库、FTP 服务器,等等。JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能
-
yexindonglai@163.com
2022-03-01 11:12
Java
856°
0
前言 单例的五种创建方式,可以看我另一篇文章: 设计模式--单例模式 ,这篇文章讲解了5种单例模式的创建方式,但今天我们来主要来讲讲单例的安全模式,那到底怎样才是安全的呢?那么接下来我会由浅入深的方式讲解单例模式;1、饿汉式packagecom.designPatterm.single;/***单例模式--饿汉式*线程安全,效率高*/publicclassSingletonModelEHan{privatestaticfinalSingletonModelEHanobj=newSingletonModelEHan();//私有构造方法,防止创建多个实例privateSingletonMode
-
yexindonglai@163.com
2022-03-01 11:11
Java
759°
0
前言 首先呢,想要了解ConcurrentHashMap,你得先了解HashMap,可以看我另一个帖子: HashMap底层原理以及LinkedHashMap、HashTable、HashSet四者区别 为什么要先了解HashMap呢?因为HashMap是线程不安全的类,只适合在单线程上使用,既然使用受限,那就意味着它的结构相对比较简单,所以呢,先学HashMap在来了解ConcurrentHashMap将会更好理解,达到锦上添花的作用,事实也是如此,因为ConcurrentHashMap也是基于HashMap发展而来的;如果你一上来就直接看ConcurrentHashMap的源码,会非
-
yexindonglai@163.com
2022-03-01 11:09
Java
690°
0
ReentrantLock ReentrantLock的出现是为了替代synchronized,因为使用lock锁之后代码会更加简洁,增加易读性,但是在jdk1.6之后,synchronized增加了一个锁升级的概念,所以从jdk1.6开始,都优先使用synchronized,这不代表着ReentrantLock就要废弃了,synchronized是一个非公平锁,若要实现公平锁就得使用ReentrantLock;所以啊,没有万能的工具,但可以通过场景的不同而选择最适合的工具来使用;ConditionCondition是为了控制线程的挂起和唤醒而发明的;也就是用来实现线程之间通讯使用的接口,
-
yexindonglai@163.com
2022-03-01 11:07
Java
641°
0
1、join()方法的作用 这个方法的作用是先将当前线程挂起,待其他线程结束后在执行当前线程的代码;2、应用场景比如有三个人小红、小李、小王,三个人相约一起去酒店吃饭,菜已经点好了, 三个人从不同的地方出发,只有三个人都到了酒店之后才会开始上菜;那么这三个人就分别代表三个线程,这三个线程执行完之后才会执行“上菜”的代码逻辑,代码示例packagecom.Lock;/***join方法示例*比如有三个人小红、小李、小王,三个人相约一起去酒店吃饭,菜已经点好了, 三个人从不同的地方出发,只有三个人都到了酒店之后才会开始上菜;那么这三个人就分别代表三个线程,这三个线程执行完之后才会执行“上菜”的代
-
yexindonglai@163.com
2022-03-01 11:06
Java
599°
0
CountDownLatch是什么? CountDownLatch是JDK1.5之后提供的一个同步工具,在并发包下面,它可以让一个或多个线程等待,一直等到其他线程中执行完成一组操作。实现功能和java多线程中的join()方法很像;想要详细了解join方法可以看我另一篇文章: java多线程join()方法的作用和实现原理 CountDownLatch有哪些常用方法CountDownLatch在调用构造方法初始化时,需要指定用给定一个整数作为计数器;这个计数器用来阻塞await方法;countDown方法: 计数器会被减1,调用此方法不会阻塞await方法 :如果计数器大于0时,线
-
yexindonglai@163.com
2022-03-01 11:05
Java
744°
0
jps(JavaVirtualMachineProcessStatusTool)输出主程序的路径全类名-l输出main方法的参数-m只输出进程编号pid-q输出jvm参数-v组合命令-mlv远程连接jps服务端配置客户端配置完jps(JavaVirtualMachineProcessStatusTool)jps是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前java进程的一些简单情况。很多人都是用过unix系统里的ps命令,这个命令主要是用来显示当前系统的进程情况,有哪些进程以及进程id。jps也是一样,它的作用是显示当前系统的java进程