- 浏览: 421195 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (216)
- JAVA (136)
- Python (7)
- 娱乐生活 (10)
- Cloud (5)
- Linux (9)
- JavaScript (7)
- Oracle (11)
- Groovy (1)
- Mysql (3)
- NoSQL (4)
- tomcat (6)
- apache/nginx (16)
- C/C++ (5)
- 设计模式 (7)
- 架构 (8)
- openstack (1)
- hadoop (2)
- 数据仓库 (7)
- linkedin (17)
- JavaGeeker (54)
- Google (9)
- opensource (44)
- spring (21)
- Performance (39)
- lua (2)
- Rust (1)
- WASM (0)
- Golang (0)
- Microservice (1)
- Blockchain (0)
- Web3 (0)
- 边缘计算 (0)
- 硅谷 (0)
- 密码学 (0)
- BTC (0)
- Ethereum (0)
最新评论
-
u012916287:
请问大神。这个架构是你们公司的产品吗?最近准备搞一个基于spr ...
基于DDD的微服务架构设计 -
铁柱他哥:
能给我一份源码码,我这儿边出了点儿问题我参考一下
Jersey采用JSP模板 -
hch2012:
大神,膜拜! ...
基于DDD的微服务架构设计 -
cywhoyi:
lionld23 写道等着看呢,速度速度我是抽空再写的,整篇文 ...
从demo到支持高并发 -
lionld23:
等着看呢,速度速度
从demo到支持高并发
首先需要了解些java并发教程,其实java也是可以通过native的本地方法去操作底层api的,比如大家所知道Aomic、CAS等概念性的操作。
下面一篇文章是来源于CSDN的觉得挺好的讲关于unsafe的
http://blog.csdn.net/aesop_wubo/article/details/7537278
下面是一个重新设计过的对象池的获取
下面一篇文章是来源于CSDN的觉得挺好的讲关于unsafe的
http://blog.csdn.net/aesop_wubo/article/details/7537278
下面是一个重新设计过的对象池的获取
public class FastObjectPool<T> { private Holder<T>[] objects; private volatile int takePointer; private int releasePointer; private final int mask; private final long BASE; private final long INDEXSCALE; private final long ASHIFT; public ReentrantLock lock = new ReentrantLock(); private ThreadLocal<Holder<T>> localValue = new ThreadLocal<Holder<T>>(); @SuppressWarnings("unchecked") public FastObjectPool(PoolFactory<T> factory, int size) { int newSize = 1; while (newSize < size) { newSize = newSize << 1; } size = newSize; objects = new Holder[size]; for (int x = 0; x < size; x++) { objects[x] = new Holder<T>(factory.create()); } mask = size - 1; releasePointer = size; BASE = THE_UNSAFE.arrayBaseOffset(Holder[].class); INDEXSCALE = THE_UNSAFE.arrayIndexScale(Holder[].class); ASHIFT = 31 - Integer.numberOfLeadingZeros((int) INDEXSCALE); } public Holder<T> take() { int localTakePointer; Holder<T> localObject = localValue.get(); if (localObject != null) { if (localObject.state.compareAndSet(Holder.FREE, Holder.USED)) { return localObject; } } while (releasePointer != (localTakePointer = takePointer)) { int index = localTakePointer & mask; Holder<T> holder = objects[index]; // if(holder!=null && THE_UNSAFE.compareAndSwapObject(objects, // (index*INDEXSCALE)+BASE, holder, null)) if (holder != null && THE_UNSAFE.compareAndSwapObject(objects, (index << ASHIFT) + BASE, holder, null)) { takePointer = localTakePointer + 1; if (holder.state.compareAndSet(Holder.FREE, Holder.USED)) { localValue.set(holder); return holder; } } } return null; } public void release(Holder<T> object) throws InterruptedException { lock.lockInterruptibly(); try { int localValue = releasePointer; // long index = ((localValue & mask) * INDEXSCALE ) + BASE; long index = ((localValue & mask) << ASHIFT) + BASE; if (object.state.compareAndSet(Holder.USED, Holder.FREE)) { THE_UNSAFE.putOrderedObject(objects, index, object); releasePointer = localValue + 1; } else { throw new IllegalArgumentException("Invalid reference passed"); } } finally { lock.unlock(); } } public static class Holder<T> { private T value; public static final int FREE = 0; public static final int USED = 1; private AtomicInteger state = new AtomicInteger(FREE); public Holder(T value) { this.value = value; } public T getValue() { return value; } } public static interface PoolFactory<T> { public T create(); } public static final Unsafe THE_UNSAFE; static { try { final PrivilegedExceptionAction<Unsafe> action = new PrivilegedExceptionAction<Unsafe>() { public Unsafe run() throws Exception { Field theUnsafe = Unsafe.class .getDeclaredField("theUnsafe"); theUnsafe.setAccessible(true); return (Unsafe) theUnsafe.get(null); } }; THE_UNSAFE = AccessController.doPrivileged(action); } catch (Exception e) { throw new RuntimeException("Unable to load unsafe", e); } } }
发表评论
-
Rust的Graphql支持
2019-11-23 12:44 804#![feature(decl_macro, proc_ma ... -
Ethereum Solidity Dapp Game Contract
2019-07-30 17:22 544pragma solidity >=0.4.17 &l ... -
Fabric超级账本智能合约
2019-07-30 16:23 1114package main import ( &qu ... -
Golang实现以太坊转账
2019-04-28 14:07 1405client, err := ethclient.Dia ... -
数据处理基于DataMicroservices实现
2017-12-29 13:45 1020背景: 谈到微服务化,肯定会想到容器,谈到java的微服务 ... -
支持MapDB的Eventstore
2017-04-11 18:15 1531背景:现在微服务大行其道,虽然微服务开山鼻祖是不建议在微服 ... -
使用Spring-Cloud搭建微服务架构
2017-02-16 14:00 6071搭建一套微服务架构的,我个人觉得必须如下模块: con ... -
DDD分布式架构设计的BASE一致性
2016-08-09 16:32 2470问题背景: 在DDD的架构设计中最难以解决的 ... -
支持分布式的callback
2016-08-03 13:10 1117项目背景: 之前在某次培训的分享中,谈到r ... -
基于DDD的微服务架构设计
2016-07-20 17:19 11742DDD领域驱动设计(DDD:Domain-Driven D ... -
使用netty完成proxy-server
2016-06-13 16:34 0项目背景: 现在主流的android与back ... -
从demo到支持高并发
2016-02-25 18:16 3456前言: Java语言作用很大,因有众多分门杂类的 ... -
基于Spring支持JMX
2015-11-08 00:43 3298前言: 基于Vert写的组件,其中在使用过程 ... -
Vertx与Spring配合完成DML操作
2015-10-29 14:26 11229前言 vertx相较于Tomcat不同之处 引用osc ... -
基于Netty4网站架构
2015-10-28 10:44 11816前言: 本人所在公司在业内比较知名的公司, ... -
异常处理
2015-10-08 16:12 2781首先提倡下Hibernate的验证器,功能强大且使用方面,H ... -
依托于Spring重加载
2015-10-05 22:13 1105这几天发现单位同事都在使用JRebel作为热部署工具,它集合 ... -
服务端校验
2015-09-29 17:47 0现在Javer总是提框架来框架去,其实我挺讨厌这类人的,当然我 ... -
Spring自定义拦截器配置
2015-09-27 10:02 5085前言: 公司生产环境频频被报性能瓶颈问题,为了找出问题的所 ... -
异步调度设计
2015-08-06 14:54 2614平常我们做应用功能的时候,经常会碰到A、B、C等多起事件取 ...
相关推荐
在Unity3D游戏开发中,"Object Pool"是一种优化技术,用于管理游戏对象的创建和销毁,以提高性能并减少垃圾回收(Garbage Collection)的压力。本Demo是针对Unity3D内置对象池的一个实例,通过对比使用和不使用对象...
Unity PoolManager v7.0.1 是一个专为Unity游戏引擎设计的对象池管理插件,其主要目的是优化游戏性能,减少资源的频繁创建与销毁,从而避免内存碎片和提高游戏运行效率。对象池是一种常见的资源管理策略,尤其在处理...
在软件设计中,对象池模式是一种常用的优化手段,尤其在频繁创建和销毁对象的场景下,例如数据库连接池、线程池等。 Apache Commons Pool 提供了灵活且可扩展的框架,用于创建对象池。这个库的核心在于它的`...
Apache Commons Pool2提供了可扩展的对象池API,它支持自定义对象池策略,如最大活动对象数、空闲对象超时等。这个库广泛应用于数据库连接池(如HikariCP、C3P0)和其他需要高效复用对象的场景。 **核心概念:** 1....
4. **获取和归还对象**:通过调用pool的borrowObject()和returnObject()方法来获取和归还对象。 5. **关闭对象池**:在不再使用对象池时,调用pool的close()方法释放资源。 总的来说,Apache Commons Pool2是Java...
PoolManager v5.8.1 是一个专为Unity游戏引擎设计的对象池系统,它旨在提高游戏性能和效率。对象池是一种资源管理策略,通过预先创建并缓存一组对象,而不是在需要时每次创建新对象,从而减少频繁的内存分配和销毁...
Apache Commons Pool 是 Apache 软件基金会的一个项目,它的目标是提供一个可扩展且高度灵活的对象池实现。 在"commons-pool2-2.3"这个版本中,包含了以下关键组件和功能: 1. **对象池接口(Poolable)**:Apache...
对象池是一种设计模式,它维护了一个对象的集合,这些对象在使用后不是被销毁,而是被放回池中等待下一次使用。这种策略减少了创建和销毁对象的次数,提高了系统的性能,尤其是在创建对象成本较高的情况下。 **...
例如,当对象需求量增加时,它可以自动扩展池;当需求减少时,可以适当收缩池,避免资源浪费。 6. **对象分类管理**:在大型项目中,可能有多种类型的对象需要管理。PoolManager支持对不同类型的对象进行分类管理,...
1. **对象池(Object Pool)**:对象池是一种设计模式,用于创建和管理一组相同类型的对象。这些对象在池中被复用,而不是每次需要时都创建新的实例,从而提高了性能和效率,特别是对于资源密集型对象如数据库连接。...
- **定义**: Object-C是一种通用、面向对象的编程语言,基于C语言并扩展了许多面向对象的特性。 - **应用场景**: 主要用于开发iOS和macOS应用。 - **特点**: - 继承自C语言,具有C的所有特性。 - 引入了面向对象的...
例如,`BorrowObject.jpg`和`ReturnObject.jpg`可能展示了从对象池中借用和归还对象的过程。 在`ObjectPool`的基础上,`KeyedObjectPool`进一步扩展了功能,允许我们存储和管理键值对形式的对象。这在需要按特定键...
2. **线程安全**:Apache Commons Pool 1.5.4 为多线程环境设计,保证了在并发环境下的正确性。通过锁机制和同步策略,确保了对象池在多个线程同时访问时的稳定性和一致性。 3. **配置灵活性**:Pool 提供了丰富的...
OSD的设计允许数据的副本或者通过擦除编码进行冗余,以确保即使在硬件故障的情况下,数据也能得到保护。 1. **单个设备支持**: 每个OSD通常由单个存储设备支持,如一个硬盘或固态盘。这种配置简单,但可能限制了...
### Object-C 学习文档知识点总结 #### 开始学习Objective-C ...以上是对“Object-C学习文档”标题和描述中的知识点进行了详细的解释和扩展。希望这份文档能帮助初学者更好地理解和学习Objective-C。
- Apache Commons Pool2的设计允许用户自定义对象工厂、剔除策略以及各种池行为,这使得它在多种场景下都能灵活适应。 - 通过实现`PooledObjectFactory<T>`,用户可以控制对象的创建、初始化、验证和销毁过程。 5...
在`commons-pool2-2.9.0.jar`中,这个机制被实现为一个灵活且可扩展的框架,适用于各种需要资源管理的场景。它包括核心的Pool接口和一些实现类,如GenericObjectPool和PooledObjectFactory,它们是构建和操作对象池...
PoolManager是一款针对Unity引擎设计的对象池管理组件,其v6.0.0版本更是在原有基础上进行了优化,且贴心地添加了中文注释,使得开发者能够更加便捷地理解和使用。 对象池的概念是预先创建并维护一定数量的对象,而...
- **定义**:Object-C(常写作 Objective-C 或 Obj-C)是一种基于 C 语言的面向对象编程语言,它继承了 C 语言的基本特性,并在此基础上进行了扩展。 - **特点**:作为一种面向对象的编程语言,Object-C 支持单一...