Java转行之路—《深入理解JAVA虚拟机总结》(一)

Java转行之路—《深入理解JAVA虚拟机总结》(一)

Java虚拟机运行时数据区

程序计数器(Program Counter Register)

(1)Little Space
(2)当前所执行字节码的行号指示器
(3)每条线程都有独立的程序计数器——线程切换后回到正确的位置
ps.多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的

虚拟机栈(Virtual Machine Stacks)

(1) 线程私有,生命周期与线程相同
(2) 原理图
(3) 线程请求栈的深度大于虚拟机所允许的深度,抛出StackOverflowError;

       虚拟机栈动态扩展时无法申请到足够的内存,抛出OutOfMemoryError。

本地方法栈(Native Method Stack)

本地方法栈与虚拟机栈作用相似,区别:虚拟机栈为虚拟机执行Java
方法服务,本地方法栈则为Native方法服务。

Java堆(Heap)

(1)最大的一块内存;
(2)被所有线程共享,在虚拟机启动时创建;
(3)唯一目的:存放对象实例;
(4)垃圾收集器管理的主要区域,因此也被称为GC堆。由于GC回收机制采用分代收集算法,所以堆还可以分为新生代和老年代; 从内存分配角度看,堆可划分出多个线程私有的分配缓冲区。
(5)不需要连续的内存,可以选择固定大小也可以通过-Xmx和-Xms控制虚拟机扩展,堆无法再扩展时,抛出OutOfMemoryError。

方法区

用于储存已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
不需要连续的内存,可以选择固定大小也可以通过-Xmx和-Xms控制虚拟机扩展,可以选择不实现垃圾收集。这区域的内存回收目标主要是针对常量池的回收和对象类型的卸载。

运行时常量池

(1)Runtime Constant Pool是方法区的一部分。

  • Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,发生于类加载后进入方法区的运行时。
  • 运行时常量池vsClass文件常量池:虚拟机规范对于运行时常量池无任何细节要求,除了保存Class文件中描述的符号引用外,还会把翻译出来的直接引用也储存在运行时常量池中;运行时常量池具备动态性,String.intern()方法可以将运行时新的常量放入池中。

直接内存

不是虚拟机运行时数据取的一部分,但这部分内存也被频繁使用,也可能导致OutOfMemoryError。
NIO(基于通道与缓冲区的I/O方式)可以使用Native函数库直接分配堆外内存,然后通过堆中DirectByteBuffer对象作为这块内存的引用进行操作。

时间: 2024-09-20 06:33:14

Java转行之路—《深入理解JAVA虚拟机总结》(一)的相关文章

Java基础之010-深入理解Java的String类

Java基础之010-深入理解Java的String类                                        老帅        1. 首先String不属于8种基本数据类型,String是一个类.  因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性.  2. new String()和new String("")都是申明一个新的空字符串,是空串不是null:  3. String对象实例化   

深入理解java中i++和++i的区别_java

今天简单谈谈关于java的一个误区,相信很多刚开始学习java的朋友都会遇到这个问题,虽然问题很简单,但是经常容易搞混,说说java的i++和++i的区别. 先看一下代码: <span style="font-size:18px;">public class test { public static void main(String[] args) { int i = 0; for (int j = 0; j < 10; j++) { i=i++; } System.

深入理解Java中的克隆_java

前言 Java克隆(Clone)是Java语言的特性之一,但在实际中应用比较少见.但有时候用克隆会更方便更有效率. 对于克隆(Clone),Java有一些限制:       1.被克隆的类必须自己实现Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制.Cloneable 接口实际上是个标识接口,没有任何接口方法.       2.实现Cloneable接口的类应该使用公共方法重写 Object.clone(它是受保护的).某个对象实现了此接口就

深入理解java三种工厂模式_java

适用场合: 7.3 工厂模式的适用场合 创建新对象最简单的办法是使用new关键字和具体类.只有在某些场合下,创建和维护对象工厂所带来的额外复杂性才是物有所值.本节概括了这些场合. 7.3.1 动态实现 如果需要像前面自行车的例子一样,创建一些用不同方式实现同一接口的对象,那么可以使用一个工厂方法或简单工厂对象来简化选择实现的过程.这种选择可以是明确进行的也可以是隐含的.前者如自行车那个例子,顾客可以选择需要的自行车型号:而下一节所讲的XHR工厂那个例子则属于后者,该例中所返回的连接对象的类型取决

java内存释放的深入理解

(问题一:什么叫垃圾回收机制?) 垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能.当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用,以免造成内存泄露. (问题二:java的垃圾回收有什么特点?) JAVA语言不允许程序员直接控制内存空间的使用.内存空间的分配和回收都是由JRE负责在后台自动进行的,尤其是无用内存空间的回收操作 (garbagecollection,也称垃圾回收),只能由运行环境提供的一个

java-《深入理解Java虚拟机》有关methodHandle的代码问题?

问题描述 <深入理解Java虚拟机>有关methodHandle的代码问题? 以下代码书上说是输出"i am grandfather",但远行实际输出为"i am father" class Test { class GrandFather { void thinking() { System.out.println("i am grandfather"); } } class Father extends GrandFather {

《深入理解Java虚拟机》读书笔记

背景 并发处理的广泛应用是使得Amdahl定律代替摩尔定律成为计算机性能发展的源动力的根本原因,也是人类压榨计算机运算能力最有力的武器 Amdahl 定律通过系统中的并行化与串行化的比重来描述多处理器系统能获得的运算加速能力. 摩尔定律则用于描述处理器晶体管数量与运行效率之间的发展关系. 这两个定律的更替代表了近年来硬件发展从追求处理器频率到追求多核心并行处理的发展过程. 高效并发 物理机上的并发解决方案 在当前这个多核处理器时代,"让计算机并发执行若干个运算任务"和"更充分

理解Java虚拟机体系结构(转)

1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Java虚拟机,它号称的"一次编译,到处运行"才能有所保障. 1.1 Java程序执行流程 Java程序的执行依赖于编译环境和运行环境.源码代码转变成可执行的机器代码,由下面的流程完成: Java技术的核心就是Java虚拟机,因为所有的Java程序都在虚拟机上运行.Java程序的运行需要Java

深入理解Java虚拟机:JVM高级特性与最佳实践

目 录 [ - ] <深入理解Java虚拟机:JVM高级特性与最佳实践>前言 <深入理解Java虚拟机:JVM高级特性与最佳实践>内容特色 <深入理解Java虚拟机:JVM高级特性与最佳实践>目录 第1章 走近Java 1.1 概述 1.2 Java技术体系 1.3 Java发展史 1.4 展望Java技术的未来 1.4.1 模块化 1.4.2 混合语言 1.4.3 多核并行 1.4.4 进一步丰富语法 1.4.5 64位虚拟机 1.5 实战:自己编译JDK 1.5.1