深入理解Java虚拟机 - Java体系】的更多相关文章

使用JAVA已经快三年了,但说来惭愧,一直以来认为Java就是Java语言本身,最多再包括一个JVM,对于整个Java的体系结构还是不甚明了,现在有时间把<深入理解Java虚拟机>这本书读了一下,也算解答了自己很多的疑惑.         JAVA不仅仅是一门语言,而是由一系列软件和规范形成的技术体系,我们可以根据这些技术体系构造符合JAVA规范的虚拟机,语言,解析器等:由于JAVA的最初的设计目标是为了实现“一次编写,到处运行”的理想,整个软件界在这个理想的鼓舞下,针对不同的应用场景,设计了…
1.java技术体系 举例: class文件格式:如下图所示,java源代码可以根据不同的编译器可以编译成不同的代码.即可以自定义语言规范比如beanshell,并编写代码; 然后自己编写java编译器将其源代码编译成class文件,从而在java虚拟机中运行.即可以解释java支持脚本语言的原因…
本地方法栈.java堆.方法区 本地方法栈在HotSpot版本内与java虚拟机栈是合二为一的.不单独区分本地方法栈.但是java虚拟机中是有这样一块区域的. 作用: 1.本地方法栈为虚拟机栈执行java方法服务 2.本地方法栈为虚拟机栈执行navtive方法服务 java堆 java堆是线程共享区的堆内存.供所有线程共享. 作用: 1.存放对象实例 2.垃圾收集器管理的主要区域 3.新生代,老年代,Eden空间 通过参数设定大小: -Xmx -Xms 会报OutMemoryError错误 堆内…
java虚拟机栈的理解 虚拟机栈就是我们所熟知的栈内存,栈内存属于线程独有的.而在栈内存中的局部变量表中存储的引用类型只是存储对象的内存地址.对象的创建在堆内存中,即对象在线程共享区中. 局部变量表: 局部变量表的内存空间在编译时期完成分配,用于存放编译期间可知的各种基本数据类型,引用类型以及returnAdress类型.就是我们所熟知的栈内存. 模拟栈内存溢出 当在一个线程中不停的死循环调用一个方法时,因为方法的执行会在帧分配固定内存的大小,所以不停调用方法(前一个方法未执行完成弹出栈),会在…
1.深入理解java虚拟机 总图: 1.线程共享区: 2.线程独占区: 1.程序计数器 理解为当前线程锁执行的字节码的行号指示器,程序计数器没有内存异常错误.…
本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cnblogs.com/wengshuhang/p/10073587.html 前言: 毕业后啥也不懂,水了一年,结果现在很多java基础的东西都不会,跳槽时候很艰难,现在开始恶补,首先是jvm--->深入理解java虚拟机(ps:买了半年都没翻过) 写博客的初始目的也只是为了记录一下自己认识到的知识点…
1.java虚拟机 A:java虚拟机有很多个版本,但是我们经常使用的是sun公司的HotSpot,可以通过以下命令获取java虚拟机版本 B:JAVA虚拟机分类: 1.Sun Class VM 2. Exact VM 只是在jdk1.2中Solaris使用,在windows和linux中未被使用 3.HotSpot VM 服务器端和应用端都有涉及 4.KVM 5.JRockit 6.J9 j9是IBM开发的. 7.Dalvik 安卓平台组成部分之一,其不是一个java虚拟机,因为没有实现jav…
2. java内存区域于内存溢出异常 2.1 概述: 对于C/C++而言,内存管理具有最高的权利,既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到结束的维护责任. 对于java而言,则把内存控制的权利交给了java虚拟机,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄露和溢出问题.但是,一旦出现内存泄露和溢出方面的问题,如果不了解虚拟机内存运行过程,排查会很艰难.以下是整个java虚拟机运行的基本结构. 2-1 2.2 运行时数据区域 java虚拟机运…
1.运行时区域 Java虚拟机在执行Java程序的时候会把它管理的内厝划分为若干个不同功能的数据区域,如图所示 首先是程序计数器,程序计数器可以理解为当前程序执行的字节码的行号指示器,计数器中的数据即是下一条将要执行的字节码指令的行号.因为Java虚拟机的多线程是通过轮流切换并分配处理器执行时间的方式来实现的,在任意一个时刻,一个处理器(单核)或是一个核(多核)都只会执行一个线程中的指令,所以,每个线程都拥有自己的程序计数器,还有就是如果执行的是一个Java方法,那么计数器中记录的就是字节码的地…
内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器.Java虚拟机栈.本地方法栈.Java堆.方法区.下面详细阐述各数据区所存储的数据类型. (图片来自:http://blog.csdn.net/ns_code/article/details/17565503) 程序计数器(Program Counter Register) 一块较小的内存空间,它是当前线程所执行的字节码的行号…