![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
文章平均质量分 69
larzhu
这个作者很懒,什么都没留下…
展开
-
java基础
java基础一. java 程序运行原理1.class文件内容2.JVM运行时数据区2.1 方法区2.2 堆内存2.3 虚拟机栈2.4 本地方法栈2.5 程序计数器3.查看class文件内容3.1 class内容-版本号/访问控制3.2 class内容-常量池3.3 class内容-构造方法3.4 class内容-程序入口main方法4. 程序完整运行分析二. 线程状态java.lang.Thread.State.三. 线程终止1. 不正确的线程终止 - Stop2. 正确的线程终止- Interrupt3原创 2021-08-21 13:52:27 · 158 阅读 · 0 评论 -
3.2.5 JVM参数及调优
JVM参数及调优调优基本概念常用JVM参数GC调优思路通用GC参数垃圾收集器Parallel参数调优垃圾收集器CMS参数调优垃圾收集器G1参数调优运行时JIT编译优化参数调优演示测试环境:1.示例代码-11.1 GC分析,主要查看GC导致的stop-the-world,这将导致我们的程序延时增大。1.2 GC调优2、示例代码 -22.1 GC调优结语调优基本概念常用JVM参数GC调优思路通用GC参数垃圾收集器Parallel参数调优垃圾收集器CMS参数调优cms在jdk9中已经废弃原创 2021-04-28 07:46:49 · 140 阅读 · 0 评论 -
3.2.4 JDK内置命令工具
JDK内置命令内置命令javapjpsjstatjcmdjinfojhatjmapjstack内置工具JconsoleJvisualVM内置命令javapjava 反编译工具,主要用于根据java字节码文件反汇编为java原代码文件jps显示当前所有java进程pid的命令jstat监视java虚拟机(JVM)统计信息jcmdjinfojhatjmapjstack内置工具JconsoleJvisualVM...原创 2021-04-27 08:09:13 · 132 阅读 · 0 评论 -
3.2.3 垃圾回收机制
垃圾回收机制自动垃圾收集如何确认内存需要被回收可达性分析算法引用类型和可达性级别![在这里插入图片描述](https://img-blog.csdnimg.cn/20210418232857811.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xhcnJ5X3podV8xMjM=,size_16,color_FFFFFF,t_70)垃圾收集算法分代原创 2021-04-19 23:19:22 · 72 阅读 · 0 评论 -
3.2.1 类加载机制
类加载机制运行时数据区类生命周期类加载器验证问题查看类对应的加载器JVM如何知道我们的类在何方类不会重复加载类的卸载双亲委派模型运行时数据区类生命周期类加载器验证问题查看类对应的加载器/** * 查看类的加载器实例 */public class ClassLoaderView { public static void main(String[] args) throws Exception { // 加载核心类库的 BootStrap ClassLoade原创 2021-04-18 23:21:17 · 417 阅读 · 2 评论 -
4.3.7 fork/join并发处理框架
fork/join并发处理框架用来做什么意图梳理实现思路适用用来做什么ForkJoinPool是ExecutorService接口的实现,它专为可以递归分解成小块的工作而设计。fork/join框架将任务分配给线程池中的工作线程,充分利用处理器的优势,提高程序性能。使用fork/join框架的第一步是编写执行一部分工作的代码。雷士的伪代码如下: 如果(当前工作部分足够小) 直接做这项工作其他 把当前工作分成两部分 调用这两个部分并等待结果将此代码包装在ForkJoinTash子类中,通原创 2021-04-18 20:45:53 · 66 阅读 · 0 评论 -
csp unsafe-inner
unsafe-innerunsafe-innerunsafe-evalunsafe-inner在response header "Content-Security-Policy"中若是 script-src 不支持 ‘unsafe-inner’ 则下列的在jsp/html页面中直接写行内脚本的形式不被允许。禁用在script标签下直接写方法及行内样式 必须通过js脚本的模式引入禁止直接在标签中直接写事件的方式 ,必须在js中添加事件监听禁用在标签内通过style直接添加样式,必须通过css原创 2021-04-16 14:09:53 · 115 阅读 · 0 评论 -
4.3.6 FutureTask核心思想
FutureTaskwhere-经典场景where-经典场景查询多个系统数据后进行 汇总返回:public class ThreadTest_Demo { static ExecutorService executors = Executors.newScheduledThreadPool(2); public static void main(String[] args) throws ExecutionException, InterruptedException {原创 2021-04-16 09:20:50 · 97 阅读 · 0 评论 -
4.3.5 并发工具类
并发工具类AQSSemaphoreCountDownLatchCyclicBarrierAQS### 实现AQS的方法可以实现对应的锁Semaphorepublic class Semaphore_Demo {// static KaneSemaphore sp =new KaneSemaphore(6); static Semaphore=new Semaphore(6); public static void main(String[] args) {原创 2021-04-16 08:27:10 · 104 阅读 · 0 评论 -
4.3.4并发容器类list_set_queue
list_set_queuelistArrayListLinkedListCopyOnWriteArrayListSet 集合Queue APIArrayBlockingQueueLinkedBlockingQueuelistArrayList默认长度为10modcount 为什么会抛出异常LinkedListCopyOnWriteArrayList对写加锁Set 集合Queue APIArrayBlockingQueueLinkedBlockingQueue...原创 2021-04-16 06:56:03 · 130 阅读 · 0 评论 -
4.3.3.1 并发容器类Map
MapJDK源码学习方法推理HashMap的实现数据结构数组链表二叉树红黑树红黑树定律:HashMap总结resize 扩容HashTableConcurrentHashMap带参构造器分析put的过程初始化方法 initTable转红黑树方法 :treeifyBin扩容方法: tryPresize (注意,核心重点)数据迁移:transfer (难点)JDK源码学习方法逻辑思维能力是梳理学习方法的基础养成线性思维:两个或者多个概念,攒成一条线推理HashMap的实现hashmap是key-va原创 2021-04-16 06:29:01 · 311 阅读 · 0 评论 -
4.3.2 AQS
读写锁与AQSReadWriteLock概念维护一对关系锁,一个只能用于读操作,一个只能用于写操作读锁可以由多个读线程同时持有,写锁是排他的。**同一时间两把锁不能被不同线程持有** public class ReadWriteLock_Demo { //不希望读写的内容都不一样,需要加入锁机制 volatile long i =0; Lock lock = new ReentrantLock(); ReadWriteLock rwLock = new Re原创 2021-04-12 22:22:26 · 109 阅读 · 0 评论 -
4.3.1 Lock接口及其实现
Lock APILocks包 类层次结构Lock 接口Condition的使用来实现简单的BlockingQuen线程虚假唤醒:是一个表象,即在多处理器的系统下发出wait的程序有可 能在没有notify唤醒的情形下苏醒继续执行https://www.zhihu.com/question/50892224public class BlockingQueue_Demo { public static void main(String[] args) throws原创 2021-04-12 18:46:08 · 126 阅读 · 0 评论 -
4.2.3 Java锁相关-Synchronized
Synchronized 从使用到原理Java中锁的概念自旋锁: 是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,知道获取到锁才会退出循环。乐观锁:假定没有冲突,在修改数据时如果发现数据和之前获取的不一致,则读最新数据,修改后重试悲观锁:假定会发生并发冲突,同步所有对数据的相关操作,从读数据就开始上锁。独享锁(写):给资源加上写锁,线程可以修改资源,其他线程不能再加锁;(单写)共享锁(读):给资源加上读锁后只能读不能改,原创 2021-04-12 10:03:58 · 118 阅读 · 0 评论 -
4.2.2 线程安全之原子性
案例分析为什么多个线程同时对变量i++会出现非预期结果呢?/**如下代码 6个线程同时对变量i做i++的操作,每个线程自增1w次,结果时随机的且值基本小于6w*/public class Demo1_CounterTest { public static void main(String[] args) throws InterruptedException { // final CounterUnsafe ct = new CounterUnsafe();原创 2021-04-09 12:36:00 · 162 阅读 · 0 评论 -
4.2.1 java线程安全之可见性
JVM运行时数据区Java内存模型 VS JVM运行时数据区初看Java内存模型多线程中的问题所见非所得无法肉眼去检测程序的准确性不同的运行平台有不同的表现错误很难重现eg 问题:工作内存缓存CPU指令重排JIT编译器(Just in time compiler)脚本语言与编译语言的区别?解释执行:即咱们说的脚本,在执行时,由语言的解释器将其一条条翻译成机器可识别的指令编译执行:将我们写的程序,直接编译成机器可以识别的代码。java是什么语言:volati原创 2021-04-07 22:36:11 · 147 阅读 · 0 评论 -
2.2.5 线程封闭
概念多线程访问共享数据时,设计到线程间数据同步的问题。并不是所有时候,都要用到共享数据,所以线程封闭概念就提出来了。数据都被封闭再各子的线程之中,就不需要同步,这种通过将数据封闭再线程中而避免使用同步的技术称为 **线程封闭**。线程封闭具体的体现又: **ThreadLocal**、**局部变量**.ThreadLocalthreadLocal是java里一种特殊的变量他是一个线程级别的变量,每个线程都有一个ThreadLocal就是每个线程都拥有自己独立的变量,竞争条件被彻底消除,再并发模原创 2021-04-07 01:14:38 · 154 阅读 · 0 评论 -
2.2.4 线程通信
通信方式要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等。涉及到线程之间相互通信,分为下面四类:1. 文件共享2. 网络共享3. 共享变量4. jdk提供的线程协调API 细分为: suspend/resume、wait/notify、park/unpark.代码实列:···import java.util.concurrent.locks.LockSupport;/** 三种线程协作通信的方式:suspend/resume、wait/notify、park/原创 2021-04-07 00:58:14 · 97 阅读 · 0 评论 -
2.2.3 内存屏障和CPU缓存
CPU缓存和内存屏障CPU性能优化手段 -缓存多级缓存缓存同步协议CPU性能优化手段 -运行时指令重排两个问题CPU高速缓存下有一个问题:缓存中的数据和主内存的数据并不是实时同步的,各个CPU(或CPU核心)间的数据也不是实时同步。在同一个时间点,各CPU所看到同一内存地址的数据的值可能是不一致的。CPU执行指令重排序优化有一个问题:虽然遵守了as-if-serial语义,单仅在单CPU自己执行的情况下能保证结果正确。多喝多线程中,指令逻辑无法分辨因果关联,可能出现乱序执行,导原创 2021-04-07 00:19:09 · 114 阅读 · 1 评论 -
2.2.2 线程终止
线程终止不正确的线程终止 - StopStop: 终止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不建议使用。(下图中i自增成功了 ,但是j自增因为线程被stop掉没有被执行)。Destroy: JDK 未实现该方法 。正确的线程终止Interrupt如果目标线程在调用Object class的wait()、wait(long)或是wait(long,int)方法、join()、join(long,int)或是sleep(long,int) 方法是被阻塞,那么Interru原创 2021-04-06 23:54:53 · 105 阅读 · 0 评论 -
2.1.1 Java程序运行原理
Java 基础JAVA程序运行原理class文件内容JVM运行时数据区方法区堆内存虚拟机栈本地方法栈程序计数器查看class文件内容class内容-版本号/访问控制class内容-常量池class内容-构造方法class内容-程序入口main方法合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章U原创 2021-04-06 23:33:13 · 88 阅读 · 0 评论 -
2.2.1 线程状态
线程状态6个状态定义: java.lang.Thread.State.New:尚未启动的线程的线程状态Runnable: 可运行线程的状态,登台CPU调度Blocked: 线程阻塞等待监视器锁定的线程状态处于synchronized同步代码块或方法中被阻塞Waiting: 等待线程的线程状态。下列不带超时的方式Object.wait、Thread.join、 LockSupport.parkTimed Waiting: 具有指定等待时间的等待线程的线程状态。下列带超时的方式:Thread.原创 2021-04-06 23:32:03 · 111 阅读 · 0 评论