Java对象内存占用分析

原文地址:https://segmentfault.com/a/1190000006933272 本文深入分析并验证了不同Java对象占用内存空间大小的情况。对于不同的jvm实现,Java对象占用的内存空间大小可能不尽相同,本文主要分析HotSpot jvm中的情况,实验环境为64位wind...

2016-09-21 10:20:50

阅读数 7632

评论数 1

浅谈Java并发编程系列(七) ——— 深入解析synchronized关键字

Synchronized关键字synchronized的锁机制的主要优势是Java语言内置的锁机制,因此,JVM可以自由的优化而不影响已存在的代码。任何对象都拥有对象头这一数据结构来支持锁,但是对于较大的对象系统开销会更大一些。java中的每一个对象都至少包含2个字(2*4 Bytes for 3...

2016-07-30 11:54:29

阅读数 1338

评论数 0

mybatis自定义typeHandler映射对象为JSON

技术背景:  一个domain对象不可避免的会出现List、Map类型的字段,或者将多个字段拼装到一个字段的情况。 前者存在是业务及设计的需求,后者出现是当初设计数据库没有考虑那么多字段,业务快速发展时需要增加字段,数据库数据量大时,添加一个字段非常耗时,有可能中断服务。为保证服务的可用性...

2016-07-27 17:48:41

阅读数 8323

评论数 0

AbstractQueuedSynchronizer框架

常开发中,大多数程序员并不会直接接触AbstractQueuedSynchronizer(AQS)类,但其在并发工具中缺无处不在,并作为内部的标准同步器,如ReentrantLock,Semaphore,Java线程池中的Worker等。本文将介绍AQS相关的实现细节。 什么是Abstract...

2016-07-25 22:00:37

阅读数 316

评论数 0

不使用构造方法创建Java对象: objenesis的基本使用方法

objenesis简介:objenesis是一个小型java类库用来实例化一个特定class的对象。使用场合:Java已经支持使用Class.newInstance()动态实例化类的实例。但是类必须拥有一个合适的构造器。有很多场景下不能使用这种方式实例化类,比如: 构造器需要参数 构造器有side...

2016-07-24 17:50:02

阅读数 7018

评论数 1

三种深度拷贝方式的比较

对于深度拷贝,常见有主要有三种方式。通过序列化和反序列化,通过json转换,以及手动赋值,下面对这三种方式进行简单的比较。 用来拷贝测试的对象如下:class User implements Serializable{ private String name; private S...

2016-07-24 17:47:00

阅读数 7843

评论数 0

高性能MySQL-Schema与数据类型优化

良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询语句设计schema,但记住这往往需要权衡各种因素。例如,反范式的设计可以加快某些类型的查询,但同时也可能使一些查询变慢。比如添加计数表和汇总表是很好的优化查询的方式,但这些表的维护成本很高。 ================...

2016-07-24 15:32:42

阅读数 480

评论数 0

使用阻塞式队列处理大数据

转自:http://blog.csdn.net/lifetragedy/article/details/50593588 前言 我们都知道,JAVA对于文本文件在读时是独占的,即使可以用多线程去读也涉及到一个POS(定位读)的问题,这在设计框架上会带来许多的复杂性,同时也带来代码上的不...

2016-07-22 22:37:52

阅读数 3514

评论数 0

fastjson的基本使用方法

1 fastjson主要的APIfastjson入口类是com.alibaba.fastjson.JSON, 主要API是JSON.toJSONString和parseObject,使用fastjson要注意要转换的类必须有默认的无参构造方法。 序列化: String jsonString = ...

2016-07-22 14:42:56

阅读数 11185

评论数 0

Redis内存使用优化与存储

Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Redis内部使用一个redisO...

2016-07-22 11:02:19

阅读数 366

评论数 0

C#: Thread.Sleep(0) vs Sleep(1) vs Yeild

核心概念   优先级调度算法   处理器是一个操作系统执行任务的工具,线程是一个操作系统执行任务的基本单位,处理器的数量决定了不可能所有线程都能同时得到执行。这就需要通过某种算法来进行任务高度。而 Windows 是一个抢占式的多任务操作系统,我们来看下维基百科对于抢占式的定义: In co...

2016-07-21 09:11:23

阅读数 1118

评论数 0

Java并发编程:Callable、Future和FutureTask原理解析

返回结果的任务Callable与FutureExecutor框架使用Runnable作为其基本的任务表示形式。Runnable是一种有很大局限的抽象,它不能返回一个值或抛出一个受检查的异常。Runnable接口:public interface Runnable { public abst...

2016-07-13 20:00:41

阅读数 14009

评论数 3

Java并发编程:Executor框架

Executor接口在Java类库中,任务执行的主要抽象不是Thread,而是Executor,接口声明:public interface Executor { void execute(Runnable command); }虽然Executor是个简单的接口,但它却为灵活且强大的异步任...

2016-07-13 13:43:38

阅读数 521

评论数 0

Thread线程中start()和run()方法的区别

start()和run()区别 start():用来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体, 它包含了要执行的这个线程的内容, run方法运行结束, 此线程终止, 而CPU再运行其它线程...

2016-07-12 10:01:47

阅读数 2136

评论数 0

浅谈Java并发编程系列(六) —— 线程池的使用

线程池的作用 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的资源浪费。 提高响应速度。当任务到达时,不需要等到线程创建就能立即执行。 方便管理线程。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以对线程进行统一的分配,优化及监控。 设置线程...

2016-07-11 21:13:43

阅读数 1491

评论数 0

浅谈Java并发编程系列(五)—— ReentrantLock VS synchronized

ReentrantLock是Java并发包中一个非常有用的组件,一些并发集合类也是用ReentrantLock实现,包括ConcurrentHashMap。ReentrantLock具有三个特性:等待可中断、可实现公平锁、以及锁可以绑定多个条件。Java中的ReentrantLockReentra...

2016-07-06 21:43:24

阅读数 577

评论数 0

浅谈Java并发编程系列(四)—— 原子性、可见性与有序性

Java内存模型是围绕着在并发过程中如何处理原子性、可见性和有序性这3个特征来建立的,我们来看下哪些操作实现了这3个特性。原子性(atomicity): 由Java内存模型来直接保证原子性变量操作包括read, load, assign, use, store和write。大致可以认为基本数据类型...

2016-07-05 20:34:57

阅读数 655

评论数 0

浅谈Java并发编程系列(三)—— volatile型变量

当一个变量定义为volatile之后,它具备两种特性: 保证此变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。 禁止指令重排序优化。 让我们从Java内存模型的角度分析下volatile变量。假定T表示一个线程,V和W分别表示两个vo...

2016-07-05 09:48:32

阅读数 593

评论数 0

浅谈Java并发编程系列(二)—— Java内存模型

物理计算机并发问题在介绍Java内存模型之前,先简单了解下物理计算机中的并发问题。由于处理器的与存储设置的运算速度有几个数量级的差距,所以现代计算机加入一层读写速度尽可能接近处理器的高速缓存来作为内存与处理器之间的缓冲:将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步...

2016-07-02 13:25:23

阅读数 547

评论数 0

浅谈Java并发编程系列(一)—— 如何保证线程安全

线程安全类保证类线程安全的措施: 不共享线程间的变量; 设置属性变量为不可变变量; 每个共享的可变变量都使用一个确定的锁保护; 保证线程安全的思路: 通过架构设计 通过上层的架构设计和业务分析来避免并发场景。比如需要用多线程或分布式集群统计一堆用户的相关统计值,由于用户的统计值是共享数据,因此需...

2016-07-01 23:17:09

阅读数 3645

评论数 0

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