(01)JVM-内存三大核心区域以及分析
- package org.burning.sport.jvm;
- /**
- * 从JVM调用的角度分析Java程序对内存空间的使用,
- * 当JVM进程启动的时候,会从类加载器路径中找到包含main方法的入口类HelloJVM
- * 找到HelloJVM后会直接读取该文件中的二进制数据并且把该类的信息放到Method内存区域中
- * 然后会定为HelloJVM中的main方法的字节码中并开始执行main方法中的指令
- * Student student = new Student("张三");
- * 此时会创建Student实例对象并且使用student来为该对象命名,其步骤如下:
- * 步骤一:JVM会直接到Method区域中去查找Student类的信息,此时发现没有Student类,就通过类加载器加载该Student类文件
- * 步骤二:在JVM的Method区域加载并找到了Student类之后会在Heap区域中为Student实例对象分配内存并且在
- * Student的实例对象中持有指向方法区域中的Student类的引用(内存地址)
- * 步骤三:JVM实例完后会在当前线程中为Stack中的reference建立实际的引用关系,此时会赋值给student
- *
- * 在JVM中方法的调用一定是属于线程的行为,也就是说方法调用本身会发生在调用线程的方法调用栈:
- * 线程的方法调用栈(Method Stack Frames),每一个方法的调用就是方法调用栈中的一个Frame,该Frame包含了
- * 方法的参数、局部变量、临时数据等
- * student.sayHello();
- * @ProjectName: base-project
- * @Description:
- * @author: lisen
- * @date: 2018/4/15
- */
- public class HelloJVM {
- // JVM运行的时候会通过反射的方式到Method区域找到入口类的入口方法main()
- public static void main(String[] args) {
- // student是放在主线程的Stack区域中的
- //Student对象实例是放在所有线程共享的Heap区域中的
- Student student = new Student("张三");
- //首先会通过student指针(句柄)找到Student对象,当找到该对象后
- //会通过对象内部指向方法区域中的指针来调用具体的方法去执行任务
- student.sayHello();
- }
- }
- class Student {
- private String name;
- public Student(String name) {
- this.name = name;
- }
- // sayHello()这个方法是放在方法区的
- public void sayHello() {
- System.out.println("Hello, this is " + name);
- }
- }
参考:
(01)JVM-内存三大核心区域以及分析的更多相关文章
- JVM内存回收对象及引用分析
自动垃圾回收是Java相较于C++的一个重要的特点,想了解JVM的垃圾回收机制,首先我们要知道垃圾回收是回收什么地方的垃圾,我在我的上一篇博客<JVM内存区域划分>里面有写到JVM里面的内 ...
- jvm 内存,线程,gc分析
1.查看 gc的次数,和各个垃圾回收区域的内存比例 jstat : jstat -gcutil pid interval(ms) 例子:jstat -gcutil 332 1000 参数说明如下: ...
- JVM内存状况查看方法和分析工具
Java本身提供了多种丰富的方法和工具来帮助开发人员查看和分析GC及JVM内存的状况,同时开源界和商业界也有一些工具可用于查看.分析GC及JVM内存的状况.通过这些分析,可以排查程序中内存泄露的问题及 ...
- JVM内存状况查看方法和分析工具-jmap
jmap -heap 27657 Attaching to process ID 27657, please wait... Debugger attached successfully. Serve ...
- MAT实战:JVM内存溢出的定位与分析
- 说下Java堆空间结构,及常用的jvm内存分析命令和工具
Java堆空间结构图:http://www.cnblogs.com/SaraMoring/p/5713732.html JVM内存状况查看方法和分析工具: http://blog.csdn.net/n ...
- JVM内存结构详解
从java编程语言说起... 1. Java编程语言简介 1.1 编程语言概述 系统级和应用级 系统级:C,C++,go,erlang 应用级:C#,Java,Python,Perl,Ruby,php ...
- [jvm]运行时数据区域详解
了解虚拟机是怎么使用内存的,有助于我们解决和排查内存泄漏和溢出方面的问题.详解java虚拟机内存的各个区域,分析这些区域的作用服务对象以及可能发生的问题. 一.运行时数据区域 java虚拟机在执行ja ...
- Jvm内存工具
1,JConsole 位于 [JDK] bin 下, 2,代码查看当前进程堆内存 long maxMemory = Runtime.getRuntime().maxMemory();long tot ...
随机推荐
- addEvent兼容版
function addEvent(elem,type,handle){ if (elem.addEventlistener) { elem.addEventlistener(type,handle, ...
- Swift1.2与Xcode6.3 beta
Xcode6.3和Swift1.2都已经发布.这次发布增强了Swift编译器也给Swift增加了一些新的特性.详细内容可以看这里.这里主要关注比较重要的内容. 编译器的改进 Swift1.2的编译器更 ...
- 【图论】信手拈来的Prim,Kruskal和Dijkstra
关于三个简单的图论算法 prim,dijkstra和kruskal三个图论的算法,初学者容易将他们搞混,所以放在一起了. prim和kruskal是最小生成树(MST)的算法,dijkstra是单源最 ...
- Spring MVC 的@RequestParam注解和request.getParameter("XXX")
在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取.这里主要 ...
- [smarty] 在smarty模板中使用smarty变量初始化 javascript 变量的问题
// 总结:// 1/ 在smarty 模板文件中,使用从php中assign过来的smarty变量,一定需要使用双引号或单引号来括住smarty变量,如:var title="<!- ...
- NetCore入门篇:(十)Net Core项目使用Cookies
一.简介 1.Net Core可以直接使用Cookies,但是调用方式有些区别. 2.Net Core将Request和Response分开实现. 二.基本读写Cookies操作 1.写一个基本的读写 ...
- (C#)调用Webservice,提示远程服务器返回错误(500)内部服务器错误
因为工作需要调用WebService接口,查了下资料,发现添加服务引用可以直接调用websevice 参考地址:https://www.cnblogs.com/peterpc/p/4628441.ht ...
- musql 添加字段语句
修改表tax_version添加up_content属性为text类型非空,注释为“更新内容”,字段添加再“name”属性后面 ALTER TABLE `tax_version` ADD `up_co ...
- 什么是fortran语言之fortran语言入门
Fortran源自于“公式翻译”(英语:FormulaTranslation)的缩写,是一种编程语言.它是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域.FORTRAN语言以其特 ...
- 使用.NET Core 2.1的Azure WebJobs
WebJobs不是Azure和.NET中的新事物. Visual Studio 2017中甚至还有一个默认的Azure WebJob模板,用于完整的.NET Framework. 但是,Visual ...