- 博客(7)
- 收藏
- 关注
原创 java垃圾回收机制
Java内存结构分为:程序计数器、虚拟机栈、本地方法栈、堆、方法区,这个5个区域。程序计数器、虚拟机栈和本地方法栈随着线程而生,随着线程而灭。所以Java垃圾回收主要针对的是堆和方法区这两个内存,在jdk8版本后方法区(永久代)又被取消,所以Java垃圾回收主要针对堆内存。程序在运行时,创建的所有的对象都在堆分配内存,所以Java回收的主要的就是无用的死掉的Java对象。那什么是无用的死掉的Java对象呢。Java是通过可达性分析算法判定对象是否存活,下面来介绍一下可达性分析算法:把一些列对象作为根对象
2020-12-09 23:39:06 1351
原创 排序算法——java实现
1.插入排序算法分析:首先插入排序利用了这样的一个事实:相邻两个数都是顺序的,没有逆序状态,那么这个整体就处于排过序的状态。如下表:在第p趟,我们将位置p上的元素向左移动,直到它和它左边元素是顺序的为止。原始数组34864513221移动的位置p=1趟之后834645132211p=2趟之后834645132210p=3趟之后834516432211p=4趟之后832346451213p=5趟
2020-08-28 16:31:17 95
原创 源码详解java自动装箱拆箱
装箱和拆箱是针对基本数据类型和引用数据类型,在java中,8种基本数据类型每一种都提供了一个包装类,例如int类型的包装类是Integer。包装类也包含了不少的静态实用的方法。我们来看一下Integer的部分源码public final class Integer extends Number implements Comparable<Integer> { //构造器 public Integer(int value) { this.value = value;
2020-08-05 21:45:30 195
原创 虚拟机jvm类加载机制
了解了Class文件结构和Class文件中存储的各类信息后,这些信息都是静态的存储在class文件中,class文件需要被加载到虚拟机中才能被运行和使用。那么虚拟机是如何加载的?Class文件中静态信息被加载后发生了什么变化,下文来探讨一下虚拟机jvm类加载机制1、什么是类加载机制?2、什么时候开始类加载?3、类加载的过程?3.1 加载3.2 验证3.2.1 为什么要验证3.2.2.验证什么3.3 准备3.4 解析3.5 初始化1
2020-06-30 20:14:28 197
原创 class文件结构详细解析
之前一直好奇java文件经过编译后生成的class文件,到底存储了什么信息?是如何被jvm识别并执行的?我们可不可以通过外部力量修改class文件内容,以致可以修改程序的运行?于是我带着种种疑问,开始研究class文件。参考《深入理解Java虚拟机》(周志鹏著)在深入分析class文件之前,我们先来探讨class文件存在原因:无关性的基石:Java刚开始诞生时的宣传口号“一次编写,到处运行”,开发者早就料想到,各种不用的硬件体系结构、各种不同的操作系统将来肯定会长期并存发展,实现跨平台的基础就是实现在操
2020-06-24 16:16:56 2144 5
原创 虚拟机jvm:java对象的创建过程
java是一门面向对象的编程语言,java程序运行时无时无刻都有对象被创建。在语言层面上,创建对象仅仅是一个new关键字而已,而在虚拟机中对象的创建过程又是怎样呢?注意:这里讨论的对象仅限于普通的java对象,不包括数组和Class对象创建对象分以下几步:1.验证对象类是否已经加载 当java虚拟机遇到一条字节码new指令时,首先检查这个指令的参数是否能在常量池中定位一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有先加载该类。2.分配堆内存 类加.
2020-06-12 14:43:41 308
原创 虚拟机栈(VM Stack)
虚拟机栈(VM Stack)1.是线程私有的区域2.和pc Register一样,跟线程生命周期相同,每个线程分配一个独立的vm stack3.没执行一个方法都同步创建一个该方法的stack frame(栈帧),方法执行完毕的过程,就对应着一个栈帧在VM Stack中从入栈道出栈的过程。4.每一个栈帧stack frame包含局部变量表、操作数栈、方法返回值、动态链接5.局部变量表包含:基本数据类型、引用、returnaddress类型。是一组变量值存储空间,用于存放方法参数和方法内部定义的局
2020-06-10 16:10:42 1010
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人