
Java高阶
cheese年糕
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java程序运行堆栈分析
**1.**寄存器:最快的存储区,由编译器更具需求进行分配,我们在程序中无法控制. **2.**栈:存放函数中定义的基本类型的变量数据和对象的引用(指向堆中对应对象的地址,把对象的地址赋值给栈),但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中.).栈内存特点,数数据一执行完毕,变量会立即释放,节约内存空间。栈内存中的数据,没有默认初始化值,需要...原创 2019-08-05 10:17:45 · 315 阅读 · 0 评论 -
Java线程状态线程中止
线程的五大状态及其转换 线程的五大状态分别为:创建状态(new)、就绪状态(Runnable)、运行状态(Running)、阻 塞状态(Blocked)、死亡状态(Dead)。 五大状态之间的关系图: (1)新建状态:即单纯的创建一个线程,创建线程有三种方式; 1.集成Thread类创建线程 使用集成Thread类创建线程时,首先需要创建一个类集成Thread类并覆写Thread类 run()方...原创 2019-08-05 10:20:41 · 184 阅读 · 0 评论 -
Java内存屏障和CPU缓存
为什么需要内存屏障:在Java编译器在生成指令序列的适当位置插入一个内存屏障来禁止特定类型的处理器重排序,相当于钙塑cpu和编译器优于这个命令的必须西安执行,后于这个命令的必须后执行。 在多核场景下,为了充分利用CPU,会通过流水线将指令并行进行。又需要 指令进行重新排序以 便进行并行执行,那么问题来了,那些指令不是在所有场景下都能进行重排,除了本身的一些规 则之外,我们还需要确保多CPU的高速缓...原创 2019-08-05 10:21:29 · 287 阅读 · 0 评论 -
Java线程通信
概述: 线程与线程之间不是相互独立的个体,它们彼此之间需要相互通信和写作,最典型的例子就是生产者-消费者问题:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此一般情况下,当队列满时,会让生产者交出...原创 2019-08-05 10:22:07 · 145 阅读 · 0 评论 -
线程封闭之ThreadLocal和栈封闭
线程封闭: 线程不安全是因为多线程在访问共享的可变数据时,会发生数据的不一致,结果不正确. 实现好的并发是一件困难的事情, 那么如何解决呢,一个是使用同步,但是同步需要占用资源,另外一种方式,如果一个线程访问这个数据,就不会出现问题, 所以很多时候我们都想躲避并发. 避免并发最简单的方法就是线程封闭. 什么是线程封闭; 就是把对象封装到一个线程里,只有这个线程能看到此对象. 那么这个对象就算不是线...原创 2019-08-05 10:22:47 · 223 阅读 · 0 评论 -
线程池应用及实现原理剖析
一、为什么要使用线程池 在一些需要使用线程去处理任务的业务场景中,如果每一个任务都创建一个线程去处理,任务处理完过后,把这个线程销毁,这样会产生大量的线程创建、销毁的资源开销,Java中更是如此,虚拟机将试图跟踪每一个对象。以便可以在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能降低创建和销毁对象的次数。使用线程池能够有效的控制这种线程的创建和销毁,而且能够对创建的线程进行有效的...原创 2019-08-05 12:39:49 · 306 阅读 · 0 评论 -
JVM内存模型
1.类装载子系统把 .class 文件装载运行时数据区(内存模型) 2.执行引擎去数据区执行字节码文件 JVM内存模型 1.堆(共享) 堆就是被所有线程共享的一块内存区域.这块内存区域的唯一目的就是存放内存实例.几乎所有对象实例都在这里分配内存. 但不是所有对象都保存在堆中,如果java在必要的时候,可以把对象分配到栈中,从而自动销毁对象,那必然能减少一些垃圾回收的开销,同时提高执行效率。 逃...原创 2019-08-05 12:45:23 · 252 阅读 · 0 评论