JVM-Java创建对象过程】的更多相关文章

Java创建对象的过程 Java是一门面向对象的编程语言,在Java程序运行过程中每时每刻都有对象被创建出来.在语言层面上,创建对象通常仅仅是一个new关键字而已,而在虚拟机中,对象的创建又是怎样一个过程呢? 一.检测类是否被加载 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初始化过.如果没有,那必须先执行相应的类加载过程. 二.为新生对象分配内存 在类加载检查通过后,接下来虚拟机将为新生对象分配内…
一.安装环境 大家在开发Java的时候,首先回装一个java的开发环境,一个JDK(也包含了JRE),然后设置环境变量,这个过程我就不细说了,大家装完后有没有发现,在装完这个环境的同时在安装JRE,在JDK的文件夹下还有一个jre文件夹,说这个有什么意思呢,首先我们要理解JDK和JRE的区别. JDK:开发环境. JRE:运行环境. 就是这么简单,那么是怎么运行起来的呢,我们一定经历过这样的一个阶段,在黑乎乎的窗口敲下下面的代码: javac hello.java 这个过程就是江hello.ja…
Java编译原理 1.Java编译过程与c/c++编译过程不同 Java编译程序将java源程序编译成jvm可执行代码--java字节码. c/c++编译过程: 当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而生成的.因此在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行. Java编译过程: Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将些符号引用信息保留在字节码中,由解释器在运行过程中创…
java几种常见的创建对象的方法: 1.使用new关键字创建对象 2.利用java的反射机制,通过java.lang.Class或者java.lang.reflect.Constructor创建对象 3.实现Cloneable接口,然后重写Object.clone()方法创建对象 4.实现序列化serialiable接口,通过反序列化,ObjectInputStream的readObject()方法创建对象 5.String str="abc" 直接由jvm创建 或者使用 字符串操作符…
1.1.1.1. -Xmn参数 参数-Xmn1m可以用于设置新生代的大小.设置一个较大的新生代会影响老生代的大小,因为这两者的总和是一定的,这个系统参数对于系统性能以及GC行为有很大的影响,新生代一般设置为整个堆空间的1/3到1/4左右最合适. 参数-XX:SurvivorRatio用来设置新生代中eden空间和from/to空间的比例,公式如下: -XX:SurvivorRatio=eden/from =eden/to 解释:from和to之间的两块区间内存是相等的.可以参考 java虚拟机…
Java创建对象的方式共有四种: 使用new语句实例化一个对象: 通过反射机制创建对象: 通过clone()方法创建一个对象: 通过反序列化的方式创建对象. 一.使用new语句实例化一个对象 new语句实例化一个对象是最常见的用来创建对象的方式.我们看看通过反射机制创建对象. 二.通过反射机制创建对象 1.什么是反射机制? 反射机制是java的一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许对其内部的成员进行操作.反射机制提供的功能主要有:得到一个对象所属的类:获取一个类的所有成员…
JVM方法调用过程 重载和重写 同一个类中,如果出现多个名称相同,并且参数类型相同的方法,将无法通过编译.因此,想要在同一个类中定义名字相同的方法,那么它们的参数类型必须不同.这种方法上的联系就是重载. 重载的方法在编译过程中即可完成识别.具体到每一个方法调用,Java编译器会根据所传入参数的声明类型(有别实际类型)来选取重载方法. 选取过程如下: 1.不考虑对基本类型自动装拆箱(auto-boxing,auto-unboxing),以及可变长参数的情况下选取重载方法; 2.如果1中未找到适配的…
Java的运行原理 在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器.这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口.编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行.在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode),它不面向任何特定的处理器,只面向虚拟机.每一种平台的解释器是不同的,但是实现的虚拟机是相同的.Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟…
java类加载过程:加载-->验证-->准备-->解析-->初始化,之后类就可以被使用了.绝大部分情况下是按这 样的顺序来完成类的加载全过程的.但是是有例外的地方,解析也是可以在初始化之后进行的,这是为了支持 java的运行时绑定,并且在一个阶段进行过程中也可能会激活后一个阶段,而不是等待一个阶段结束再进行后一个阶段. 1.加载 加载时jvm做了这三件事: 1)通过一个类的全限定名来获取该类的二进制字节流 2)将这个字节流的静态存储结构转化为方法区运行时数据结构 3)在内存堆中生成…
1.类的加载.连接和初始化 当程序使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化三个步骤来对类进行初始化.如果没有意外,jvm将会连续完成这三个步骤,有时也把这三个步骤统称为类的加载和初始化 1.1 类的加载 类加载器根据类的全名以二进制流的形式读取class文件到JVM内存的方法区中,然后转换为一个与目标类对应的java.lang.Class对象实例. 1.2 类的连接 链接阶段要做的是将加载到JVM中的二进制字节流的类数据信息合并到JVM的运行时状态中,经由验证.准…