
Java
文章平均质量分 89
linyinpeng1989
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java类加载机制
类加载过程类加载过程包含了加载、验证、准备、解析、初始化五个阶段。其中加载、验证、准备、初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。需要注意的是,这几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或...原创 2018-08-09 18:23:24 · 153 阅读 · 0 评论 -
Java锁分析 - Synchronized执行流程
乐观锁 vs 悲观锁乐观锁 总是认为不会产生并发问题,因此并不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。悲观锁总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加锁(读锁、写锁等),当其他线程想要访问数据时,都需要阻塞挂起。 Java线程阻塞的代价Java的线程是映射到操作系统原生线程之上的,如...原创 2018-08-10 18:20:55 · 707 阅读 · 0 评论 -
ThreadLocal工作原理
概述 翻译过来的大概意思是:ThreadLocal类用来提供线程内部的局部变量。这些变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。 总结:ThreadLocal不是为了解决多线程访问共享变量,而是为每个线程创建一个独立的变量副本,提供了保持对象的方法和避免参数传递的复杂性。 实现原理ThreadLoca...原创 2018-08-13 09:52:02 · 130 阅读 · 0 评论 -
ThreadLocal内存泄漏问题及最佳实践
ThreadLocal实现原理 ThreadLocal的实现是这样的:每个Thread 维护一个 ThreadLocalMap 映射表,这个映射表的 key 是 ThreadLocal 实例本身,value 是真正需要存储的 Object。也就是说 ThreadLocal 本身并不存储值,它只是作为一个 key 来让线程从 ThreadLocalMap 获取 value。值得注意的是图中的虚...原创 2018-08-13 10:17:48 · 1086 阅读 · 0 评论 -
常用JVM配置参数
详细信息参考:Oracle官方文档环境信息:Windows10JDK:1.8 Trace跟踪参数 public class Test { public static void main(String[] args) { byte[] bytes = null; for (int i = 0; i < 10; i++) ...原创 2018-08-14 15:33:09 · 262 阅读 · 0 评论 -
JVM基本结构
Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途、创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随线程的开始和结束而创建和销毁。 Java虚拟机运行时包含以下几个运行时数据区: 程序计数器程序计数器是线程私有的,在线程创建时创建。可以看作是当前线程所执行的字节码的行号指示器...原创 2018-08-14 16:09:53 · 141 阅读 · 0 评论 -
JVM垃圾回收算法
1. 概述GC最基础的算法有三种:标记-清除、复制算法、标记-压缩。由于堆分为新生代和老年代,所以我们常用的垃圾回收器一般都采用分代收集算法。 标记-清除:如它的名字一样,算法分为“标记”和“清除”两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。复制算法:将可用内存按容量划分为大小相等的两块,每次只使用其中一块内存。当这一块内存用完时,就将还存...原创 2018-08-14 22:35:37 · 172 阅读 · 0 评论 -
【Java性能优化】栈上分配
环境:Windows10Java版本:1.8 栈上分配是Java虚拟机提供的一种优化技术,基本思想是对于那些线程私有的对象(指的是不可能被其他线程访问的对象),可以将它们直接分配在栈上,而不是分配在堆上。分配在栈上的好处:可以在函数调用结束后自行销毁,而不需要垃圾回收器的介入,减轻GC压力,从而提升系统的性能。 使用场景:对于大量的零散小对象,栈上分配提供了一种很好的对象分...原创 2018-08-20 15:12:18 · 476 阅读 · 0 评论