随笔分类 - JVM
摘要:在Java多线程环境中,为保证所有线程的执行能按照一定的规则执行,JVM实现了一个线程调度器,它定义了线程调度的策略,对于CPU运算的分配都进行了规定,按照这些特定的机制为多个线程分配CPU的使用权。这小节关注线程如何进行调度,了解了java线程调度模式有助于后面并发框架的深入探讨。 一般线程调度模
阅读全文
摘要:GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用。即:从gcroot开始,把所有可以搜索得到的对象标记为存活对象。 GC机制 要准确理解Java的垃圾回收机制,就要从:“什
阅读全文
摘要:1、概述 在Java中,内存分为两种,一种是栈内存,另一种就是堆内存。 2、堆内存 1 2 堆内存是是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,用于存放。 1 2 第一点:堆其实可以类似的看做是管道,或
阅读全文
摘要:虚拟机性能监控工具:JDK命令行工具 在JDK的bin目录中,有我们熟知的Java语言编程编译器命令“javac”以及执行命令“java”,此外里面还有一堆比较少用的命令,而其中有许多是JDK自带的性能监控和故障处理命令,下面逐一介绍,bin目录如下图所示: 名称 主要作用 jps JVM Proc
阅读全文
摘要:一、背景 1.1 永久代(PermGen)在哪里? 根据,hotspot jvm结构如下(虚拟机栈和本地方法栈合一起了): 上图引自网络,但有个问题:方法区和heap堆都是线程共享的内存区域。 关于方法区和永久代: 在HotSpot JVM中,这次讨论的永久代,就是上图的方法区(JVM规范中称为方法
阅读全文
摘要:说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当List还在胚胎时期时,人们就在思考GC需要完成的3件事情: 哪些内存需
阅读全文
摘要:1、运行时栈帧结构 在Java虚拟机内存结构中介绍了虚拟机栈,也说明了栈帧是虚拟机栈的构成元素,但没有具体介绍栈帧的细节。栈帧是虚拟机栈的构成元素,每一个栈帧对应一个方法调用,入栈和出栈操作就相当于方法的调用与退出。每一个栈帧都包含了局部变量表、操作数栈、动态连接、方法返回地址和其它的附加信息。在介
阅读全文
摘要:一、问题 请在Eclipse中新建如下类,并运行它: 你能猜到它的运行如果吗? 不错,就是如下这个样子! 错误: 在类 java.lang.Long 中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)否则 JavaFX
阅读全文
摘要:概述 在Java语言里面,类的加载、连接、初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。 类加载时机 类从被加载到虚拟机内存中开始,到卸载
阅读全文
摘要:Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。 基本数据类型 1、除了long和double类型外,每个变量都占局部变量区中的一个变量槽(slot),而long及doubl
阅读全文
摘要:Class文件是一组以8位字节为基础单位的二进制流,所以我们有时候也称之为字节文件。各个数据项是字节按照类文件组成规范严格按顺序紧凑地排列在Class文件之中,中间是没有任何分隔符的,所以大家把Class文件打开来看就像看机器码一样一堆十六进制字符,如下图所示: 按照Java虚拟机规范所说,Clas
阅读全文
摘要:JVM运行时数据区域图: 程序计数器 程序计数器(program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。 Java虚拟机栈 虚拟机栈描述
阅读全文

浙公网安备 33010602011771号