
JVM
大树叶
宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒。
展开
-
HotSpot JVM
英文原文:The Hotspot JVM is a Ponzi Scheme [guest post] 正好今天是愚人节,就来说点骗子的东西吧~ 时不时的我就会听见有人抱怨说,他的 HotSpot JVM 不停的在垃圾回收,可是每次回收完后堆却还是满的。当他们发现这是因为 JVM 的内存已经不够了之后,通常会问这么个问题,为什么 JVM 不抛一个 OutOfMemoryError (O转载 2016-04-26 11:39:04 · 685 阅读 · 0 评论 -
JAVA并发编程学习笔记之AQS源码分析(获取与释放)
目录(?)[+]同步状态AQS采用的是CLH队列,CLH队列是由一个一个结点构成的,前面提到结点中有一个状态位,这个状态位与线程状态密切相关,这个状态位(waitStatus)是一个32位的整型常量,它的取值如下:[java] view plain copy print?static final int CANCELL转载 2017-07-03 19:51:20 · 391 阅读 · 0 评论 -
JAVA synchronized和lock的实现原理
目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,转载 2017-06-13 00:58:25 · 1069 阅读 · 0 评论 -
Java Condition 的await(), singal(), singalAll() 具体代码实现分析,
前面本博的JavaJava 同步监视器中的 wait() 和 notify() 方法的具体实现 讨论了Java Syncronized关键字中,同步监视器的wait(),notify(),notifyAll()方法的具体实现细节,而本文将对Java Lock的Condition的await(), singal(), singalAll()具体代码实现做浅尝分析。为了更好的理解Loc原创 2017-07-03 17:28:34 · 2879 阅读 · 0 评论 -
Java并发编程实战 AQS(一):简介
AQS作为一个核心的处理框架,他提供了大量的同步操作,同时用户还可以在此类的基础上进行自定义,实现自己的同步器。其主要框架如下:从上图可以看出AQS是JUC同步器的基石。下面就AQS涉及的技术原理简单阐述下,以后会对其做详细的说明。1、状态位stateAQS用的是一个32位的整型来表示同步状态的,它是用volatile修饰的:private volatile转载 2017-07-03 15:17:58 · 550 阅读 · 0 评论 -
JDK各个版本的新特性jdk1.5-jdk8
JDK各个版本的新特性 对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言。今天先为大家介绍一下JDK1.5版本到JDK1.7版本的特性。希望能给予帮助。JDK1.5新特性: 1.自动装箱与拆箱:自动装箱的过程:每当需要一种类型的对象时,这种基本类转载 2017-07-05 09:52:03 · 3966 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解(推荐)
https://my.oschina.net/feichexia/blog/196575转载 2017-07-15 16:00:13 · 670 阅读 · 0 评论 -
推荐: ReentrantLock源码之一lock方法解析(锁的获取)
一、前言 ReentrantLock是JDK1.5引入的,它拥有与synchronized相同的并发性和内存语义,并提供了超出synchonized的其他高级功能(例如,中断锁等候、条件变量等),并且使用ReentrantLock比synchronized能获得更好的可伸缩性。 ReentrantLock的实现基于AQS(AbstractQueuedSynchronizer转载 2017-07-03 14:54:14 · 553 阅读 · 0 评论 -
推荐读:JVM底层是如何实现synchronized的
目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文只是介绍二者的实现原理。数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,大家可能会进一步追问:JVM底层又是如何实现synchroniz...原创 2017-06-13 10:45:41 · 623 阅读 · 0 评论 -
Java并发编程实战---- AQS(二):获取锁、释放锁
下面我们来关注下AQS的所获取和锁释放。AQS锁获取AQS包含如下几个方法:acquire(int arg):以独占模式获取对象,忽略中断。acquireInterruptibly(int arg): 以独占模式获取对象,如果被中断则中止。acquireShared(int arg): 以共享模式获取对象,忽略中断。acquireSharedInte转载 2017-07-03 19:47:45 · 363 阅读 · 0 评论 -
Java并发编程实战----- AQS(三):阻塞、唤醒:LockSupport
在上篇博客(【Java并发编程实战】----- AQS(二):获取锁、释放锁)中提到,当一个线程加入到CLH队列中时,如果不是头节点是需要判断该节点是否需要挂起;在释放锁后,需要唤醒该线程的继任节点lock方法,在调用acquireQueued():if (shouldParkAfterFailedAcquire(p, node) && pa转载 2017-07-03 19:42:02 · 346 阅读 · 0 评论 -
JVM JAVA的自带小工具
JDK内置工具使用一、javah命令(C Header and Stub File Generator)二、jps命令(Java Virtual Machine Process Status Tool)三、jstack命令(Java Stack Trace)四、jstat命令(Java Virtual Machine Statistics Monitoring Tool)五、j转载 2016-04-21 10:27:18 · 434 阅读 · 0 评论 -
打印所有的Oracle HotSpot JVM参数及其默认值(HotSpot JVM Options/Flags)
Java程序员有时候需要了解JVM相关的参数,不管是出于好奇或者工作需要。Oracle的文档中列出了一些,(点击这里),单并不是全部,而且有些参数的设置会默认启用或者关闭其他一些参数,而在某些情况下设置某个参数是不会生效的。还有些时候你想让JVM做某些事情,但是你不知道那个参数可以用。下面介绍一些办法用以列出所有参数,这样你在研究或者Google的时候也比较有明确的目标。 如果你想查看一转载 2016-04-21 10:54:32 · 489 阅读 · 0 评论 -
java中volatile关键字的含义
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。 synchronized 同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized转载 2016-04-21 23:29:06 · 344 阅读 · 0 评论 -
Java JVM 性能调优笔记
Java性能调优笔记调优步骤:衡量系统现状、设定调优目标、寻找性能瓶颈、性能调优、衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈)、性能调优结束。寻找性能瓶颈性能瓶颈的表象:资源消耗过多、外部处理系统的性能不足、资源消耗不多但程序的响应速度却仍达不到要求。资源消耗:CPU、文件IO、网络IO、内存。外部处理系统的性能不足:所调用的其他系统提供的功能或数据库操作的响转载 2016-04-22 00:11:59 · 724 阅读 · 0 评论 -
Java多线程系列目录
原文地址: http://www.cnblogs.com/skywang12345/p/java_threads_category.htmlJava多线程系列目录(共43篇) 最近,在研究Java多线程的内容目录,将其内容逐步整理并发布。(一) 基础篇01. Java多线程系列--“基础篇”01之 基本概念02. Java多线程系列--“基础篇”02转载 2016-05-08 12:23:58 · 1001 阅读 · 0 评论 -
为什么Java中synchronized同步的对象不能是Integer等类型
为什么Java中synchronized同步的对象不能是Integer等类型?原因是Java的自动封箱和解箱操作在作怪。这里的i++实际上是i = new Integer(i+1),所以执行完i++后,i已经不是原来的对象了,同步块自然就无效了原创 2016-06-04 20:09:26 · 2800 阅读 · 0 评论 -
ReentrantLock源码之二unlock方法解析(锁的释放)
在前面一节中,我们分析了ReentrantLock.lock()方法,接下来我们接着分析ReentrantLock.unlock()方法。1.ReentrantLock.unlock()分析(1)首先尝试释放锁,如果要求释放数等于锁状态数,那么将锁状态位清0,清除锁所有者,返回true;否则返回false;(2)如果(1)返回的是true,说明锁完全释放。接下来将检查等待队列,转载 2017-07-03 15:00:47 · 1216 阅读 · 0 评论 -
Object的wait、notify来实现线程同步原理
认识Object.wait()方法: 导致当前线程等待,直到该对象的notify或notifyAll被执行。换句话说,这个方法行为效果完全与简单调用wait(0)一样。当前线程必须拥有对象监视器。线程释放对象监视器的所有权,等待直到另一个线程通过调用notify或notifyAll来通知等待对象监视器的线程们并唤醒。然后,当前线程等待重新获取对象监视器并继续执行。因为在一个参数的版原创 2017-06-29 11:38:02 · 1371 阅读 · 0 评论 -
Java 同步监视器中的 wait() 和 notify() 方法的具体实现
在Oracle JVM 1.6 里面实现的object的wait 和notify方法是在synchronizer.cpp里实现。 先介绍2个对象:1. ObjectMonitor 对象 主要用来监视创立的Object 在synchronizer.cpp 里定义了,ObjectMonitor 的对象,我们来看ObjectMonitor的对象的结构体[原创 2017-07-03 16:25:15 · 1420 阅读 · 0 评论 -
注册邮箱验证激活技术
一.思路1.数据库加三个字段,state:(0:未激活,1:激活成功),ActiCode:(放激活码),token_exptime(过期时间,用来验证激活邮件是否过期)2.用户填写资料,点击注册,插入数据成功,state字段默认是0,同时生成一个ActiCode(用传过来的邮箱、密码、和当前时间加密形成)也存入数据库3.发送邮件。。。提示用户登录邮箱激活。。。邮件中带一个激活成功页的URL,URL...转载 2018-02-27 15:05:58 · 1222 阅读 · 0 评论