深入理解jvm(深入理解Java虚拟机:JVM高级特性与最佳实践的介绍)
本文目录
深入理解Java虚拟机:JVM高级特性与最佳实践的介绍
《深入理解Java虚拟机JVM高级特性与最佳实践》是2011年机械工业出版社出版的图书,作者是周志明。
什么是HotSpot VM amp;深入理解Java虚拟机 JVM
HotSpot VM既继承了Sun之前两款商用虚拟机的优点(如前面提到的准确式内存管理),也有许多自己新的技术优势,如它名称中的HotSpot指的就是它的热点代码探测技术(其实两个VM基本上是同时期的独立产品,HotSpot还稍早一些,HotSpot一开始就是准确式GC,而Exact VM之中也有与HotSpot几乎一样的热点探测。
学习java有必要看 深入jvm 吗
有必要。刚好之前面试被问到类似的问题,所以简单的说一下(有空的话详细补充一下)。首先我们广泛使用的JVM一般是HotSpot虚拟机,HotSpot有两个JVM的实现。一个是`Java HotSpot Cilent VM`,另一个是`Java HotSpot Server VM`。前者致力于在客户端环境中减少启动时间而优化,后者在服务器环境中最大化程序执行速度而设计。学习JVM主要是,理解编译过程,理解内存分配与垃圾回收,以及线程资源分配等问题。可以从下面几方面入手:编译过程(Compile)内存分配(Memory)执行时间(Runtime)垃圾回收(Garbage Collection)线程资源方面(Thread)与虚拟机相关的异常处理(Exception)根据业务特点调整JVM:修改JVM参数,修改堆的初始大小和最大堆大小,修改年轻带与持久代的大小,修改每个线程的堆栈大小等等。当然,在处理网站性能问题上,很多人在业务层上想办法,有人坚持做出了更好的JVM,例如这个Zing当然,你说不在乎这些东西,了解这些东西浪费时间。那帮老板画画界面,用个开源库写写业务逻辑,改改bug,帮老板赚钱,也是极好的。
深入理解jvm原理之逃逸分析
最近一直在学习Java虚拟机原理,觉得有意思的地方就写个文章记录下来。优胜劣汰是自然界的发展,适用到Java虚拟机也不为过,jvm过了生存下去,一直在自我进化,Java虚拟机也在不停的进化和优化,有的是基于执行代码的优化,例如指令重排序等等;有的是基于分析技术,例如关系分析或者逃逸分析等等,今天就重点介绍一下jvm中的分析技术优化---逃逸分析;内容大部分源自于《深入理解Java虚拟机》; 逃逸分析一般分为两种:一种基本行为就是分析对象的动态作用域,当一个对象在方法中定义后,它可能被外部的方法所引用,例如作为调用参数传入了其他对象中,称为方法逃逸;甚至被外部线程所引用,例如赋值给变量或可以在其他线程中访问的变量,这种优化行为称为线程逃逸; 概念归概念,最终效果怎么样,肯定还需要是骡子是马拉出来遛遛,总牛的理论需要落地检验,说程序员的话,也就是一个对象不会逃逸到方法或者线程之外后,这个变量会进行一些高效的优化;实现方式一般有下面几种; 栈上分配:无论是C#还是Java的程序员,大家都知道,对象会创建在Java堆上,而Java堆中的对象对线程(Java线程)是共享和可见的,而虚拟机的垃圾回收就是回收对象不再适用的对象,无论哪种垃圾回收器,都需要需要筛选和整理可回收的对象,回收和整理要耗费很长时间,如果确定一个方法不会逃逸出方法之外,那就让这个对象直接分配在栈上,而对象所占用的空间也会随着帧栈的出栈而销毁,垃圾回收系统的压力会就变的小了; 消除同步:线程同步本身就是一个相对耗时的过程(至于为什么耗时,可以查询用户线程和内核线程相关知识),如果确认一个对象不会被其他线程访问;那么变量的读写就不会和其他线程竞争,对于这种变量实施的同步可以消除; 标量替换:标量又称scalar是指一个数据已经无法再分解成更小的数据来表示了,Java虚拟机中的原始数据例如int,long,等值类型以及reference类型,都不能再进一步分解,他们就可以称为标量,相对的,它们如果可以继续分解,那就是称为聚合量又称Aggregate,Java对象就是典型的聚合量,如果把一个对象拆散,根据程序访问情况,将其使用到的成员变量类型变成基本类型代替,如果jvm逃逸分析中发现这个对象不会外部对象使用,那程序执行的就不会创建该对象,为改为创建它的若干个被这个方法使用的成员变量来代替(栈上创建的数据,又很大的概率会被jvm分配至物理机的高速寄存器中存储),这个也为后续进一步的优化创造了条件; 逃逸分析很多优势还在陆陆续续发现,Java8已经默认开启了逃逸分析, -XX:+DoEscapeAnalysis 开启或者关闭这个选项;都是干活,后续上带么和截图来验证一下;
更多文章:
web项目有哪些(JavaWeb项目,其中,哪些技术是最基础、最重要的)
2024年7月19日 15:34
js获取textarea的内容(js如何获取textarea中的选中的文字)
2024年7月19日 09:16
为什么说指针是C语言的精髓?都说C语言的指针很难,用不好很容易出错,那为何还要用指针呢你能举例说说吗
2023年8月26日 10:40
el表达式是什么意思(el表达式中,获取应用初始化参数的关键字是什么)
2024年8月16日 19:25
在excel里用vba获取整个表的数据(如何使用VBA代码提取excel工作表数据)
2024年7月22日 06:13
当绝缘材料发生击穿放电(非标自动化电气装置绝缘失效的原因有哪些)
2024年6月20日 22:28
帝国cms标签伪静态(帝国CMS7.0伪静态后百度抓取诊断出现错误代码500,请问是怎么回事)
2024年3月23日 05:00
schematics(英语create charts and graphs怎么翻译)
2024年9月3日 15:20
diversity statement 教职(美国留学 美国的基础教育从幼儿园(Kindergarten)到12年级)
2024年7月23日 03:27