JDK

由Java 15废弃偏向锁,谈谈Java Synchronized 的锁机制

别等时光非礼了梦想. 提交于 2020-12-07 20:46:48
Java 15 废弃偏向锁 JDK 15已经在2020年9月15日发布,详情见 JDK 15 官方计划 。其中有一项更新是 废弃偏向锁 ,官方的详细说明在: JEP 374: Disable and Deprecate Biased Locking 。 具体的说明见: JDK 15已发布,你所要知道的都在这里! 当时为什么要引入偏向锁? 偏向锁是 HotSpot 虚拟机使用的一项优化技术,能够减少无竞争锁定时的开销。偏向锁的目的是假定 monitor 一直由某个特定线程持有,直到另一个线程尝试获取它,这样就可以避免获取 monitor 时执行 cas 的原子操作。monitor 首次锁定时偏向该线程,这样就可以避免同一对象的后续同步操作步骤需要原子指令。从历史上看,偏向锁使得 JVM 的性能得到了显著改善。 现在为什么又要废弃偏向锁? 但是过去看到的性能提升,在现在看来已经不那么明显了。受益于偏向锁的应用程序,往往是使用了早期 Java 集合 API的程序(JDK 1.1),这些 API(Hasttable 和 Vector) 每次访问时都进行同步。JDK 1.2 引入了针对单线程场景的非同步集合(HashMap 和 ArrayList),JDK 1.5 针对多线程场景推出了性能更高的并发数据结构。这意味着如果代码更新为使用较新的类,由于不必要同步而受益于偏向锁的应用程序

JVM系列之:内存与垃圾回收篇(二)

牧云@^-^@ 提交于 2020-12-07 18:23:24
JVM系列之:内存与垃圾回收篇(二) ##本篇内容概述: 1、堆Heap Area 2、方法区Method Area 3、运行时数据区总结 4、对象的实例化内存布局和访问定位 一、堆 Heap Area 1、堆的核心概念 ·一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 ·Java堆区在JVM启动的时候即被创建,其空间大小也就被确定下来了。是JVM管理的最大一块内存空间。 ·堆可以处于物理上不连续的内存空间中,但在逻辑上他应该被视为连续的。 ·所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区TLAB(Thread Local Allocation Buffer) 【所以说堆空间不是完全共享的,因为还有TLAB】 ·堆内存的大小是可以调节的:初始堆空间-Xms10m 最大堆空间-Xmx10m ##解释: 一个进程对应一个JVM实例,一个JVM实例对应一个Runtime Data Area, 一个进程对应一个堆和方法区,一个进程有多个线程,每个线程对应一个PC寄存器、虚拟机栈和本地方法栈。 因此,堆和方法区在进程中会被多个线程共享。 ·几乎所有的对象实例 以及 数组 都应该在运行时分配在堆上。 ·数组和对象可能永远不会存储在栈上,因为栈帧中保存应用,这个引用指向对象或者数组在堆中的位置。 ·在方法结束后,堆中的对象不会马上被移除

AC8257 ubuntu16.04 android9.0 编译环境搭建--安装编译环境

…衆ロ難τιáo~ 提交于 2020-12-07 17:00:47
首先参考MT6735的编译环境安装,毕竟ATC的代码基于MTK的代码基础上修改的,参考: https://blog.csdn.net/gjy_it/article/details/79524561 安装samba ssh请参考: ubuntu14.04 AndroidM编译环境搭建 安装编译环境并编译: 1、安装依赖包: ubuntu12.04(没验证过): sudo apt - get install git - core gnupg flex bison ccache gperf libsdl1 . 2 - dev libesd0 - dev libwxgtk2 . 6 - dev build - essential zip curl libncurses5 - dev zlib1g - dev valgrind libc6 - dev lib32ncurses5 - dev x11proto - core - dev libx11 - dev lib32readline - gplv2 - dev lib32z1 - dev libgl1 - mesa - dev gcc - 4.4 g ++ - 4.4 g ++ - 4.4 - multilib g ++ - multilib mingw32 tofrodos python - markdown libxml2 -

java开发必须要掌握的20个核心技术

删除回忆录丶 提交于 2020-12-07 10:21:17
对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。 不过对于一个有着 3年以上Java经验的资深开发者 来说,不会JVM几乎是不可接受的。 JVM作为java运行的 基础 ,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。 我在面试有超过3年Java经验的开发者的时候, JVM几乎就是一个必问的问题了 。 当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证java开发能力的高低。 在JVM这个大类中,我认为需要掌握的知识有: JVM内存模型和结构 GC原理,性能调优 调优:Thread Dump, 分析内存结构 class 二进制字节码结构, class loader 体系 , class加载过程 , 实例创建过程 方法执行过程 Java各个大版本更新提供的新特性(需要简单了解) 2. Java的运行 这条可能出看很简单,java程序的运行谁不会呢? 不过很多时候, 我们只是单纯通过IDE去执行java程序,底层IDE又是如何执行java程序呢?很多人并不了解。 这个知识点是最最基本的java开发者需要掌握的,第一个肯定是教你如何在命令行中执行java程序,但是很多人一旦把java学完了,IDE用上了,就把这个都忘了。 为什么强调要知道这个呢,知道了java最纯粹的启动方式之后,你才能在启动出问题的时候

Java 13 特性解读

强颜欢笑 提交于 2020-12-07 09:57:30
Java 13 特性解读 转 https://blog.csdn.net/bjweimengshu/article/details/100978383 2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布。 目前,JDK官网上已经可以看到JDK 13的进展,最新版的JDK 13将于2019年9月17日发布。 目前,JDK13处于Release-Candidate Phase(发布候选阶段),将于9月17日正式发布。目前该版本包含的特性已经全部固定,主要包含以下五个: JEP 350,Dynamic CDS Archives JEP 351,ZGC: Uncommit Unused Memory JEP 353,Reimplement the Legacy Socket API JEP 354: Switch Expressions (Preview) JEP 355,Text Blocks (Preview) 下面来逐一介绍下这五个重要的特性。 1、Dynamic CDS Archives 这一特性是在JEP310:Application Class-Data Sharing 基础上扩展而来的,Dynamic CDS Archives中的CDS指的就是Class-Data Sharing。 那么

RocketMQ与Dubbo相爱相杀引起的FullGC

有些话、适合烂在心里 提交于 2020-12-07 06:46:28
在日常后端开发中,部分业务都是接收MQ消息,在消费消息的过程中,会调用外部的Dubbo接口,根据接口返回数据,做一些业务逻辑处理.如下图 上面会涉及两类线程,一类是MQ线程,一类是Dubbo线程. Dubbo接口调用超时也是经常会发生的事情,这篇文章中,我们模拟的情况是,让Dubbo接口调用超时,图中红线所示.然后一直向MQ消费者发送消息,我们观察线程和堆栈的变化. 仓库代码 https: //github.com/infuq/MQ-Dubbo-FullGC 如果需要运行上述代码,还需要部署Zookeeper和RocketMQ环境. 工程结构如下图 Dubbo提供者的接口超时时间设置的是5s.如下图 而在提供者的实现方法中,让线程睡眠20秒,从而达到调用者调用接口超时目的.如下图 接下来按顺序启动它们 首先启动Dubbo提供者(DubboProvider类). 接着启动MQConsumer, 同时需要给它配置VM启动参数 -Xms90M -Xmx90M -XX :+PrintGCDetails 最后启动MQProducer, 它会一直发送消息. 所有的都启动完成之后, 借助JDK自带的jvisualvm.exe工具观察MQConsumer的堆栈信息. 观察MQConsumer的堆栈信息,会发现老年代会一直增长,当老年代快增长到顶端时,手动dump堆栈信息,用于接下来分析堆的情况.

再也不怕aop的原理了

一世执手 提交于 2020-12-07 04:29:34
1 aop是什么   java的核心思想是面向对象,aop是面向切面编程.是对面向对象的一个补充,简单通俗的理解下aop,假设我们上楼梯,我的目标是三楼,我直接朝我的三楼直接过去,但是我可以在二楼的时候去朋友那里玩下,坐下其他的,然后再去三楼 这也不会影响我们的目标去三楼,那么去朋友那里玩,相当于增加的生活的乐趣去那里玩.相当于增强了我们的活动.   那么aop可以做啥呢,可以进行日志记录,可以进行事务管理,可以进行安全控制,可以进行异常处理,可以进行性能统计 2 理解几个关键字 切面 关注点形成的类,就叫 切面(类)! 面向切面编程,就是指对很多功能都有的重复的代码抽取,再在运行的时候网业务方法上动态植入“切面类代码” 切点 执行目标对象方法,动态 植入切面代码。 可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指定的类在运行的时候植入切面类代码。 通知 在对象上面执行的内容 3 aop的实现原理: aop的底层实现是代理模式加反射. 反射就不用多讲了,代理模式分为多种,静态代理和动态代理,动态代理面又分为jdk动态代理和cglib动态代理 代理模式的好处:可以防止对方得到我们真实的方法; 静态代理的实现方式: package com.cxy.cyclicBarrier; /* * * Created by Administrator on 2017/4/24. */

windows和linux下查看java安装路径

半腔热情 提交于 2020-12-07 00:55:36
windows下查看版本:(默认安装路径安装就不需要去配环境变量了) 1 java -version windows下查看jdk安装路径:得要你配置了环境变量。 1 set java_home 查看jre安装路径: 1 java -verbose Linux下安装版本查看方式和windows下一样,至于安装路径,如图所示: 以上是通过命令 sudo apt-get install openjdk-8-jdk 安装的开源的openjdk,服务器是ubuntu18.04。 也可以通过手动安装oracle官方版本jdk。安装后配置环境变量后:java -version which java: 来源: oschina 链接: https://my.oschina.net/u/4323385/blog/3387010

设计模式学习目录,仿佛看见了一道光给作者点赞666

谁说我不能喝 提交于 2020-12-06 19:15:50
史上最全设计模式导学目录(完整版) 原创 2013年12月24日 23:15:16 标签: 软件工程 / 设计模式 / 博客 / 软件开发 190146 圣诞献礼! 2012年-2013年,Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了 七个面向对象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式) ,为了方便大家学习,现将所有文章的链接进行了整理,希望能给各位带来帮助! 祝大家 圣诞节快乐 ! 花絮:本文的工作量大大超过之前的估计,几乎整个平安夜都花在它身上了, 基础知识 设计模式概述 从招式与内功谈起——设计模式概述(一) :设计模式从何而来? 从招式与内功谈起——设计模式概述(二) :设计模式是什么? 从招式与内功谈起——设计模式概述(三) :设计模式有什么用?附:个人观点 面向对象设计原则 面向对象设计原则概述 面向对象设计原则之单一职责原则 面向对象设计原则之开闭原则 面向对象设计原则之里氏代换原则 面向对象设计原则之依赖倒转原则 面向对象设计原则之接口隔离原则 面向对象设计原则之合成复用原则 面向对象设计原则之迪米特法则 六个创建型模式 简单工厂模式-Simple Factory Pattern【学习难度:★★☆☆☆,使用频率:★★★☆☆】 工厂三兄弟之简单工厂模式(一) :图表库的设计 工厂三兄弟之简单工厂模式(二)

记面试

守給你的承諾、 提交于 2020-12-06 19:15:26
这周就只有三个面试,真的不应该裸辞的,拉钩boss都是看了不回复,先简单说下这几次面试吧 一次是喜玛拉雅的非核心部门,好像是负责智能音箱的。主要注重服务端即linux端的测试。 先自我介绍,巴拉巴拉说了自己的项目经历。 1、日志如何链路查询对应的操作, 由于没有接触过多端的接口测试,刚开始还有点蒙蔽,他就给我介绍了一下,服务端测试的一些东西,一般服务端分三块,都是需要执行接口测试,一般音箱接到客户发出的语音后,接受声音转化成文字,在到语音库(java/php)获取返回数据,再通过音响发出对应的音频数据。 2、自己关于接口自动化是如何设计的? 他一直在强调链路,然而我做的一般都是调接口返回数据,所以一直没答到点子上。 3、python执行文件用的是那两个包? 我只记得xlrd了,他说着只是读取的包,写入的呢?我说我忘记了。 4、python的load和dump的区别有哪些? 我一时忘了,就没答出来 5、python的testunittest如何执行多线程? 好久没有就忘记了,也没打出来。 反正和这位面试官聊了很久,也了解了很多关于服务端的测试,其实他有点想要我,可能是我实在回答的太烂,最后还是把我送走了。 周四:掌门一对一在线教育 1、自我介绍 巴拉巴拉 2、自己平常做自动化用那些开发语言? 我说第一家是用的python做的接口自动化,第二家用的是java做web自动化 3