自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 Java内存模型中堆和栈的区别

1.先来看看内存分配策略静态存储不允许有可变数据结构的存在,也不允许嵌套或递归结构出现,会导致编译程序无法计算准确的存储空间2.再看看他们之间的联系栈中存放的是堆中目标的首地址,堆中存放对象实例和数据3.区别...

2022-03-07 18:44:45 284

原创 Java内存模型

谈到Java内存模型,指的就是运行时数据区,按照线程是否共享可按图示划分1.程序计数器:可以看作当前线程所执行的字节码的行号指示器,它是逻辑计数器,不是物理的,通过改变计数器的值来选取下一条要执行的指令,每个线程有独立的计数器,只为java方法计数,不发生内存泄漏2.虚拟机栈:描述的是java方法执行时的线程模型,包含了单个线程每个方法执行的栈帧,栈帧存储了局部变量表,操作数栈,动态链接,方法出口等信息,每一个方法被调用直至执行完毕的过程,对应着一个栈帧在虚拟机栈中从入栈到出栈的过程①局部变

2022-03-07 18:38:33 350

原创 类的加载(装载)过程

1.首先谈谈类的加载方式①隐式加载 :new 隐式调用类加载器加载对应的类到JVM中,支持带参数的构造器②显式加载:通过 loadClass()或forName()方法获取到class对象后,调用class对象的newinstacne()方法来生成对象的实例,该方法不支持传入参数,需要用反射调用构造器的newinstance()方法2.类的加载过程:①加载:classLoader通过loadClass()方法把字节码文件加载到内存中,并将这些静态数据转换成运行时数据区中的方法区的类型数据

2022-03-07 18:16:28 391

原创 剑指 Offer II 004. 只出现一次的数字

题目:给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。1.使用Map记录每一个数字出现的次数,key代表元素,value代表出现次数再遍历该集合返回value值为1的元素2.遍历Map集合时采用: for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("key= " + entry.getKey() + ...

2022-03-07 12:30:00 118

原创 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数

题目:给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。1.对于任意一个偶数,其二进制中1的个数与右移一位的新数字相同,如10(1010)右移后为5(0101)2.对于任意一个奇数,其其二进制中1的个数等于-1后的偶数+1,如5(0101)-1后为4(0100)+13.>> :按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。符号位不变。class Solution { .

2022-03-07 10:31:41 91

原创 类加载器的双亲委派模型

首先从自定义ClassLoader开始,自底而上检查是否已经加载过该类,若加载过直接返回。若没有则将请求委派给父类加载器Application ClassLoader,每一层都是如此,最终传送到最顶层的Bootstrap ClassLoader中,只有当父加载器反馈自己无法完成这个加载请求时(搜索范围没有找到所需的类),子加载器才会尝试自己完成加载,即自顶而下依次尝试加载类。...

2022-03-06 19:55:23 108

原创 谈谈ClassLoader

1.类从编译到加载的过程编译器将.java文件编译成.class文件ClassLoader将.class文件转换为JVM中的Class<className>对象JVM将Class对象实例化为className对象2.ClassLoader的种类BootStrap Class Loader(启动类加载器):C++编写,加载java自带的核心类,如java.lang包,由JVM内核实现Extension Class Loader(扩展类加载器):用户可见(java编写,代

2022-03-06 18:40:29 405

原创 Java反射机制

在运行状态中,对任何一个类,都知道这个类全部的属性和方法,对任何一个对象,都能调用他的任意属性和方法,这种动态获取信息以及动态调用对象的属性和方法的机制叫做反射

2022-03-06 18:31:23 35

原创 JVM如何加载.class文件

1.JVM简单组成Class Loader:将符合格式的.class(字节码)文件加载到内存Runtime Data Area:JVM内存空间结构模型Ececution Engine:对命令进行解析Native Interface:本地接口,调用不同语言的接口给java用,在native method stack中记录对应的本地方法,在调用该方法时通过execution engine加载对应的本地lib2.加载过程通过Class Loader将符合格式的.class(字节码)文.

2022-03-06 18:27:27 266

原创 Java程序平台无关性的实现

1.为什么可以一次编写,到处运行?编译时:通过javac指令将文件编译成字节码,并存入到相应的.class文件中运行时:JVM对.class文件进行解析,翻译成特定平台下的机器码并运行2.为什么JVM不直接将源码解析成机器码去执行?①若直接将源码解析成机器码,那么每次执行都需要进行各种检查(语法,句法,语义),每次执行时,这些分析的结果都不会保留下来,都要重新编译重新分析,整体性能受到影响。引入中间字节码,保证编译成字节码后多次执行程序而不需要各种校验补全②脱离java的束缚,也..

2022-03-06 18:19:34 138

原创 剑指 Offer II 002. 二进制加法

题目:给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 非空 字符串且只包含数字 1 和 0。提示:每个字符串仅由字符 '0' 或 '1' 组成。 1 <= a.length, b.length <= 10^4 字符串如果不是 "0" ,就都不含前导零。基础巩固:左移运算符m<<n表示把m左移n位。如果左移n位,那么最左边的n位将被丢弃,同时在最右边补上n个0。右移运算符m>>n表示把m右移n位。如果右移n位,则最右边

2022-03-06 14:43:03 225

原创 剑指 Offer II 001. 整数除法

题目:给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 '*'、除号 '/' 以及求余符号 '%' 。注意:整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8以及truncate(-2.7335) = -2 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31,2^31−1]。本题中,如果除法结果溢出,则返回 2^31− 11.最初的想法:以减法代替除法,如5/2可转化为5-2-2,记录减法的次数即...

2022-03-06 11:43:35 148

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除