java高性能编程
t_liuyong
这个作者很懒,什么都没留下…
展开
-
JVM指令表
常量入栈指令指令码操作码(助记符)操作数描述(栈指操作数栈)0x01aconst_null null值入栈。0x02iconst_m1 -1(int)值入栈。0x03iconst_0 0(int)值入栈。0x04iconst_1 1(int)值入栈。0x05iconst_2 2(int)值入栈。0x06iconst_3 3(int)值...转载 2018-12-31 15:54:11 · 433 阅读 · 0 评论 -
HashMap分析之红黑树树化过程
原文地址 HashMap分析之红黑树树化过程 概述HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文主要分析一下HashMap中红黑树树化的过程。红黑树(red black tree)一个节点标记为红...转载 2019-03-21 20:38:20 · 1124 阅读 · 1 评论 -
Java的内存模型
Java内存结构见java运行原理不要把概念弄混淆了。内存模型实际上是描述程序的可能行为。从java代码到class编译的过程当中,编译器会进行优化,指令重排,编译器将不会对存在数据依赖性的程序指令进行重排,这里的依赖性仅仅指单线程情况下的数据依赖性;多线程并发情况下,此规则将失效。Java编程语言内存模型是java 虚拟机的规范,至于具体怎么实现可以任意,包括操作的重新排序和删除不必要...原创 2019-03-20 18:50:29 · 117 阅读 · 0 评论 -
CPU缓存和内存屏障
CPU性能优化手段——缓存为了提高程序运行的性能,现代CPU在很多方面对程序进行了优化。例如:CPU高速缓存。尽可能地避免多处理器访问主内存的时间开销,处理器大多会利用缓存(cache)以提高性能。多级缓存L1 Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。一般服务器的CPU的L1缓存的容量通常在32——4096KB。L2 由于L1级高速缓存容量的限制...原创 2019-01-26 21:03:32 · 2523 阅读 · 1 评论 -
Java 线程池原理
为什么要用线程池线程是不是越多越好?1、线程在java中是一个对象,更是操作系统的资源,线程创建/销毁需要时间。如果创建时间+销毁时间 > 任务执行时间,就得不偿失了。2、java对象占用堆内存,操作系统线程占用系统内存,根据JVM规范,一个线程默认最大栈大小1M,这个栈空间是需要从系统中分配的。线程过多,会消耗很多的内存。3、操作系统需要频繁切换线程上下文,各线程争夺cpu处理,c...原创 2019-01-26 21:02:49 · 537 阅读 · 1 评论 -
java线程封闭
线程封闭概念多线程访问共享可变数据时,涉及到线程间数据同步的问题,并不是所有时候,都要用到共享数据,所以线程封闭的概念就提出来了。数据都封闭在各自的线程之中,就不需要同步,这种通过将数据封闭在线程中而避免使用同步的技术称为线程封闭。线程封闭具体的体现有:ThreadLocal、局部变量。ThreadLocalThreadLocal 是Java里一种特殊的变量。它是一个线程级别变量,每个...原创 2019-01-26 21:03:05 · 341 阅读 · 5 评论 -
Java 线程中止
不正确的线程终止-StopStop:终止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不建议使用。Destroy:JDK未实现该方法。一个线程实现i++, 然后休眠10秒,模拟其它耗时处理, 然后j++;当这期间线程被中断,期望实现了i++,同时实现了j++;package com.ly.study;/** * 线程处理i++ j++ */publ...原创 2019-01-26 21:03:18 · 255 阅读 · 0 评论 -
Java 线程通信
通信的方式想要实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等等。涉及到线程之间相互通信,分为下面四类:1、文件共享2、网络共享3、共享变量4、JDK提供的线程协调API(细分为:suspend/resume、wait/notify、park/unpark)suspend/resume已经废弃,容易造成死锁,在同步代码块(不会释放锁),或调用顺序。...原创 2019-01-26 21:03:44 · 184 阅读 · 1 评论 -
JAVA线程状态
java线程共6个状态定义:java.lang.Tread.State1、New:尚未启动的线程的线程状态2、Runnable:可运行线程的线程状态3、Blocked:线程阻塞等待监视器锁定的线程状态。处于synchronized同步代码块或方法中被阻塞。4、Waiting:等待线程的线程状态。下列不带超时的方式:Object.wait、Thread.join、LockSuppor...原创 2019-01-26 21:03:55 · 243 阅读 · 1 评论 -
JAVA程序运行原理
当我们真正运行程序的时候,CPU是读不懂这些英文的,所以我们需要先转化成可执行的二进制文件,这个过程通常由编译器完成。有些编译器直接将源代码编译成机器码,载入内存后CPU可以直接运行。而机器码的格式是跟具体的CPU架构相关的,Intel的CPU机器码对于ARM CPU来说是无法理解的。因此,同样的源代码需要根据不同的硬件进行特定的编译。好了,高级语言到低级语言的桥梁就是编译器。我们写...原创 2019-01-26 21:02:23 · 479 阅读 · 1 评论 -
用ConcurrentHashMap 实现JVM缓存
为什么用缓存提升应用程序性能降低数据库成本减少后端负载可预测的性能消除数据库热点提高读取吞吐量(IOPS)读多写少用缓存常用的分布式缓存有Redis、Memcached等。但是在单机的情况下,咱们完全可以使用内部缓存达到更好的效果。当需要扩展为分布式集群环境时,更改实现类就可以了。JSR107规范http://jcp.org/en/jsr/detail?id=107...原创 2019-03-25 23:48:04 · 808 阅读 · 0 评论