购物帮 做特惠的导购网站,城乡建设部网站第35号令,上海南山做网站,网站如何做绿标冯诺依曼模型与计算机处理数据过程相关联#xff1a;
冯诺依曼模型#xff1a; 输入/输出设备存储器输出设备运算器控制器处理过程#xff1a; 提取阶段#xff1a;输入设备传入原始数据#xff0c;存储到存储器解码阶段#xff1a;由CPU的指令集架构ISA将数值解…冯诺依曼模型与计算机处理数据过程相关联
冯诺依曼模型 输入/输出设备存储器输出设备运算器控制器处理过程 提取阶段输入设备传入原始数据存储到存储器解码阶段由CPU的指令集架构ISA将数值解码成指令执行阶段控制器把需要计算或处理的数据调入运算器最终阶段由输出设备把运算结果返回
所以JVM是什么呢
首先将java文件编译成.class文件之后JVM会对字节码文件进行解释翻译成对应平台的机器指令开始执行。屏蔽了底层操作系统实现跨平台运行。
.java文件是如何变成.class文件的 类文件解读 16进制 magic、版本号、常量池62个字面量和符号引用、字段表集合、方法表集合 符号引用就是类信息、修饰符名称等等不直接指向
类加载机制
所谓的类加载机制就是将class文件加载进内存并对数据进行校验转换解析和初始化形成JVM可以直接使用。
当字节码文件加载到内存的时候是不是需要一个访问入口呀 那如何将字节码文件加载进内存呢 常见的从本地系统加载动态代理技术运算时计算而成从jar包中加载类加载过程 装载 通过类全限定名获取类的二进制字符流将字符流代表的静态存储结构转换为方法区的运行时数据结构在堆中生成java.lang.class对象作为对方法区中这些数据的访问入口链接 验证格式验证、字节码验证、符号引用验证。-Xverify:none 取消验证。 准备为静态变量赋值初始化成默认值。 这里不包含final修饰的staticfinal修饰的static都在编译的时候就分配了不会为实例变量分配初始化类变量在方法区中实例变量随着对象在堆中即在实例构造器方法中进行的解析 将符号引用转换成直接引用直接指向目标的指针或者间接定位到目标的句柄对解析结果进行缓存初始化 执行类构造器方法的过程对比于准备阶段这里是通过指定主观计划去初始化变量和其他资源。对类变量设置初始值的两种方式 直接声明static代码块步骤 先装载和链接本类然后初始化父类初始化自己什么时候初始化主动引用 创建实例对静态变量赋值调用静态方法调用子类父类也会初始化标明启动类的类被动引用 定义类数组不会初始化使用父类的静态变量不会初始化static final不会初始化卸载 用完之后就卸载回收 包括类加载器class对象实例类加载器 就是读取字节码转换成java.lang.class类的一个实例的代码模块一个类在同一个类加载器中具有唯一性不同类加载器是允许同名类存在的类加载器不同就不会是同一个类。分类 bootstrap classloader负责java_home的所有classextension classloader负责一些扩展的包app classloaderclasspath中指定的包custom classloader根据程序自定义类加载器为什么要分层 如果自己编写了一个java.lang.String类如果只有一个的话无法判定究竟要加载哪个。所以分层对信任级别进行划分三个特性 全盘负责 当一个类加载器加载某个class的时候该class所依赖的和引用其他的class都由该类加载器负责载入。除非显式使用另一个类加载器父类委托双亲委派 首先传入类的全限定名从app层依次往上找是否加载过然后又从上往下看谁能加载最后还没有就抛异常。可以重写loadclass打破双亲委派打破 SPIJDK提供了一套接口定义实现类在META-INF/services中注册实现类的相关信息比如JDBC的DriverManagerOSGI热部署、热替换如果怕打破可以重写findclass方法缓存机制 加载过的class文件在内存中方法区缓存每一个类加载器都有自己的缓存
运行时数据区
常量池 静态常量池class文件的一部分由字面量文本、字符串以及final修饰的和符号引用描述信息组成运行时常量池静态常量池被加载到内存后就变成了运行时常量池了class文件内容落地到内存了字符串常量池现在在堆中 面试常问的 String a aaaa; 解析最多创建一个字符串对象。先查找有没有这个没有就创建一个返回引用。 String a new String(aaaa); 解析最多会创建两个对象。常量池没有的话就在堆中创建一个字符串对象放字符串常量池里再在堆中创建一个对象独立出去返回后面的引用。有没有都要多创建一个。 intern() String s1 new String(yzt);
String s2 s1.intern();
System.out.println(s1 s2); //false 返回的是字符串常量池里的 方法区 线程共享堆的一个逻辑部分但是也要和堆区分出来存放虚拟机加载的类信息常量、静态变量、JIT代码等等当方法区无法满足内存分配的需求时将抛出OOM异常1.8后在系统内存元空间中为了避免内存泄露和OOM堆 虚拟机管理内存中最大的一块在虚拟机启动的时候被创建线程共享实例和数组都在堆上分配注意java.class.class这个对象就是方法区中数据的访问入口虚拟机栈 假设现在已经初始化完成了要使用了一个线程的运行状态就由虚拟机栈来保存线程私有随着线程的创建而创建。线程执行的每一个方法就是栈中的一个栈桢可以看作是一个方法的运行空间。 程序计数器 线程切换的时候记录正在执行的字节码指令的地址本地方法栈 如果执行Native就在本地方法栈执行如果在java方法执行的时候调用native方法就是动态链接。
内存布局
对象内存布局 指针压缩 在64位的操作系统中一个指针一般是八个字节在很多情况下并不需要使用这么多的地址空间。压缩的主要是classpointer减少内存消耗压缩成4字节。对于大型应用节省空间。更好的缓存应用能存放更多的对象提高访问速度较小的数据结构代表着读写能够更快的完成减少垃圾回收开销扫描和标记耗时变小无效情况 32位超过32G怎么去理解 第一种理解对象长度一定是8的整数倍所以只用存第一个4G*832G第二种理解当存入64位寄存器的时候左移三位末尾三个0是不需要的索引寻址空间提高了8倍java采用的大端存储便于符号判断小端便于类型转换classpointer设计 句柄池访问对象移动的时候只需要修改一个指针但是多一次定位的时间开销直接指针节省了一次定位开下在对象移动后还需要修改引用 对齐填充 8字节举个例子如果针对开区域存储那么就需要读两次内存现在读一次就可以了。也可以选择策略 0基本类型填充类型引用类型1引用类型基本类型填充类型2父类的引用类型和子类的引用类型放在一起父类采用0子类采用1从而降低空间的开销。
运行时数据区
根据GC的悲观策略98%的对象不能达到分代年龄内存担保机制假设在young gc后新生代仍然有大量的对象存活就需要老年代进行分配担保。
什么时候Full GC 每次晋升的对象平均大小剩余空间基于历史水平计算 上面内存担保机制 元空间内存不足 System.GC 如何理解Minor/Major/Full GC
Minor GC:新生代
Major GC:老年代
Full GC:新生代老年代 为什么需要Survivor区?只有Eden不行吗
如果没有survivor区域那么就会导致每进行一次minor gc存活的对象就要进入老年代这样老年代就会很快填满容易发生full gc老年代空间又比较大。
如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。
这样一来老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC,也可以看做触发了Full GC)。
老年代的内存空间远大于新生代,进行一次Full GC消耗的时间比Minor GC长得多。
执行时间长有什么坏处?频发的Full GC消耗的时间很长,会影响大型程序的执行和响应速度。
可能你会说那就对老年代的空间进行增加或者较少咯。
假如增加老年代空间更多存活对象才能填满老年代。虽然降低Full GC频率但是随着老年代空间加大,一旦发生Full GC,执行所需要的时间更长。
假如减少老年代空间虽然Full GC所需时间减少但是老年代很快被存活对象填满,Full GC频率增加。
所以Survivor的存在意义,就是减少被送到老年代的对象,进而减少Full GC的发生,Survivor的预筛选保证,只有经历16次Minor GC还能在新生代中存活的对象,才会被送到老年代。 为什么需要两个Survivor区
最大的好处就是解决了碎片化。也就是说为什么一个Survivor区不行?第一部分中,我们知道了必须设置Survivor区。假设现在只有一个Survivor区,我们来模拟一下流程:
刚刚新建的对象在Eden中,一旦Eden满了,触发一次Minor GC,Eden中的存活对象就会被移动到Survivor区。这样继续循环下去,下一次Eden满了的时候,问题来了,此时进行Minor GC,Eden和Survivor各有一些存活对象,如果此时把Eden区的存活对象硬放到Survivor区,很明显这两部分对象所占有的内存是不连续的,也就导致了内存碎片化。
永远有一个Survivor space是空的,另一个非空的Survivor space无碎片。 新生代中Eden:S1:S2为什么是8:1:1
新生代中的可用内存复制算法用来担保的内存为9:1
可用内存中EdenS1区为8:1
即新生代中Eden:S1:S2 8:1:1
现代的商业虚拟机都采用这种收集算法来回收新生代IBM公司的专门研究表明新生代中的对象大概98%是“朝生夕死”的 堆内存中都是线程共享的区域吗
JVM默认为每个线程在Eden上开辟一个buffer区域用来加速对象的分配称之为TLAB全称:Thread Local Allocation Buffer。
对象优先会在TLAB上分配但是TLAB空间通常会比较小如果对象比较大那么还是在共享区域分配。 文章转载自: http://www.morning.tkjh.cn.gov.cn.tkjh.cn http://www.morning.rshs.cn.gov.cn.rshs.cn http://www.morning.tnhg.cn.gov.cn.tnhg.cn http://www.morning.ngcw.cn.gov.cn.ngcw.cn http://www.morning.dnpft.cn.gov.cn.dnpft.cn http://www.morning.kybjr.cn.gov.cn.kybjr.cn http://www.morning.lpzyq.cn.gov.cn.lpzyq.cn http://www.morning.rxhsm.cn.gov.cn.rxhsm.cn http://www.morning.saletj.com.gov.cn.saletj.com http://www.morning.ydfr.cn.gov.cn.ydfr.cn http://www.morning.wwgpy.cn.gov.cn.wwgpy.cn http://www.morning.shprz.cn.gov.cn.shprz.cn http://www.morning.smjyk.cn.gov.cn.smjyk.cn http://www.morning.qwwhs.cn.gov.cn.qwwhs.cn http://www.morning.plqqn.cn.gov.cn.plqqn.cn http://www.morning.mzydm.cn.gov.cn.mzydm.cn http://www.morning.fgkrh.cn.gov.cn.fgkrh.cn http://www.morning.ckctj.cn.gov.cn.ckctj.cn http://www.morning.ltrms.cn.gov.cn.ltrms.cn http://www.morning.wsgyq.cn.gov.cn.wsgyq.cn http://www.morning.zwpzy.cn.gov.cn.zwpzy.cn http://www.morning.ylqb8.cn.gov.cn.ylqb8.cn http://www.morning.rnribht.cn.gov.cn.rnribht.cn http://www.morning.rjmb.cn.gov.cn.rjmb.cn http://www.morning.zwgbz.cn.gov.cn.zwgbz.cn http://www.morning.dmhs.cn.gov.cn.dmhs.cn http://www.morning.pybqq.cn.gov.cn.pybqq.cn http://www.morning.pkfpl.cn.gov.cn.pkfpl.cn http://www.morning.nmymn.cn.gov.cn.nmymn.cn http://www.morning.ftntr.cn.gov.cn.ftntr.cn http://www.morning.tzpqc.cn.gov.cn.tzpqc.cn http://www.morning.ssglh.cn.gov.cn.ssglh.cn http://www.morning.jrqcj.cn.gov.cn.jrqcj.cn http://www.morning.mlcnh.cn.gov.cn.mlcnh.cn http://www.morning.mdtfh.cn.gov.cn.mdtfh.cn http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn http://www.morning.xlndf.cn.gov.cn.xlndf.cn http://www.morning.wmlby.cn.gov.cn.wmlby.cn http://www.morning.skbbt.cn.gov.cn.skbbt.cn http://www.morning.qlsyf.cn.gov.cn.qlsyf.cn http://www.morning.wbns.cn.gov.cn.wbns.cn http://www.morning.ngcth.cn.gov.cn.ngcth.cn http://www.morning.ypktc.cn.gov.cn.ypktc.cn http://www.morning.yybcx.cn.gov.cn.yybcx.cn http://www.morning.zpnfc.cn.gov.cn.zpnfc.cn http://www.morning.gyfwy.cn.gov.cn.gyfwy.cn http://www.morning.nqpxs.cn.gov.cn.nqpxs.cn http://www.morning.kclkb.cn.gov.cn.kclkb.cn http://www.morning.pakistantractors.com.gov.cn.pakistantractors.com http://www.morning.wpydf.cn.gov.cn.wpydf.cn http://www.morning.plydc.cn.gov.cn.plydc.cn http://www.morning.kpfds.cn.gov.cn.kpfds.cn http://www.morning.nmpdm.cn.gov.cn.nmpdm.cn http://www.morning.zcsch.cn.gov.cn.zcsch.cn http://www.morning.nlrxh.cn.gov.cn.nlrxh.cn http://www.morning.wclxm.cn.gov.cn.wclxm.cn http://www.morning.wsxxq.cn.gov.cn.wsxxq.cn http://www.morning.pwggd.cn.gov.cn.pwggd.cn http://www.morning.bdzps.cn.gov.cn.bdzps.cn http://www.morning.lhsdf.cn.gov.cn.lhsdf.cn http://www.morning.qwmsq.cn.gov.cn.qwmsq.cn http://www.morning.pcgjj.cn.gov.cn.pcgjj.cn http://www.morning.wcjgg.cn.gov.cn.wcjgg.cn http://www.morning.nysjb.cn.gov.cn.nysjb.cn http://www.morning.hdqqr.cn.gov.cn.hdqqr.cn http://www.morning.pwdgy.cn.gov.cn.pwdgy.cn http://www.morning.nqmwk.cn.gov.cn.nqmwk.cn http://www.morning.ykswq.cn.gov.cn.ykswq.cn http://www.morning.synkr.cn.gov.cn.synkr.cn http://www.morning.jwxmn.cn.gov.cn.jwxmn.cn http://www.morning.wwkft.cn.gov.cn.wwkft.cn http://www.morning.qsswb.cn.gov.cn.qsswb.cn http://www.morning.rqlbp.cn.gov.cn.rqlbp.cn http://www.morning.fthqc.cn.gov.cn.fthqc.cn http://www.morning.ccyns.cn.gov.cn.ccyns.cn http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn http://www.morning.pctql.cn.gov.cn.pctql.cn http://www.morning.jydhl.cn.gov.cn.jydhl.cn http://www.morning.xkjrs.cn.gov.cn.xkjrs.cn http://www.morning.dtcsp.cn.gov.cn.dtcsp.cn