自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 资源 (17)
  • 收藏
  • 关注

转载 阻塞线程不同方式的对比

引子大家知道,我最近在招人,今天遇到个同学,他的源码看过一些,然后我就开始了AQS连环问。我:说说AQS的大致流程?他:AQS包含一个状态变量,一个同步队列……balabala……互斥锁balabala,共享锁balabala……我:AQS中除了同步队列,还有什么队列?他:还有个Condition,Condition中有个条件队列……我:条件队列和同步队列有什么区别?他:条件队列balabala,然后调用LockSupport.park()进入休眠,等待被唤醒,……,balaba

2020-05-31 21:28:46 268

转载 深读源码-java线程系列之线程池深入解析——生命周期

简介上一章我们一起重温了下线程的生命周期(六种状态还记得不?),但是你知不知道其实线程池也是有生命周期的呢?!问题(1)线程池的状态有哪些?(2)各种状态下对于任务队列中的任务有何影响?先上源码其实,在我们讲线程池体系结构的时候,讲了一些方法,比如shutDown()/shutDownNow(),它们都是与线程池的生命周期相关联的。我们先来看一下线程池ThreadPoolExecutor中定义的生命周期中的状态及相关方法:private final AtomicIntege

2020-05-30 07:24:22 228

转载 深读源码-java线程系列之线程的生命周期

简介大家都知道线程是有生命周期,但是网上几乎没有一篇文章讲得是完全正确的。常见的错误有:就绪状态、运行中状态(RUNNING)、死亡状态、中断状态、只有阻塞没有等待状态、流程图乱画等,最常见的错误就是说线程只有5种状态。今天这篇文章会彻底讲清楚线程的生命周期,并分析synchronized锁、基于AQS的锁中线程状态变化的逻辑。所以,对synchronized锁和AQS原理(源码)不了解的同学,请翻一下博主之前的文章先熟悉这两部分的内容,否则肯定记不住这里讲的线程生命周期。问题(1)

2020-05-29 18:56:26 129

转载 深读源码-java线程系列之线程池深入解析——构造方法

简介ThreadPoolExecutor的构造方法是创建线程池的入口,虽然比较简单,但是信息量很大,由此也能引发一系列的问题,同样地,这也是面试中经常被问到的问题,下面只是列举了一部分关于ThreadPoolExecutor构造方法的问题,如果你都能回答上来,则可以不用看下面的分析了。问题(1)ThreadPoolExecutor有几个构造方法?(2)ThreadPoolExecutor最长的构造方法有几个参数?(3)keepAliveTime是做什么用的?(7)核心线程会不会超时关

2020-05-29 18:07:07 170

转载 深读源码-java线程系列之线程池深入解析——体系结构

简介Java的线程池是块硬骨头,对线程池的源码做深入研究不仅能提高对Java整个并发编程的理解,也能提高自己在面试中的表现,增加被录取的可能性。本系列将分成很多个章节,本章作为线程池的第一章将对整个线程池体系做一个总览。体系结构上图列举了线程池中非常重要的接口和类:(1)Executor,线程池顶级接口;(2)ExecutorService,线程池次级接口,对Executor做了一些扩展,增加一些功能;(3)ScheduledExecutorService,对Executor

2020-05-29 17:46:33 189

转载 深读源码-java线程系列之自己手写一个线程池进阶版

问题(1)自己动手写的线程池如何支持带返回值的任务呢?(2)如果任务执行的过程中抛出异常了该怎么处理呢?简介上一章我们自己动手写了一个线程池,但是它是不支持带返回值的任务的,那么,我们自己能否实现呢?必须可以,今天我们就一起来实现带返回值任务的线程池。前情回顾首先,让我们先回顾一下上一章写的线程池:(1)它包含四个要素:核心线程数、最大线程数、任务队列、拒绝策略;(2)它具有执行无返回值任务的能力;(3)它无法处理有返回值的任务;(4)它无法处理任务执行的异常(线程中

2020-05-29 16:33:30 175

转载 深读源码-java线程系列之自己手写一个线程池

问题(1)自己动手写一个线程池需要考虑哪些因素?(2)自己动手写的线程池如何测试?简介线程池是Java并发编程中经常使用到的技术,那么自己如何动手写一个线程池呢?本文将手把手带你写一个可用的线程池。属性分析线程池,顾名思义它首先是一个“池”,这个池里面放的是线程,线程是用来执行任务的。首先,线程池中的线程应该是有类别的,有的是核心线程,有的是非核心线程,所以我们需要两个变量标识核心线程数量coreSize和最大线程数量maxSize。为什么要区分是否为核心线程呢?这是为了控制

2020-05-28 22:41:58 204

转载 深读源码-java线程系列之创建线程的8种方式

问题(1)创建线程有哪几种方式?(2)它们分别有什么运用场景?简介创建线程,是多线程编程中最基本的操作,大概有8种创建线程的方式,你知道吗?继承Thread类并重写run()方法public class CreatingThread01 extends Thread { @Override public void run() { System.out.println(getName() + " is running"); } pu

2020-05-28 17:45:27 114

转载 深读源码-java线程系列之线程模型

问题(1)线程类型有哪些?(2)线程模型有哪些?(3)各语言使用的是哪种线程模型?简介在Java中,我们平时所说的并发编程、多线程、共享资源等概念都是与线程相关的,这里所说的线程实际上应该叫作“用户线程”,而对应到操作系统,还有另外一种线程叫作“内核线程”。用户线程位于内核之上,它的管理无需内核支持;而内核线程由操作系统来直接支持与管理。几乎所有的现代操作系统,包括 Windows、Linux、Mac OS X 和 Solaris,都支持内核线程。最终,用户线程和内核线程之间必然

2020-05-27 19:11:18 132

转载 深读源码-java同步系列之总结篇

简介同步系列到此就结束了,本篇文章对同步系列做一个总结。脑图下面是关于同步系列的一份脑图,列举了主要的知识点和问题点,看过本系列文章的同学可以根据脑图自行回顾所学的内容,也可以作为面试前的准备。总结所谓同步,就是保证多线程(包括多进程)对共享资源的读写能够安全有效的运行。根据同步的运用场景的不同,实现同步的方式也是随之一起变化,但是总结下来,这些实现方式之间又有一些共通之处。不管是互斥锁、读写锁、信号量、CountDownLatch、回环栅栏、Phaser,还是各种分布式锁,

2020-05-27 18:35:59 129

转载 深读源码-java同步系列之redis分布式锁进化史

问题(1)redis如何实现分布式锁?(2)redis分布式锁有哪些优点?(3)redis分布式锁有哪些缺点?(4)redis实现分布式锁有没有现成的轮子可以使用?简介Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。本章我们将介绍如何基于redis实现分布式锁,并把其实现的进化史从头到尾讲明白,以便大家在面试的时候能讲清

2020-05-27 15:35:19 191

转载 Curator实现分布式锁

简介分布式锁服务宕机, ZooKeeper 一般是以集群部署, 如果出现 ZooKeeper 宕机, 那么只要当前正常的服务器超过集群的半数, 依然可以正常提供服务持有锁资源服务器宕机, 假如一台服务器获取锁之后就宕机了, 那么就会导致其他服务器无法再获取该锁. 就会造成 死锁 问题, 在 Curator 中, 锁的信息都是保存在临时节点上, 如果持有锁资源的服务器宕机, 那么 ZooKeeper 就会移除它的信息, 这时其他服务器就能进行获取锁操作。zookeper的实现主要是下面四个类:I

2020-05-27 15:31:04 525

转载 Zookeeper的CAP原则

CAP原则简单介绍CAP 想要进行分布式事务控制,CAP理论是我们必须要知道的; CAP原则:也叫CAP定理,指的是在一个分布式系统中,一致性、可用性、分区容错性三者不可兼得 一致性(Consistency) 分布式系统中的所有主机在同一时刻是否可以保证具有完全相同的数据备份,若具有,则该分布式系统具有一致性 可用性(Availability) 在集群中,部分节点发生故障后,是否会影响对客户端读写请求的响应,注意,若在短时间内会影响,其也不具有这里说说

2020-05-26 22:45:35 16404

转载 深读源码-java同步系列之zookeeper分布式锁

问题(1)zookeeper如何实现分布式锁?(2)zookeeper分布式锁有哪些优点?(3)zookeeper分布式锁有哪些缺点?简介zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它可以为分布式应用提供一致性服务,它是Hadoop和Hbase的重要组件,同时也可以作为配置中心、注册中心运用在微服务体系中。本章我们将介绍zookeeper如何实现分布式锁运用在分布式系统中。基础知识什么是znode?zooKeeper操作和维护的为一个个数据节点,称

2020-05-26 22:32:37 214

转载 深读源码-java同步系列之mysql分布式锁

问题(1)什么是分布式锁?(2)为什么需要分布式锁?(3)mysql如何实现分布式锁?(4)mysql分布式锁的优点和缺点?简介随着并发量的不断增加,单机的服务迟早要向多节点或者微服务进化,这时候原来单机模式下使用的synchronized或者ReentrantLock将不再适用,我们迫切地需要一种分布式环境下保证线程安全的解决方案,今天我们一起来学习一下mysql分布式锁如何实现分布式线程安全。基础知识mysql中提供了两个函数——get_lock('key', timeo

2020-05-26 22:01:39 142

转载 深读源码-java同步系列之Phaser源码解析

问题(1)Phaser是什么?(2)Phaser具有哪些特性?(3)Phaser相对于CyclicBarrier和CountDownLatch的优势?简介Phaser,翻译为阶段,它适用于这样一种场景,一个大任务可以分为多个阶段完成,且每个阶段的任务可以多个线程并发执行,但是必须上一个阶段的任务都完成了才可以执行下一个阶段的任务。这种场景虽然使用CyclicBarrier或者CountryDownLatch也可以实现,但是要复杂的多。首先,具体需要多少个阶段是可能会变的,其次,每个阶

2020-05-26 21:48:18 270

转载 深读源码-java同步系列之CyclicBarrier源码解析

问题(1)CyclicBarrier是什么?(2)CyclicBarrier具有什么特性?(3)CyclicBarrier与CountDownLatch的对比?简介CyclicBarrier,回环栅栏,它会阻塞一组线程直到这些线程同时达到某个条件才继续执行。它与CountDownLatch很类似,但又不同,CountDownLatch需要调用countDown()方法触发事件,而CyclicBarrier不需要,它就像一个栅栏一样,当一组线程都到达了栅栏处才继续往下走。使用方法

2020-05-25 22:45:20 190

转载 深读源码-java同步系列之StampedLock源码解析

问题(1)StampedLock是什么?(2)StampedLock具有什么特性?(3)StampedLock是否支持可重入?(4)StampedLock与ReentrantReadWriteLock的对比?简介StampedLock是java8中新增的类,它是一个更加高效的读写锁的实现,而且它不是基于AQS来实现的,它的内部自成一片逻辑,让我们一起来学习吧。StampedLock具有三种模式:写模式、读模式、乐观读模式。ReentrantReadWriteLock中的读和写

2020-05-25 14:00:15 259

转载 深读源码-java同步系列之AQS总结篇

问题(1)AQS的定位?(2)AQS的重要组成部分?(3)AQS运用的设计模式?(4)AQS的总体流程?简介AQS的全称是AbstractQueuedSynchronized,它的定位是为Java中几乎所有的锁和同步器提供一个基础框架。在之前的章节中,我们一起学习了ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch的源码,今天我们一起来对AQS做个总结。状态变量stateAQS中定义了一个状态变量st

2020-05-24 18:26:02 175 1

转载 深读源码-java同步系列之CountDownLatch源码解析

问题(1)CountDownLatch是什么?(2)CountDownLatch具有哪些特性?(3)CountDownLatch通常运用在什么场景中?(4)CountDownLatch的初始次数是否可以调整?简介CountDownLatch,可以翻译为倒计时器,但是似乎不太准确,它的含义是允许一个或多个线程等待其它线程的操作执行完毕后再执行后续的操作。CountDownLatch的通常用法和Thread.join()有点类似,等待其它线程都完成后再执行主任务。类结构C

2020-05-24 18:04:41 239 1

转载 深读源码-java同步系列之Semaphore源码解析

问题(1)Semaphore是什么?(2)Semaphore具有哪些特性?(3)Semaphore通常使用在什么场景中?(4)Semaphore的许可次数是否可以动态增减?(5)Semaphore如何实现限流?简介Semaphore,信号量,它保存了一系列的许可(permits),每次调用acquire()都将消耗一个许可,每次调用release()都将归还一个许可。特性Semaphore通常用于限制同一时间对共享资源的访问次数上,也就是常说的限流。下面我们一起来学习

2020-05-24 16:05:27 236 1

转载 深读源码-java同步系列之ReentrantReadWriteLock源码解析

问题(1)读写锁是什么?(2)读写锁具有哪些特性?(3)ReentrantReadWriteLock是怎么实现读写锁的?(4)如何使用ReentrantReadWriteLock实现高效安全的TreeMap?简介读写锁是一种特殊的锁,它把对共享资源的访问分为读访问和写访问,多个线程可以同时对共享资源进行读访问,但是同一时间只能有一个线程对共享资源进行写访问,使用读写锁可以极大地提高并发量。特性读写锁具有以下特性:是否互斥 读 写 读 否 是

2020-05-24 14:52:56 245

转载 深读源码-java同步系列之ReentrantLock与synchronized对比分析

问题(1)ReentrantLock有哪些优点?(2)ReentrantLock有哪些缺点?(3)ReentrantLock是否可以完全替代synchronized?简介synchronized是Java原生提供的用于在多线程环境中保证同步的关键字,底层是通过修改对象头中的MarkWord来实现的。ReentrantLock是Java语言层面提供的用于在多线程环境中保证同步的类,底层是通过原子更新状态变量state来实现的。既然有了synchronized的关键字来保证同步了,为

2020-05-24 11:22:20 256

转载 深读源码-java同步系列之ReentrantLock源码解析(二)——条件锁

问题(1)条件锁是什么?(2)条件锁适用于什么场景?(3)条件锁的await()是在其它线程signal()的时候唤醒的吗?简介条件锁,是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁。比如,在阻塞队列中,当队列中没有元素的时候是无法弹出一个元素的,这时候就需要阻塞在条件notEmpty上,等待其它线程往里面放入一个元素后,唤醒这个条件notEmpty,当前线程才可以继续去做“弹出一个元素”的行为。注意,这里的条件,必须是在获取锁

2020-05-23 23:25:35 234

转载 深读源码-java同步系列之ReentrantLock源码解析(一)——公平锁、非公平锁

问题(1)重入锁是什么?(2)ReentrantLock如何实现重入锁?(3)ReentrantLock为什么默认是非公平模式?(4)ReentrantLock除了可重入还有哪些特性?简介Reentrant = Re + entrant,Re是重复、又、再的意思,entrant是enter的名词或者形容词形式,翻译为进入者或者可进入的,所以Reentrant翻译为可重复进入的、可再次进入的,因此ReentrantLock翻译为重入锁或者再入锁。重入锁,是指一个线程获取锁之后再尝试

2020-05-23 22:09:27 229

转载 深读源码-java同步系列之AQS简介

问题(1)AQS是什么?(2)AQS的定位?(3)AQS的实现原理?(4)基于AQS实现自己的锁?简介AQS的全称是AbstractQueuedSynchronizer,它的定位是为Java中几乎所有的锁和同步器提供一个基础框架。AQS是基于FIFO的队列实现的,并且内部维护了一个状态变量state,通过原子更新这个状态变量state即可以实现加锁解锁操作。本章及后续章节的内容理解起来可能会比较晦涩,建议先阅读上一章的内容《深读源码-java同步系列之自己手写一个锁Lock》

2020-05-23 19:57:26 167

转载 深读源码-java同步系列之自己手写一个锁Lock

问题(1)自己动手写一个锁需要哪些知识?(2)自己动手写一个锁到底有多简单?(3)自己能不能写出来一个完美的锁?简介本篇文章的目标一是自己动手写一个锁,这个锁的功能很简单,能进行正常的加锁、解锁操作。本篇文章的目标二是通过自己动手写一个锁,能更好地理解后面章节将要学习的AQS及各种同步器实现的原理。分析自己动手写一个锁需要准备些什么呢?首先,在上一章学习synchronized的时候我们说过它的实现原理是更改对象头中的MarkWord,标记为已加锁或未加锁。但是,我们

2020-05-23 18:53:52 252

转载 深读源码-java同步系列之synchronized解析

问题(1)synchronized的特性?(2)synchronized的实现原理?(3)synchronized是否可重入?(4)synchronized是否是公平锁?(5)synchronized的优化?(6)synchronized的五种使用方式?简介synchronized关键字是Java里面最基本的同步手段,它经过编译之后,会在同步块的前后分别生成 monitorenter 和 monitorexit 字节码指令,这两个字节码指令都需要一个引用类型的参数来指明要锁定

2020-05-22 19:43:22 217

转载 深读源码-java同步系列之volatile解析

问题(1)volatile是如何保证可见性的?(2)volatile是如何禁止重排序的?(3)volatile的实现原理?(4)volatile的缺陷?简介volatile可以说是Java虚拟机提供的最轻量级的同步机制了,但是它并不容易被正确地理解,以至于很多人不习惯使用它,遇到多线程问题一律使用synchronized或其它锁来解决。语义一:可见性前面介绍Java内存模型的时候,我们说过可见性是指当一个线程修改了共享变量的值,其它线程能立即感知到这种变化。关于Java内

2020-05-22 16:20:26 286 1

转载 深读源码-java同步系列之JMM(Java Memory Model)

简介Java内存模型是在硬件内存模型上的更高层的抽象,它屏蔽了各种硬件和操作系统访问的差异性,保证了Java程序在各种平台下对内存的访问都能达到一致的效果。硬件内存模型在正式讲解Java的内存模型之前,我们有必要先了解一下硬件层面的一些东西。在现代计算机的硬件体系中,CPU的运算速度是非常快的,远远高于它从存储介质读取数据的速度,这里的存储介质有很多,比如磁盘、光盘、网卡、内存等,这些存储介质有一个很明显的特点——距离CPU越近的存储介质往往越小越贵越快,距离CPU越远的存储介质往往越大越便

2020-05-22 11:15:14 308

转载 深读源码-java同步系列简介

简介同步系列,本来是准备写锁相关的内容,但是java中的CountDownLatch、Semaphore、CyclicBarrier这些类又不属于锁,它们和锁又有很多共同点,都是为了协同多线程的执行,都是一种同步器,所以这里就借用同步来取名字了,也就是“同步系列”的来源。概览这一篇的内容会比较多,大致包含三大主题:java中的锁、同步器、分布式锁,大致讲的内容如下:(1)volatile(2)synchronized(3)AQS及Condition(4)ReentrantLock

2020-05-21 22:47:46 108

转载 Leaf:美团的分布式唯一ID方案深入剖析

简介为什么叫leaf?因为天底下没有两片完全一样的树叶(德国哲学家、数学家莱布尼茨:There are no two identical leaves in the world),意味着每次通过leaf获取的ID肯定是唯一的。首先,简单介绍一下如何使用leaf。配置leaf是基于springboot、以HTTP协议的方式提供获取分布式唯一ID的服务。总计有两种模式:Snowflake和Segment。我们通过它的核心配置文件leaf.properties可知:leaf.name=afei

2020-05-21 21:15:43 1704

转载 深读源码-java并发包总结篇

概览原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程上下文切换。原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分,将整个操作视作一个整体是原子性的核心特征。在java中提供了很多原子类,笔者在此主要把这些原子类分成四大类。原子更新基本类型或引用类型如果是基本类型,则替换其值,如果是引用,则替换其引用地址,这些类主要有:(1)AtomicBoolean原子更新布尔类型,内部使

2020-05-21 17:26:51 110

转载 深读源码-java并发包之LongAdder源码分析

问题(1)java8中为什么要新增LongAdder?(2)LongAdder的实现方式?(3)LongAdder与AtomicLong的对比?简介LongAdder是java8中新增的原子类,在多线程环境中,它比AtomicLong性能要高出不少,特别是写多的场景。它是怎么实现的呢?让我们一起来学习吧。原理LongAdder的原理是,在最初无竞争时,只更新base的值,当有多线程竞争时通过分段的思想,让不同的线程更新不同的段,最后把这些段相加就得到了完整的LongAdder

2020-05-21 15:48:09 229

转载 深读源码-java并发包之AtomicStampedReference源码分析

问题(1)什么是ABA?(2)ABA的危害?(3)ABA的解决方法?(4)AtomicStampedReference是什么?(5)AtomicStampedReference是怎么解决ABA的?简介AtomicStampedReference是java并发包下提供的一个原子类,它能解决其它原子类无法解决的ABA问题。ABAABA问题发生在多线程环境中,当某线程连续读取同一块内存地址两次,两次得到的值一样,它简单地认为“此内存地址的值并没有被修改过”,然而,同时可能存在另

2020-05-21 11:29:13 419

转载 深读源码-java并发包之AtomicInteger源码分析

问题(1)什么是原子操作?(2)原子操作和数据库的ACID有啥关系?(3)AtomicInteger是怎么实现原子操作的?(4)AtomicInteger是有什么缺点?简介AtomicInteger是java并发包下面提供的原子类,主要操作的是int类型的整型,通过调用底层Unsafe的CAS等方法实现原子操作。还记得Unsafe吗?点击链接直达《深读源码-java魔法类之Unsafe解析》原子操作原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结

2020-05-21 09:47:20 231

转载 JAVA堆外内存的简介和使用

一:堆外内存是什么?在JAVA中,JVM内存指的是堆内存。机器内存中,不属于堆内存的部分即为堆外内存。堆外内存也被称为直接内存。堆内存和堆外内存堆外内存并不神秘,在C语言中,分配的就是机器内存,和本文中的堆外内存是相似的概念。在JAVA中,可以通过Unsafe和NIO包下的ByteBuffer来操作堆外内存。Unsafe类操作堆外内存sun.misc.Unsafe提供了一组方法来进行堆外内存的分配,重新分配,以及释放。1.public native long allo

2020-05-20 17:20:11 911

转载 深读源码-java魔法类之Unsafe解析

问题(1)Unsafe是什么?(2)Unsafe只有CAS的功能吗?(3)Unsafe为什么是不安全的?(4)怎么使用Unsafe?简介本章是java并发包专题的第一章,但是第一篇写的却不是java并发包中类,而是java中的魔法类sun.misc.Unsafe。很多低级语言中可用的技巧在Java中都是不被允许的。Java是一个安全的开发工具,它阻止开发人员犯很多低级的错误,而大部份的错误都是基于内存管理方面的。我们知道JAVA作为高级语言的重要创新一点就是在于JVM的内存管

2020-05-20 15:21:24 510

转载 人人都能看懂的 6 种限流实现方案

车辆限行就是一种生活中很常见的限流策略,它给我们美好的生活环境带来了一丝改善,并且快速增长的私家车已经给我们的交通带来了巨大的“负担”,如果再不限行,可能所有的车都要被堵在路上,这就是限流给我们的生活带来的巨大好处。从生活回到程序中,假设一个系统只能为 10W 人提供服务,突然有一天因为某个热点事件,造成了系统短时间内的访问量迅速增加到了 50W,那么导致的直接结果是系统崩溃,任何人都不能用系统了,显然只有少人数能用远比所有人都不能用更符合我们的预期,因此这个时候我们要使用「限流」了。限

2020-05-20 09:09:53 545

转载 Java对象内存布局

我们知道在Java中基本数据类型的大小,例如int类型占4个字节、long类型占8个字节,那么Integer对象和Long对象会占用多少内存呢?本文介绍一下Java对象在堆中的内存结构以及对象大小的计算。对象的内存布局一个Java对象在内存中包括对象头、实例数据和补齐填充3个部分:对象头Mark Word:包含一系列的标记位,比如轻量级锁的标记位,偏向锁标记位等等。在32位系统占4字节,在64位系统中占8字节; Class Pointer:用来指向对象对应的Class对象(其对应的元数

2020-05-19 16:54:37 224

stencilset.json

activiti-explorer 官方demo示例 审批工作流引擎汉化文件。 使用步骤:将本文件替换到activiti-explorer源码\WEB-INF\classes下的原文件 (如果本文件汉化之后,设计器出现乱码,需要将本文件的中文全部转换成Unicode编码,可百度在线转换器)

2020-03-05

agilebpm-base-spring-boot.rar

基于activiti实现的审批工作流web端项目,包含基础的用户、组织、流程审批等多种功能,SpringBoot 版本。

2020-03-05

activiti-webapp-explorer.rar

基于activiti explorer官方源码可正常运行的demo,资源中包含源码和初始化sql两个文件

2020-03-05

java操作excel工具类

java操作excel工具类java操作excel工具类java操作excel工具类java操作excel工具类

2017-11-15

java解析json所需jar包

java解析json需要jar包。java解析json需要jar包。java解析json需要jar包。java解析json需要jar包。

2017-11-15

QRCode二维码生成

QRCode,java后台生成二维码,供用户扫描。QRCode,java后台生成二维码,供用户扫描。

2017-11-15

MySpringMVC最简单的demo

MySpringMVC最简单的demo

2017-02-11

apache-maven-2.2.1

apache-maven-2.2.1

2017-02-11

dbForge Studio for MySQL msql

dbForge Studio for MySQL msql

2017-02-11

c# 开发回合制小游戏

c# 开发回合制小游 多个怪物进行攻击 可以存档,读档。

2014-02-28

wpf做的一个简单托盘效果程序

wpf做的一个简单托盘效果程序 点击关闭程序后 会在电脑右下角的任务栏里出现一个托盘,双击后会再次显示该程序。

2013-08-07

简单的局域网通信,无服务器

一个简单的类似IPMessage的小工具,实现了局域网内的简单通信功能,并且以自身机器做服务器。

2013-08-07

j2ee.jar包

j2ee.jar包用于java发送邮件时和java ee5发生冲突。

2012-10-10

Oracle10g.chm

Oracle10g.chm 。英文版的帮助文档,学习中给了我很大帮助,你们也应该能用得到。

2012-08-15

JDK6API中文参考.chm

JDK6API中文参考.本人在学习的时候一直用这个文档,感觉真的很好用。推荐给大家。

2012-08-15

apache-tomcat-6.0.14

apache-tomcat-6.0.14

2012-08-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除