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);
}
}





JVM内存三大核心区域不详解及示例

JVM运行时数据区域的三大核心: Heap Area 1.存储的全部都是Object对象实例,对象实例中一般都包含了其数据成员以及与该对象对应的Class的信息。 2.一个JVM实例在运行的时候...

Java 内存区域和GC机制以及JVM(Java虚拟机)优化大全和案例实战

目录 Java垃圾回收概况Java内存区域Java对象的访问方式Java内存分配机制Java GC机制垃圾收集器 Java垃圾回收概况   Java GC(Garbage Collection,...

JVM规范中的五大java内存区域

JVM在执行java程序时会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间。有的数据区域随着JVM的进程而启动,有的数据区域则依赖于用户线程的启动和结束而创建...
  • canot
  • canot
  • 2016年03月31日 16:07
  • 3597

浅析JVM内存结构和6大区域

浅析JVM内存结构和6大区域 其实对于我们一般理解的计算机内存,它算是CPU与计算机打交道最频繁的区域,所有数据都是先经过硬盘至内存,然后由CPU再从内存中获取数据进行处理,又将数据保存到内存,通过...

浅析JVM内存结构和6大区域

内存作为系统中重要的资源,对于系统稳定运行和高效运行起到了关键的作用,Java和C之类的语言不同,不需要开发人员来分配内存和回收内存,而是由JVM来管理对象内存的分配以及对象内存的回收(又称为垃圾回收...

浅析JVM内存结构和6大区域

http://www.iteye.com/news/30350 其实对于我们一般理解的计算机内存,它算是CPU与计算机打交道最频繁的区域,所有数据都是先经过硬盘至内存,然后由CPU再从内存中...

JVM内存结构和6大区域

其实对于我们一般理解的计算机内存,它算是CPU与计算机打交道最频繁的区域,所有数据都是先经过硬盘至内存,然后由CPU再从内存中获取数据进行处理,又将数据保存到内存,通过分页或分片技术将内存中的数据再f...

深入理解JVM(2)——内存区域与内存溢出

内存区域JVM在执行java程序的过程中会将内存分为几个不同的数据区域。java虚拟机规范将JVM所管理的内存区域分为这样几个运行时数据区。线程共享内存区 java堆 方法区 线程私有内存区 程序计数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2.详细图解JVM内存三大核心区域及其JVM内存案例剖析
举报原因:
原因补充:

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