JVM运行时核心数据区域

package JVM_app;

/**

* 从JVM调用的角度分析java程序对内存空间的使用;

* 当JVM进程启动的时候,会从类加载路径中找到包含main方法的入口类HelloJVM

* 找到之后会直接读取该文件中的二进制数据,并且把该类的信息放到运行时的Method内存区域中;

* 然后会定位到HelloJVM中的main方法的字节码中并开始执行main方法中指令:

* Student student = new Student("joker");

* 此时会创建Student实例对象并且使用student来应用该对象(或者说对该对象重命名),其内幕如下:

* 第一步:JVM会直接到Method区域中去查找Student类的信息,此时发现没有Student类,就通过

*          类加载器加载该Student类;

* 第二步:在JVM的Method区域加载并找到了Student类之后会在Heap区域中为Student实例对象分配内存

*          并且在Student的实例对象中持有指向方法区域中的Student类的应用(内存地址);

* 第三步:JVM实例完后,会在当前的线程中为stack中的referenc建立实际的应用关系,此时会赋值给student

*

* 在JVM中的方法的调用一定是属于线程的行为,也就是说方法调用本身会发生在调用线程的方法调用栈:

* 线程的方法调用栈(Method Stack Frames),每一个方法的调用就是方法调用栈中的一个frame,该

* frame包含了方法的参数、局部变量、临时数据等;student.sayHello();

*  */

public classHello JVM {

/**

* 在JVM运行的时候会通过反射的方式找到Method区域找到入口类的入口方法main

*@paramargs

*/

public static void main(String args[]) {

/**

* student是放在主线程中的stack区域中的;

* Student对象实例是放在所有线程共享的Heap区域中的;

*/

Student student = new Student("joker");

/**

* 首先

*/

student.sayHello();

}

}

classStudent {

private String name;//name本身作为成员是放在stack区域的,

//但是name指向的String对象是放在Heap中;

public Student(String name) {

this.name = name;

}

public void sayHello() {//sayHello这个方法是放在方法区域中的;

System.out.println("hello, this is" + this.name);

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,802评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,827评论 0 9
  • 一、JVM内幕:Java虚拟机详解(java se 7规范) 直接上图,再逐步解释。 上图显示的组件分两个章节解释...
    屈小勇阅读 1,931评论 6 22
  • 这次,我突发奇想,骑自行车去姐姐家。自行车是儿子的,小轱辘小把子,我骑在上面,像小孩摆弄着玩具,模样挺滑稽。 沿路...
    别山举水阅读 3,855评论 95 124