下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1、JVM原理以及JVM调优:JVM原理Public class HelloWordpublic static void main(String args)System.out.print(zzHello Word) Java代码一 java字节码(class文件)一 Java HelloWord加载配置(根据系统版本, 寻找jvm.cfg文件)一根据配置找到jvm.dll (jvm.dll文件则是JVM的主要实现)一初 始化jvm,获取JNI接口(JNI接口是java本地接口,通过JNI接口才能装载class文件, 他还常用于和操作系统、硬件等交互)一 找到main方法并运行Java代码通过
2、编译之后生成字节码文件(class文件),通过:java HelloWorld执行,此时 java根据系统版本找到jvm.cfg,通过jvm.cfg文件找到对应的jvm.dll, jvm.dll则是java 虚拟机的主要实现。接下来会初始化JVM,并获取川I接口 QNI接口: java本地接口, java被编译成class文件,通过JNI接口从硬盘上找到class文件并加载到JVM中,然后 找到main方法,最后执行)JVM体系结构:(1) Class Loader 类加载器负责加载.class文件,class文件在文件开头有特定的文件标示,并且ClassLoader负责class 文件的加载
3、,至于它是否可以运行,则由Execution Engine决定。定位和导入二进制class文件验证导入类的正确性为类分配初始化内存帮助解析符号引用JVM数据运行区:/ Native Method Stack 本地方法栈/ PC Register程序计数器/ Method Area方法区:静态变量+常量+类信息+运行时常量池存在方法区中,实例变 量存在堆内存中。/ Stack栈:基本类型的变量和对象的引用变量都是在函数的栈内存中分配。遵循:“先进后出” / “后进先出”原则栈是运行时的单位。栈中存的是基本数据类型和堆中对象的引用。/ Heap堆:基本类型的变量和对象的引用变量都是在函数的栈内存中
4、分配。堆是存储的单位。堆中存的是对象堆分为三大块:新生区(包括伊甸区、幸存者区0和幸存者区1)、养老区、永久存储区 *00M 异常:如果出现 java.lang.OutOfMemoryErrouJava.heap.space 异常,说明 Java 虚拟 机的堆内存不够。原因有二:A、java虚拟机的堆内存设置不够,可以通过参数-Xms、Xmx来调整。B、代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)*如果出现 java.lang.OutOfMemoryError:PermGen space,说明是 java 虚拟机对永久代 Perm 内存设置不够。原因有二:(jdkl.8
5、及之后不会出现该问题)A、程序启动需要加载大量的第三方jar包。例如:在一个Tomcat下部署了太多的 应用。B、大量动态反射生成的类不断被加载,最终导致Perm区被占满。JVM调优:建议:1、初始化内存和最大内存尽量保持一致,避免内存不够用继续扩充内存。最大内存 不要超过物理内存,例如内存8g,可以设置最大内存4g/6g但是不能超过8g否 则加载类的时候没有空间会报错。2、Gc/fullgc频率不要太高、每次gc时间不要太长、根据系统应用来定。4) JVM调优总结:1、年轻代大小选择:A、响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根 据实际情况选择)。在此种情况下,年轻
6、代手机发生的频率也是最小的。同时, 减少到达年老代的对象。B、吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时 间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。2、年老代大小选择:A、响应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置, 一般要考虑并发会话率和会话持续时间等一些参数。如果堆设置小了,可以 会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如 果堆大了,则需要较长的收集时间。最优化的方案,一般需要参考一下数据 获得:令并发垃圾收集信息;令持久代并发收集次数令 传统GC信息花在年轻代和年老代回收上的时间比例。减少年轻代
7、和年老代花费的时间,一般会提高应用的效率B、吞吐量优先的应用:一般吞吐量优先的应用都有一个很大的年轻代和一个较 小的年老代。原因是:这样可以尽可能回收掉大部分短期对象,减少中期的对象,而年 老代尽存放长期存活对象。2、Linux (命令和shell脚本):查找系统正在运行的进程的命令、一ps-A显示所有程序查找指定文件的命令一find-namehello.txt查找当前目录下名称为hello.txt的文档3、闭包:方法里面返回方法。将应用的变量在返回的方法中调用确保变量不会被回收,但 是用多了会影响内存。(曹博)闭包的开发原理a、闭包概念:闭包就是能够读取其他函数内部变量的函数。(也可以理解为
8、定义在一个函数内部 的函数,故闭包就是将函数内部和函数外部连接起来的桥梁)b、闭包的用途:1、可以读取函数内部的变量2、让这些变量的值始终保持在内存中,不会再函数调用后被自动清除。c、使用的注意点1、由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥 用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄漏。解决的方法 是:在退出函数之前,将不使用的局部变量全部删除。2、闭包会在父函数外部,改变父函数内部的值。所以,如果你把父函数当做对象 (Object)使用,把闭包当做它的公用方法(public method),把内部变量当作 它的私有属性(private value),
9、这是一定要小心,不要随便改变父函数内部变 量的值d、子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。这种现象称为“链式作用域”结构(chain scope)4、Bytecode的应用可以说Javaassist那部分内容,通过class loader动态加载 字符串为类, 可以举例子dubbo中的服务端接受消息就是使用这种机制动态根据接口创建动态 代 理(曹博)Byte code 开发:bytecode 与 sourcecode 的区另一sourcecode指的是源代码,也就是我们根据java语言规范所编写的源程序文件,扩 展名为java;b
10、ytecode叫字节码,是扩展名为java的源程序文件经过java编译器后所生成的类文 件,它的扩展名为class。字节码文件不是二进制文件,字节码文件通过java解释器 在java虚拟机中解释执行。2、class文件是一组以8位字节为基础单位的二进制流,各个数据项按顺序紧密的从前 向后排序。根据java虚拟机规范的规定,class文件只使用两种存储结构:无符号数 和表无符号数属于基本的数据类型,一 ul、u2、u4、u8来分别代表一个字节、两 个字节、四个字节、8个字节的无符号数,无符号数可以用来描述数字、索引 引用、数量值,或者按照UTF.8编码构成字符串值表是由多个无符号数或者其他表作为
11、数据项构成的复合数据类型,所有表都习 惯性的以“_info”结尾。5、反射 是java jdk提供的一种动态调用实例的方法。但是有坏处。举例:框架中从controller 到服务层就是用了反射。坏处是:不能使用其他框架做的任何代理。比如hibernate的 事务处理就用不了了,所以框架是自行处理事务的可以适应bytecode进行动态的服务 优化(曹博)java的反射机制:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方 法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以 及动态调用对象的方法的功能称为java语言的反射机制6、Spring 原理及 Spri
12、ng 的 IOC 和 AOP一、Spring工作原理:IOC动态注入,让一个对象的创建不用new,可以自动的生产,这其实就是利用了 java里的反射,反射其实就是在运行时动态的去创建、调用对象,spring就是在运 行时,跟xml Spring的配置文件来动态创建对象和调用对象里的方法。Spring另一个核心AOP (面向切面编程),可以位某一类对象进行监督和控制(也就 是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块 扩充的功能。这些都是通过配置类达到的。目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通 过配置类说明管理的(spring根据这些配
13、置内部通过反射去动态的组装对象)4) Spring是一个容器,凡是在容器里的对象才会有spring所提供的服务和功能。Spring 中经典设计模式:模板方法模式。二、Spring依赖注入方式:IOC,另外一种说法叫DI,及依赖注入,不是技术,是一种 思想1、Autowired:自动装配,用于替代基于XML配置的自动装配(1)构造器注入:1、在构造器上添加人田0/血1注解:Autowired /构造器注入private TestBean 11 (String message) this.message = message;)2、在spring配置文件中添加bean配置:(2)字段注入:在字段上添加AutoWired,同构造器注入(3)方法参数注入:在字段上添加AutoWired,同构造器注入1、在方法上添加AutoWired注解:package cn.javass.spring.chapterl2; private TestBean 11 (String message) 省略 importpublic class TestBean 14 private String message;private List li
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化学镀银工操作安全模拟考核试卷含答案
- 塑料模具工创新思维能力考核试卷含答案
- 工程船舶水手操作管理竞赛考核试卷含答案
- 多孔硝酸铵造粒工安全文明测试考核试卷含答案
- 绝缘防爆工具制作工岗前技术改进考核试卷含答案
- 五年级感冒咳嗽请假条
- 2025年呼吸制氧项目发展计划
- 2025年地震数字遥测接收机合作协议书
- 2026年数字孪生水务系统项目营销方案
- 2025年陕西省中考地理真题卷含答案解析
- 不良资产合作战略框架协议文本
- 2025年盐城中考历史试卷及答案
- 2026年孝昌县供水有限公司公开招聘正式员工备考题库完整参考答案详解
- 2025年郑州工业应用技术学院马克思主义基本原理概论期末考试模拟试卷
- 测绘资料档案汇交制度
- 2025年六年级上册道德与法治期末测试卷附答案(完整版)
- IPC7711C7721C-2017(CN)电子组件的返工修改和维修(完整版)
- 吕国泰《电子技术》
- 哈萨克族主要部落及其历史
- 2015比赛练习任务指导书
- 人教版七年级语文上册期末专题复习文言文训练及答案
评论
0/150
提交评论