【第22期】观点:IT 行业加班,到底有没有价值?

2.详细图解JVM内存三大核心区域及其JVM内存案例剖析

原创 2016年05月30日 15:00:05

jvm的结构:


1.jvm内存的三大核心区域(方法区,java heap 和java stack)


代码:

package com.dt.spark.jvm.basics;


/**
 * 从JVM调用的角度分析Java程序对内存空间的使用:
 * 当JVM进程启动的时候,会从类加载路径中找到包含main方法的入口欧蕾HelloJVM;
 * 找到HelloJVM后会直接读取该文件中的二进制数据并且把该类的信息放到运行收的Method内存区域中;
 * 然后会定为到HelloJVM中的main方法的字节码中并开始执行main方法中的指令:
 * Student student = new Student("测试spark");
 * 此时会创建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();
 * 
 * 
 * @author hp
 *
 */
public class HelloJVM {
/**
* 在JVM运行的时候会通过反射的方式到Method区域找到入口类的入口方面main
* @param args
*/
public static void main(String[] args) {//main方法放在Method方法区域中
/**
* student是放在主线程中的Stack区域中的;
* Student对象实例是放在所有线程共享的Heap区域中的;
*/
Student student = new Student("测试spark");

/**
* 首先会通过student指针(句柄)找Student对象,当找到该对象后
* 会通过对象内部指向方法区域中的指针来调用具体的方法去执行任务
*/
student.sayHello();
}


}


class Student{
//name本身作为成员是放在Stack区域的,但是name指向的String对象是放在Heap中;
private String name; 

public Student(String name){
this.name = name;
}

public void sayHello(){//sayHello这个方法是放在方法区域中的;
System.out.println("Hello, this is " + this.name);
}
}





版权声明: 举报

相关文章推荐

一些大牛的博客推荐,排名不分先后

今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下(转载于:http://blog.csdn.net/wujxiaoz/article/details/8237096) Android中文W...
  • joeyon
  • joeyon
  • 2015-08-25 14:49
  • 5468

第2课:全球详细图解JVM内存三大核心区域及其JVM内存案例实战剖析

王家林老师微博: http://weibo.com/ilovepains/   第2课:全球详细图解JVM内存三大核心区域及其JVM内存案例实战剖析   debug截图

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

JVM的内存区域划分

JVM的内存区域划分   请尊重作者劳动成果,转载请标明原文链接:    http://www.cnblogs.com/dolphin0520/p/3613043.html   学过...

知名博客转发

今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下(转载于:http://blog.csdn.net/wujxiaoz/article/details/8237096) Android中文W...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)