- 浏览: 463332 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 1351实现虚拟机VMware上linux与windows互相复制 ... -
java 虚拟机线程与操作系统内核线程之间的关系
2014-09-23 15:13 4693java jdk 中 线程操作与虚拟机中线程操作之间的关系映射 ... -
java 语法糖 分析(一,泛型与类型擦除)
2014-09-18 11:14 543语法糖是一种计算机术语,是为了更加方便理解计算机语言或者说 ... -
Java 读写锁demo
2014-09-11 15:27 736java 读写锁 原理 和 实例 package thread ... -
java 语言的静态多分派和动态单分派 的特性
2014-09-10 18:23 1111Java 语言的静态多分派和动态单分派特性。 先来熟悉概念: ... -
接口与类的真正区别
2014-09-09 14:50 442接口与类不存在区别,除了字面修饰符不同外,其真正区别是: 当 ... -
jvm 初始化static 变量的类顺序
2014-09-09 14:42 727class Nolization{ static{ ... -
java static 类型变量定义技巧
2014-09-05 18:33 888java 变量的定义非常重要,在一定程度上可以减轻服务 ... -
eclipse 启动参数配置
2014-09-05 16:44 402参数见附件 -
too many open files 异常
2014-09-05 14:08 554每个Socket 连接都有 Receive 和 s ... -
堆转储快照(dump)的分析
2014-09-05 13:50 1100dump ,堆转储快照的详细分析,后面分析啊,现在没时 ... -
高性能硬件上的程序部署策略
2014-09-04 18:12 515一个15万pv、天左右 ... -
jsp 页面 查看线程堆栈状况
2014-09-04 15:53 672jsp 页面 查看线程堆栈信息状况 具体见 附件 -
jvm 本地方法栈(native Method stacks) 基本概念
2014-09-03 15:38 1116Java 虚拟机 运行时数据区域 一般可区分为 :方法区,堆 ... -
jvm 栈 基本概念
2014-09-03 15:10 547java 程序员 通常把java程序运行时的内存 分为 堆内存 ...
相关推荐
在IT行业中,字节码中间表示(Bytecode Intermediate Representation,简称BCIR)是编译器设计中的一个重要概念,尤其在虚拟机(如Java虚拟机JVM)中扮演着核心角色。这种中间表示允许编译器进行高效分析、优化以及...
1. **验证**:确保字节码符合JVM规范,没有违反语义规则。 2. **准备**:为类中的静态变量分配内存并设置初始值。 3. **解析**:将符号引用转换为直接引用,即将类或接口、字段、方法等的符号名称转换为其实际地址。...
* Java 字节码:Java 字节码是 JVM 的执行单元,负责执行 Java 程序。 * 类加载器:类加载器是 JVM 的一部分,负责将 Java 类文件加载到内存中。 * 执行引擎:执行引擎是 JVM 的一部分,负责执行 Java 字节码。 ...
它由JVM通过类加载器加载,验证器(Verifier)负责检查字节码文件是否符合JVM规范,以保证安全运行。 为何需要操作Java字节码?操作Java字节码可以用于多种场景,比如程序分析、找到代码中的bug、检查代码复杂性、...
字节码验证是JVM安全性的关键环节。在类加载到JVM之前,会进行严格的验证,确保字节码符合Java语言规范,防止恶意代码执行,如栈溢出、非法操作数等。 内存管理是JVM的重要职责,包括堆内存、方法区、栈内存、程序...
3. **JVM组件**:JVM包含类加载器(class loader)、字节码验证器(bytecode verifier)和JIT(Just-in-time)编译器。类加载器负责加载类文件,验证器确保字节码安全,JIT编译器则在运行时将字节码优化为本地机器码...
它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者提升程序的运行效率和稳定性。 1. **Java虚拟机概述**:Java虚拟机是Java平台的核心组件,它...
- **类加载器**:负责将.class文件中的字节码加载到内存中,并进行验证、准备和解析等初始化工作。 - **运行时数据区**:包括方法区、堆、栈、本地方法栈和程序计数器等。这些区域分别用于存储不同的数据类型和信息...
- **跨平台性**:通过编译成字节码并由JVM解释执行的方式,确保了Java程序可以在多种操作系统上运行。 - **面向对象**:Java支持封装、继承和多态等面向对象特性。 - **自动内存管理**:Java通过垃圾回收机制自动...
Java虚拟机(JVM)是一种用于执行Java字节码的虚拟机。它提供了运行时环境,使得Java程序可以在任何安装了兼容JVM的操作系统上运行,而无需重新编译。这种跨平台特性是通过将Java源代码编译为一种中间格式——字节码...
JVM是Java平台的核心组成部分,它负责执行字节码,为开发者提供跨平台的运行环境。Java程序被编译成与平台无关的字节码,由JVM负责解释执行。JVM的运行主要包括类加载、代码解析、执行、垃圾回收等过程。 在类加载...
7. **安全性**:Java提供了多种安全机制,如实时内存分配、字节码验证以及异常处理机制等,确保程序在执行过程中不会受到恶意攻击或出现非法行为。 #### 二、Java虚拟机(JVM) 1. **字节码与解释器**:Java程序...
这一阶段包括文件格式、元数据、字节码和符号引用验证四个子阶段。验证虽然不强制,但对于类的稳定性和安全性至关重要。 准备阶段是为类的静态变量分配内存,并初始化为默认值。实例变量则在对象实例化时分配。此时...
JVM是Java的核心组成部分,它的主要功能是加载、验证、执行class文件中的字节码。类装载器是JVM的一部分,负责加载程序和API中的class文件。JVM有两种主要的执行引擎实现: - **解释器**:简单地解释执行字节码,...
JVM是运行Java程序的平台,它负责将Java字节码转换为机器码。因此,对JVM的了解可以帮助开发者利用JVM的性能特性来优化应用。例如,通过理解垃圾收集(GC)的机制来减少不必要的内存回收操作,这可以通过合理管理...
- **安全性**:JVM会在字节码执行前对其进行验证,确保其不会违反安全策略。 - **灵活性**:字节码可以被动态地生成或修改,为实现诸如AOP(面向切面编程)、动态代理等功能提供了可能。 #### 动态编译Java源文件 ...
9. **安全性**:JVM提供了安全管理框架,包括类加载的权限检查、字节码验证等,以保证代码的可信度。 10. **性能优化**:虽然规范不规定具体的实现方式,但提供了性能相关的指导原则,如栈深度限制、内存分配策略等...
Java虚拟机(JVM)是Java平台的核心组件之一,它的主要职责是在计算机上执行Java字节码。字节码是一种中间代码形式,由Java编译器生成,并可以在任何支持JVM的平台上运行而无需重新编译。这种特性使得Java程序具有高度...
每个JVM都负责将Java字节码转换为本机机器指令,这个过程叫做即时编译(JIT, Just-In-Time Compilation)。JIT技术允许JVM在运行时优化代码,提高性能,同时保持跨平台兼容性。 Java的类加载机制也是实现跨平台性的...