JVM
huaishu
这个作者很懒,什么都没留下…
展开
-
CAS以及在Java并发机制中的使用
Java 并发编程中有介绍CAS实现锁的机制,后面再看了一些编译原理方法的书,对锁的实现有一些基本了解。减少上下午切换的方法:无锁并发编程:按Hash算法取模分段,不同的线程处理不同段数据。 CAS算法:CAS算法更新数据,无需加锁。 使用最少线程:尽量用少的线程,不要造成等待。 协程:在单线程里实现多任务的调度。Java并发机制的底层实现Volatile:将当前处理器缓存行数据回写到系统内存,并让其他缓存失效。 synchronized:同步代码块,锁定对象头。monitorente原创 2020-06-26 14:00:53 · 239 阅读 · 1 评论 -
JVM垃圾收集器ZGC
Java11已经推出最新垃圾收集器,ZGC主要为了减少JVM停顿时间。阿里双十一已经在项目中使用ZGC,并且取得不错战绩。支持大内存使用,所以只支持64位系统。ZGC全称是Z Garbage Collector,是一款可伸缩(scalable)的低延迟(low latency garbage)、并发(concurrent)垃圾回收器,旨在实现以下几个目标:停顿时间不超过10ms 停顿时间...原创 2019-12-19 16:47:52 · 436 阅读 · 0 评论 -
JVM优化策略——编译及垃圾回收器
工欲善其事必先利其器,要了解JVM运行情况,必须用工具获取数据才能发现和诊断问题。 让JVM这个黑盒变成我们可以认识的白盒。名称 作用 基本命令 jps 显示指定系统内所有的HotSpot虚拟机进程 jps -l jstat 用于收集Hotspot虚拟机各方面的运行数据 jstat[option vmid[interval[s|ms][cou...原创 2019-12-05 21:10:40 · 697 阅读 · 0 评论 -
JVM加载机制与执行流程
Java文件编译成Class以后,需要放到内存中才能运行,这个过程相当于数据处理的过程ETL(抽取、转换、加载)。类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶...原创 2019-12-03 23:18:59 · 193 阅读 · 0 评论 -
Java Class 文件结构
Java语言只是我们了解编程的基础语法,最终编译成的Class文件才是JVM解读的二进制文件,了解Class文件结构,有助于理解编程原理。通过javap我们将了解Class内部结构。Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据, 没有空隙存在。...原创 2019-11-29 14:59:40 · 205 阅读 · 0 评论 -
Java锁及实现方式
锁的概念在数据库出现比较多,为了实现数据库的不同隔离级别,数据库会定义不同的锁类型。Java为了实现同步及线程安全,也会定义不同的锁。所谓的同步操作即原子操作(atomic operation)意为“不可被中断的一个或一系列操作”,类似数据库中的事务。线程安全实现方式互斥同步(锁机制)互斥是实现同步的一种手段,临界区(Critical Section)、互斥量(Mutex)和信号量(S...原创 2019-11-26 14:03:50 · 5064 阅读 · 0 评论 -
Java内存模型的基础以及内存语义
Java中多个线程访问同一变量,对应到硬件上就是内存和CPU缓存,JVM是如何处理数据竞争的,必须了解Java的内存模型以及编译相关的JVM指令,同时还必须了解线程的实现方式。Java语言通过编译器编译成JVM认识的class文件,JVM再把Class中的指令集转换成操作系统可识别二进制编码,操作系统再驱动硬件包括CPU、内存、磁盘等硬件设备。在这个过程中,数据是多分的,如何保证数据一致性很重...原创 2019-11-22 15:51:20 · 184 阅读 · 0 评论 -
Java并发机制----同步synchronized以及原子操作
Java并发编程过程中必须接触synchronized和volatile,以及后来的读写锁ReadWriteLock、重入锁ReentrantLock等,JVM在编译synchronized时会生成2个指令集monitorenter和monitorexit,volatile则实现1)将当前处理器缓存行的数据写回到系统内存。2)这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效。...原创 2019-11-19 15:51:24 · 378 阅读 · 0 评论 -
JVM指令集整理
最近看《Java并发编程的艺术》,涉及到一些硬件、JVM等知识,结合Java虚拟机知识,整理JVM指令集。JVM基本指令iconst_1 int型常量值1进栈 bipush 将一个byte型常量值推送至栈顶 iload_1 第二个int型局部变量进栈,从0开始计数 istore_1 将栈顶int型数值存入第二个局部变量,从0开始计数 iadd ...原创 2019-08-15 18:11:36 · 712 阅读 · 0 评论 -
JVM执行篇:使用HSDIS插件分析JVM代码执行细节
在《Java虚拟机规范》之中,详细描述了虚拟机指令集中每条指令的执行过程、执行前后对操作数栈、对局部变量表的影响等细节。这些细节描述与Sun的早期虚拟机(Sun Classic VM)高度吻合,但随着技术的发展,高性能虚拟机真正的细节实现方式已经渐渐与虚拟机规范所描述产生越来越大的差距,虚拟机规范中的描述逐渐成了虚拟机实现的“概念模型”——即实现只能保证规范描述等效。基于上面的原因,我们分析程...转载 2013-06-13 10:48:46 · 735 阅读 · 0 评论 -
JVM垃圾收集器使用调查:CMS最受欢迎
近日,Plumbr公司对特定垃圾收集器(GC)使用情况进行了一次调查研究。本次研究的数据来自代表2670个不同使用环境的84936个案例。其中,13%的环境已经明确指定了一个垃圾收集器,其余的根据JVM而定。在指定了明确垃圾收集器的11062个案例中,根据每个垃圾收集器使用的统计次数,研究人员做出了下面的垃圾收集器饼图:GC使用统计名词解释Serial:串行收集...转载 2013-11-29 09:56:15 · 1397 阅读 · 0 评论 -
内存屏障与JVM并发
内存屏障,又称内存栅栏,是一组处理器指令,用于实现对内存操作的顺序限制。本文介绍了内存屏障对多线程程序的影响。我们将研究内存屏障与JVM并发机制 的关系,如易变量(volatile)、同步(synchronized)和原子条件式(atomic conditional)。本文假定读者已经充分掌握了相关概念和Java内存模型,不讨论并发互斥、并行机制和原子性。内存屏障用来实现并发编程中称为 可见性(v...转载 2013-06-13 10:45:59 · 732 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
现实企业级Java开发中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足内存泄露线程死锁锁争用(Lock Contention)Java进程消耗CPU过高...... 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是J转载 2017-04-25 11:28:50 · 386 阅读 · 0 评论 -
Java 内存区域
Java 与 C++ 之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。概述对于从事 C、C++ 程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”又是从事最基础工作的“劳动人民”——既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任。对于 Java 程序员来说,在虚拟机自动内存管理机制的...原创 2013-07-27 00:45:46 · 604 阅读 · 0 评论 -
Java虚拟机运行时数据区
最近一直在研究JVM,整理虚拟机运行时数据区帮助理解一些Out情况。程序计数器程序计数器(Program Counter Register)是一块较小的内存空间, 它可以看作是当前线程所执行的字节码的行号指示器。 在虚拟机的概念模型里(仅是概念模型, 各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令, 分支、...原创 2015-11-28 16:49:53 · 376 阅读 · 0 评论 -
Java垃圾回收调优
JVM 回收算法 分代原创 2013-08-09 12:12:31 · 825 阅读 · 0 评论 -
JVM 方法调用的实现(重载/覆盖)
JVM 方法调用 运行 覆盖 重载原创 2015-11-22 21:32:11 · 1668 阅读 · 0 评论 -
Java虚拟机类加载机制
类加载机制原创 2015-11-22 23:55:02 · 378 阅读 · 0 评论 -
JVM分代垃圾回收策略的基础概念
JVM分代垃圾回收策略的基础概念由于不同对象的生命周期不一样,因此在JVM的垃圾回收策略中有分代这一策略。本文介绍了分代策略的目标,如何分代,以及垃圾回收的触发因素。文章总结了JVM垃圾回收策略为什么要分代,如何分代,以及垃圾回收的触发因素。为什么要分代分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回...转载 2013-07-27 00:22:04 · 572 阅读 · 0 评论 -
JVM优化(1)---内存设置
堆内存设置原理JVM堆内存分为2块:PermanentSpace 和 Heap Space。Permanent 即持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。 Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation),New ...原创 2013-07-29 19:14:18 · 737 阅读 · 0 评论 -
JVM优化(3)---JVM服务参数调优实战
大型网站服务器案例承受海量访问的动态Web应用服务器配置:8 CPU, 8G MEM, JDK 1.6.X参数方案:-server -Xmx3550m -Xms3550m -Xmn1256m-Xss128k -XX:SurvivorRatio=6 -XX:MaxPermSize=256m -XX:ParallelGCThreads=8-XX:MaxTenuringThresho...原创 2013-07-29 19:16:56 · 833 阅读 · 0 评论 -
java 内存监控工具 jstat jmap
Java语言不允许开发者管理内存,内存是靠jvm 统一管理,的内存对开发者来说是透明的。但有时需要了解内存内部活动,就需要通过一些工具实现。介绍两个SUN 的JDK中的工具 jmap jstat 一.jmap 1. jmap -heap pid 查看java 堆(heap)使用情况 using t转载 2013-08-05 09:54:41 · 749 阅读 · 0 评论 -
GC的类型以及对应日志的解释
在大型的java运用中,要进行程序调优,指定一个合适的垃圾回收机制是必不可少的,那如何可确定某gc是否使得程序最优化呢?我们可以查看jvm打印出 的gc日志来分析,并做出进一步优化,而目前并没有一篇文章明确的指明java中各种gc算法打印出日志的格式,以及如何阅读。所以接下来本文将试着边介 绍各种垃圾回收机制边解释该回收机制下log的格式。1,垃圾收集算法 1.1 引用计数法(Refere转载 2013-08-08 23:21:46 · 1172 阅读 · 0 评论 -
JVM内存管理:深入垃圾收集器与内存分配策略
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项技术当做Java语言的伴生产物。事实上GC的历史远远比Java来得久远,在1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期,人们就在思考...转载 2013-07-29 19:38:13 · 701 阅读 · 0 评论 -
JVM监测和调试步骤
JVM调优步骤:第一步:监测JVM(Java Virtual Machine)/GC(Garbage Collector)第二步:调优一、监测JVM/GC==========================以下段落摘自网络(google或百度均可查到)========================jps:与unix上的ps类似,用来显示本地的java进程,可以转载 2013-08-08 23:49:21 · 879 阅读 · 0 评论 -
JAVA Class文件格式
每一个Class都对应着唯一的一个类或借口的定义信息。这里,我们称为"Class文件格式"只是通俗的将任意一个符合有效的类或借口的格式这么称呼,但是它并不一定是以磁盘文件的形式存在。 每个Class文件都是由8字节为单位的字节流组成,所有的16位、32位和64位长度的数据将被构造成 2个、4个和8个8字节单位来表示。ClassFile结构 每一个Class文件对应于一个转载 2013-08-21 22:38:57 · 3286 阅读 · 0 评论 -
class文件格式分析---class文件结构
Java语言是跨平台的,其跨平台的基石是字节码,字节码按照java虚拟机规范的格式组成了class文件,并在虚拟机上运行。因此class文件的结构也是java跨平台很重要的一个基础。下面简单看看class文件的结构:以上是class文件的基本结构,整个class文件分Magic,Version,Constant_pool,Access_flag,This_class,S转载 2013-08-21 22:27:03 · 1218 阅读 · 0 评论 -
Java内存查看与分析
业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分,仔细研究下jdk的工具,还是蛮有意思的呢:)1:gc日志输出在jvm启动参数中加入 -XX:+PrintGC -XX:+PrintGCDetails -XX:+Prin...原创 2014-04-10 16:36:19 · 613 阅读 · 0 评论 -
JVM报错
INFO | jvm 1 | 2014/09/18 17:55:59 | 严重: Error reading request, ignoredINFO | jvm 1 | 2014/09/18 17:55:59 | java.lang.OutOfMemoryError: PermGen spaceSTATUS | wrapper | 2014/09/18 17:55:原创 2014-09-19 22:07:16 · 1209 阅读 · 0 评论 -
从finally看class编译字节码
finally源码public class Test { public static void main(String[] args) { System.out.println(new Test().test()); } int test() { try { return func1(); } finally { return func2(); }原创 2015-10-17 19:33:00 · 555 阅读 · 0 评论 -
Class 类加载器,内部类加载实验
最近实验通过jdk编译后的Class多出一个内部类class文件,美元$符号的class文件,如A.class ,A$B.class,加载A.class总是报错。除了加载内部类方法,还有就是把class文件打包成jar,通过自定义URLClassLoader 加载jar文件,做类似与Osgi的工作。通过类加载器,做一个动态加载模块的应用服务器。通过网上找到代码例子改改后解决现在的...原创 2015-11-21 15:03:19 · 3159 阅读 · 0 评论 -
JAVA 虚拟机字节码执行
类加载 JVM 栈帧原创 2015-11-22 21:16:53 · 583 阅读 · 0 评论 -
JVM优化(2)---垃圾回收器
垃圾回收器选择JVM给出了3种选择:串行收集器、并行收集器、并发收集器。串行收集器只适用于小数据量的情况,所以生产环境的选择主要是并行收集器和并发收集器。默认情况下JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行智能判断。串行收集器-XX:+UseSerialGC:设置串行收集器。并行收集器(吞吐量优...原创 2013-07-29 19:15:30 · 810 阅读 · 0 评论