- 博客(9)
- 收藏
- 关注
原创 synchronize锁的膨胀及批量重偏向和撤销
一个java对象包含:对象头,数据,对齐填充; 对象头包含:markword(如上图),类类型指针(klass word,如上图),legth(若是数组对象有这个值) 现在讲解下上图: 上图是jvm64位的对象头在各种锁状态下的信息;正常情况markword占64bit ;klass word 占64bit(一般默认开启指针压缩的:会压缩到32bit) 要分析对象头我们可以借助jo...
2019-10-22 17:48:21 1770
原创 并发之证明偏向锁存在
jdk锁的话synchronize在1.5之前都是重量级索,1.6之后有了偏向锁,轻量锁,重向锁; 重向锁就是每次获取锁都要直接调用操作系统的函数(这里指linux系统)pthread_mutex_lock(); 偏向锁是第一次也会调用操作系统函数,之后就不会在调用了; 证明之前先说java线程和os线程的关系;目前来说java和os线程是一一对应的; 当在java中开一个线程的时候,调用star...
2019-10-15 23:44:01 220
原创 java序列化demo
public class Testtest { public static void main(String[] args) throws IOException,ClassNotFoundException { // Person对象文件路径 String path = "d:/person.dat"; // 创建一个Person对象 ...
2019-10-09 15:57:37 158
原创 netty启动源码5
之前的服务端的channel初始化好了,接下来就会监听连接事件看以下reactor线程的死循环做的事情跟踪代码到 nioeventloop类的run方法 //事件循环 @Override protected void run() { for (;;) { try { try { ...
2019-10-06 11:57:45 135
原创 netty启动源码4
接着之前讲到 final ChannelFuture regFuture = initAndRegister(); 接下来讲doBind0(regFuture, channel, localAddress, promise); private ChannelFuture doBind(final SocketAddress localAddress) { //初始化和注册 ...
2019-10-05 13:48:49 122
原创 netty启动源码3
接着执行如下代码: ChannelFuture future = serverBootstrap.bind(8088).sync(); 这里是真正的启动源码的地方:这行代码做的事情太多太多太多…了 跟踪源码到AbstractBootstrap类的如下方法: private ChannelFuture doBind(final SocketAddress localAddress) { ...
2019-10-04 16:22:59 101
原创 netty启动流程源码2
执行如下代码: serverBootstrap.group(bossGroup,workerGroup) 跟踪代码: public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) { //bossGroup,workerGroup super.group(parentGroup); Objec...
2019-10-04 12:00:20 82
原创 netty启动流程源码1
public static void main(String[] args) throws InterruptedException { //就是一个死循环,不停地检测IO事件,处理IO事件,执行任务 //创建一个线程组:接受客户端连接 主线程 EventLoopGroup bossGroup=new NioEventLoopGroup(1);//cpu核心数*2 ...
2019-10-04 11:32:34 124
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人