- 浏览: 446178 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (369)
- javascript html (20)
- java (31)
- jquery (15)
- jcrop (0)
- JEECG (1)
- ajax (3)
- 反射 (3)
- VI (1)
- mysql (48)
- easyui (1)
- svn (2)
- MD5 加密 (1)
- spring (14)
- ORACLE (8)
- 经验总结 (1)
- TCP/IP协议 (1)
- ICMP协议 (1)
- eclipse (1)
- Reflect (1)
- linux (21)
- android (5)
- excel 操作 (1)
- java tree (1)
- html (1)
- plupload (1)
- mongodb (9)
- aes (1)
- python (1)
- java relax (1)
- highcharts (2)
- json (2)
- java 多线程 (30)
- maven (2)
- 设计模式 (1)
- jsp+js (2)
- 面向对象 (1)
- jvm (16)
- 缓存 (1)
- proxy (1)
- 聊侃 (1)
- 面经 (1)
- java 字节 (1)
- java 类加载器 (2)
- java 基础 (2)
- java 语法糖 (1)
- java 位运算 (1)
- 排序 (3)
- java 服务器性能优化 (19)
- 网络编程 (2)
- jvm 参数设置 (0)
- jersey (1)
- webservice (2)
- nginx+多tomcat 集成 (5)
- nginx (16)
- squid (3)
- memcached (5)
- 正则表达式 (1)
- 常用免费接口 (1)
- jpa (1)
- win7 (1)
- java处理大文件 (1)
- js正则表达式 (1)
- tomcat (1)
- java 敏感字 (1)
- 系统架构优化 (4)
- 学习 (1)
- 本地测试QQ微博第三方登陆 (1)
- java 错误 (1)
- 微信支付 (1)
- https (1)
- httpclient (1)
- awk (2)
- loadrunner (1)
- sql server 2008 (3)
- git (4)
- sql server2008 (1)
- solr (2)
- centos (1)
- 数据存储架构 (3)
- log4j (1)
- weboffice (1)
- 并发编程 (1)
- postgreSQL (0)
- ssl (1)
- openssl (1)
- activeMQ (2)
- IDEA (1)
- shell (1)
- ansible (4)
- docker (2)
- grafana (1)
- jmeter (1)
- TLS (1)
- 将博客搬至CSDN (1)
最新评论
-
dida1990:
啊喔,过去了这么久,不过还是评一个。谁说uuid的hashCo ...
高并发生成订单号(二) -
annan211:
yclovesun 写道使用了uuid,为什么还要machin ...
高并发生成订单号(二) -
yclovesun:
使用了uuid,为什么还要machineId?uuid已经可以 ...
高并发生成订单号(二) -
u013280917:
太深奥,看不懂
mysql优化特定类型的查询
程序员对虚拟机的优化大多集中在堆栈的分配以及和内存大小的调节的层面上,在这个层面上的调节也是jvm影响最大的部分。但是我们仍然可以从比较细的层面上对jvm进一步优化。
稍微进一步,是对 方法区,Java虚拟机栈,本地方法栈,堆,甚至程序计数器方面进行点滴的优化。
再小一点,我们先来理解一个概念。
在虚拟机执行子系统中存在一个类加载过程,这个过程包含加载、验证、准备、解析、和初始化,当然,在类加载之后还应当包含执行和卸载这两个阶段。
加载即是虚拟机通过一个类的全限定名来获取定义此类的二进制字节流。(全限定名:com/sun/Summer),然后将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。(运行时数据结构前面已经介绍,即堆、方法区、本地方法区、Java虚拟机栈、程序计数器) 然后虚拟机在堆上生成一个java.lang.Class对象,作为访问方法区的一个外部入口。
接下来是验证,验证是连接阶段的第一步,是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。验证阶段非常重要,并且验证阶段的工作量在虚拟机的类加载子系统中占了很大一部分,所以我们有必要在码代码的时候,注意Jvm的这一特性,就可以获得可观的虚拟机回报。
验证阶段包含 文件格式验证、元数据验证、字节码验证和符号验证四个阶段。
1 文件格式验证比较简单,主要是验证版本、常量类型、字符编码以及引用地址。当然其实际验证要远远不止这些而且要复杂的多。
2 元数据验证 主要检查类 是否有父类,是否实现了必要的方法,是否被非法继承,等等。
3 字节码验证 ,字节码验证是最复杂的一个阶段,主要是进行数据流和控制流的分析。
主要对类的方法体进行安全验证。包括 非法类型转换,跳转指令跳转到方法体之外,无限循环等等,由于数据流验证的高复杂性会在一定程度上拖慢虚拟机,所以我们在码代码的时候,尽量避免使用一些类型推导类的手段去实现,尽量使用类型检查来减少虚拟机检查时间。
jdk 1.6 之后的javac 提供了 StackMapTable 属性,这一属性可以将字节码验证的类型推导转化为类型检查从而节省一些时间。
我们也可以通过在 JDK 1.6 -XX:-UseSplitVerifier 来关停javac 编译器中的 StackMapTable 优化属性,或者通过-XX:+FailOverToOldVerifier 要求在类型校验失败的时候回退懂啊旧的类型推导方式进行校验。
如果所运行的代码(包括自己写的和第三方的代码) 都已经被反复使用和验证过,在实施阶段就可以考虑使用 -Xverify:none 参数来关闭大部分的类验证措施,以缩短虚拟机在类加载阶段的耗时。
稍微进一步,是对 方法区,Java虚拟机栈,本地方法栈,堆,甚至程序计数器方面进行点滴的优化。
再小一点,我们先来理解一个概念。
在虚拟机执行子系统中存在一个类加载过程,这个过程包含加载、验证、准备、解析、和初始化,当然,在类加载之后还应当包含执行和卸载这两个阶段。
加载即是虚拟机通过一个类的全限定名来获取定义此类的二进制字节流。(全限定名:com/sun/Summer),然后将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。(运行时数据结构前面已经介绍,即堆、方法区、本地方法区、Java虚拟机栈、程序计数器) 然后虚拟机在堆上生成一个java.lang.Class对象,作为访问方法区的一个外部入口。
接下来是验证,验证是连接阶段的第一步,是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。验证阶段非常重要,并且验证阶段的工作量在虚拟机的类加载子系统中占了很大一部分,所以我们有必要在码代码的时候,注意Jvm的这一特性,就可以获得可观的虚拟机回报。
验证阶段包含 文件格式验证、元数据验证、字节码验证和符号验证四个阶段。
1 文件格式验证比较简单,主要是验证版本、常量类型、字符编码以及引用地址。当然其实际验证要远远不止这些而且要复杂的多。
2 元数据验证 主要检查类 是否有父类,是否实现了必要的方法,是否被非法继承,等等。
3 字节码验证 ,字节码验证是最复杂的一个阶段,主要是进行数据流和控制流的分析。
主要对类的方法体进行安全验证。包括 非法类型转换,跳转指令跳转到方法体之外,无限循环等等,由于数据流验证的高复杂性会在一定程度上拖慢虚拟机,所以我们在码代码的时候,尽量避免使用一些类型推导类的手段去实现,尽量使用类型检查来减少虚拟机检查时间。
jdk 1.6 之后的javac 提供了 StackMapTable 属性,这一属性可以将字节码验证的类型推导转化为类型检查从而节省一些时间。
我们也可以通过在 JDK 1.6 -XX:-UseSplitVerifier 来关停javac 编译器中的 StackMapTable 优化属性,或者通过-XX:+FailOverToOldVerifier 要求在类型校验失败的时候回退懂啊旧的类型推导方式进行校验。
如果所运行的代码(包括自己写的和第三方的代码) 都已经被反复使用和验证过,在实施阶段就可以考虑使用 -Xverify:none 参数来关闭大部分的类验证措施,以缩短虚拟机在类加载阶段的耗时。
发表评论
-
实现虚拟机VMware上linux与windows互相复制与粘贴
2014-11-17 13:15 1292实现虚拟机VMware上linux与windows互相复制 ... -
java 虚拟机线程与操作系统内核线程之间的关系
2014-09-23 15:13 4641java jdk 中 线程操作与虚拟机中线程操作之间的关系映射 ... -
java 语法糖 分析(一,泛型与类型擦除)
2014-09-18 11:14 505语法糖是一种计算机术语,是为了更加方便理解计算机语言或者说 ... -
Java 读写锁demo
2014-09-11 15:27 706java 读写锁 原理 和 实例 package thread ... -
java 语言的静态多分派和动态单分派 的特性
2014-09-10 18:23 1075Java 语言的静态多分派和动态单分派特性。 先来熟悉概念: ... -
接口与类的真正区别
2014-09-09 14:50 413接口与类不存在区别,除了字面修饰符不同外,其真正区别是: 当 ... -
jvm 初始化static 变量的类顺序
2014-09-09 14:42 691class Nolization{ static{ ... -
java static 类型变量定义技巧
2014-09-05 18:33 843java 变量的定义非常重要,在一定程度上可以减轻服务 ... -
eclipse 启动参数配置
2014-09-05 16:44 363参数见附件 -
too many open files 异常
2014-09-05 14:08 513每个Socket 连接都有 Receive 和 s ... -
堆转储快照(dump)的分析
2014-09-05 13:50 1069dump ,堆转储快照的详细分析,后面分析啊,现在没时 ... -
高性能硬件上的程序部署策略
2014-09-04 18:12 486一个15万pv、天左右 ... -
jsp 页面 查看线程堆栈状况
2014-09-04 15:53 645jsp 页面 查看线程堆栈信息状况 具体见 附件 -
jvm 本地方法栈(native Method stacks) 基本概念
2014-09-03 15:38 1088Java 虚拟机 运行时数据区域 一般可区分为 :方法区,堆 ... -
jvm 栈 基本概念
2014-09-03 15:10 515java 程序员 通常把java程序运行时的内存 分为 堆内存 ...
相关推荐
jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载
这篇文章我们以输出 "Hello, World" 来开始字节码之旅,如果之前没有怎么接触过字节码的话,这篇⽂章应该能够让你对字节码有⼀个最基本的认识。
每个使用Java的开发者都知道Java字节码是在JRE中运行,而JVM则是JRE中的核心组成部分,承担分析和执行Java字节码的工作,而Java程序员通常并不需要深入了解JVM运行情况就可以开发出大型应用和类库。尽管如此,如果你...
JVM优化3(Tomcat参数调优,JVM参数调优,jvm字节码,代码优化),供大家查阅!!!!!!!!!!!!!!
JVM优化3(Tomcat参数调优,JVM参数调优,jvm字节码,代码优化).zip
jvm相关代码仓库,包括类加载机制,字节码执行机制,JVM内存模型,GC垃圾回收,JV-jvm_practice
自己总结的jvm中字节码与类的加载的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合jvm的爱好者和学习者
- 了解下我们为什么要学习JVM优化 - 掌握jvm的运行参数以及参数的设置 - 掌握jvm的内存模型(堆内存) - 掌握jamp命令的使用以及通过MAT工具进行分析 - 掌握定位分析内存溢出的方法 - 掌握jstack命令的使用 - 掌握...
JVM优化方法
Java助力需要jvm学习及优化与性能瓶颈分析参考
jvm参数优化后,tomcat稳定可靠,附件为通过长时间在线测试的配置参数文件
当前,以Hadoop、Spark为...这些大数据处理框架采用分布式架构,使用Java、Scala等面向对象语言编写,在集群节点上以Java虚拟机(JVM)为运行时环境执行计算任务,因此依赖JVM的自动内存管理机制来分配和回收数据对象.
11.字节码执行
大厂架构师-日均百万订单量的JVM优化与高级GC调优策略实战(5.8G) 〖课程介绍〗: 来自顶尖大厂的架构师级JVM优化与GC调优策略实战课程,是具备有尖端技术的优化课程。在课程内容上几乎不用过多的介绍,单是查阅目录就...
淘宝JVM优化实践-长仁.pdf
网盘文件永久链接 目录 day1: 1 为什么要对jvm做优化 2 jvm的运行参数 3 jvm的内存模型 4 jmap的使用以及内存溢出分析 5 实战:内存溢出的定位与分析 6 jstack的使用 ...2 JVM字节码 3 代码优化 .........
JVM优化及面试热点分析
jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识...
JVM性能优化笔记 ------------------------------------------
jvm字节码的调用图生成器