自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 问答 (1)
  • 收藏
  • 关注

原创 虚拟机类加载机制

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。(不要把类加载和类加载中的一步“加载”混淆)一、概述在这里插入图片描述类的整个生命周期包括:加载,验证,准备,解析,初始化,使用,卸载7个阶段,其中验证、准备、解析3个部分统称为链接。二、类加载的过程2.1 加载“加载”是“类加载”过...

2019-12-18 20:36:48 208

原创 深入浅出——Strategy策略模式

策略模式有两点主要思想,其一是将变化部分与不变部分分离,其二是面向接口编程而不是面向实现编程,以《Head First设计模式》中的例子,可以比较清晰的阐述清楚以上两点。例如我们我们收到一个客户要求,需要生产各种鸭子(绿头鸭、唐老鸭、可达鸭…),我们自然而然的就想到了,首先设计一个鸭子的超类,其具有一些鸭子共有的属性以及行为,然后让其他的子类对其进行继承,但此时遇到一个问题,并非所有的鸭子都会飞...

2019-12-17 23:10:12 921 1

原创 垃圾收集器

如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。串行单线程堆内存较小,适合个人电脑-XX: +UseSerialGC=Serial+SerialOld新生代使用复制算法,老年代使用标记-整理算法,但工作模式相似只使用一个CPU或一条收集线程去完成垃圾收集工作,必须暂停其他所有的工作线程,直到它收集结束。吞吐量优先多线程堆内存较大,需要多核cp...

2019-11-13 23:30:57 212

原创 从底层理解Java中方法的调用与多态

方法调用与多态在《Java核心技术卷一》一书中,对方法调用有着比较明确的阐述。书中写道,假设要调用x.f(args),隐式参数x声明为类C的一个对象,调用过程的详细描述:编译器查看对象的声明类型和方法名,编译器一一列举所有C类中名为f的方法以及其超类中访问属性为public且名为f的方法编译器查看调用方法提供的参数类型,然后找到最恰当的一个f方法,例如调用x.f(“Hello”),编译器将...

2019-11-12 22:40:12 217

原创 Java类数据域初始化顺序

Java类中数据域初始化顺序在《Java核心技术:卷一》中,对于初始化数据域的初始化次序,有以下说明:所有数据域都被初始化为默认值按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块如果构造器第一行调用了第二个构造器,则执行第二个构造器主体执行这个构造器的主体。对于静态域的初始化过程:在类的第一次加载时,将静态域初始化为默认值所有的静态初始化语句以及静态初始化块都依照类定...

2019-11-12 21:08:16 271

原创 图解JVM方法执行流程

图解方法执行流程以Demo类中的main方法为例,讲解字节码在虚拟机运行的过程public class Demo{ public static void main(String[] args) { int a=10; int b=Short.MAX_VALUE+1; int c=a+b; System.out.printl...

2019-11-12 19:31:23 1424 2

原创 JVM中的五种引用

JVM中的五种引用强引用:只有所有的GC Roots对象都不通过强引用引用该对象,该对象才能被垃圾回收软引用:软引用需要一个由一个GC Root对象指向一个专门的软引用对象(SoftReference对象),然后再由软引用对象指出。仅有软引用引用该对象时,在垃圾回收后,内存仍不足时会再次触发垃圾回收,回收如图上所示的A2对象;而软引用对象自身则配合引用队列释放自己。软引用的应用场景:...

2019-11-10 20:30:20 569 1

原创 探秘JVM串池

StringTableString s1=“a”;String s2=“b”;String s3=“a”+”b”;String s4=s1+s2;String s5=“ab”;String s6=s4.intern();//问System.out.println(s3==s4);System,.out.println(s3==s5);System.out.println(s3...

2019-11-10 19:41:59 598 1

原创 Java虚拟机总体框架

Java虚拟机总体框架Java源代码经过javac编译后变成Java Class字节码文件,然后通过类加载器(ClassLoader)加载到JVM中去运行。类被放置在方法区,实例对象被放置在堆中,而堆里的对象在调用方法的时候又会用到虚拟机栈、程序计数器以及本地方法栈。(具体内容可见我的另一篇笔记https://blog.csdn.net/qq_38557194/article/details...

2019-11-09 22:53:29 310

原创 JVM内存分配策略

内存分配策略Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决两个问题:给对象分配内存以及回收分配给对象的内存。对象的内存分配,就是在堆上分配,对象主要分配在新生代的Eden区上,分配的规则并不是百分之百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中内存的参数的设置。下面介绍几条最普遍的内存分配规则。对象优先在Eden分配大多数情况下,对象在新生代E...

2019-11-08 18:48:40 148

原创 JVM垃圾收集策略

JVM垃圾收集器Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来哪些内存需要回收?垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中,哪些还“存活”,哪些已经死去,这里有两种常用的判断算法,引用计数算法和可达性分析算法。引用计数算法:Python使用了该算法,其原理为给对象中添加一个计数器,每当一个地方引用它时,计...

2019-11-07 23:08:39 224

原创 探秘Java字节码文件

类文件结构实现语言无关性的基础仍然为虚拟机和字节码存储格式,Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联。Class文件的结构Class文件是一组以8位字节为基础单位的二进制流,各个项目严格按照顺序排列,其中没有分隔符。任何一个Class文件都对应着唯一一个类或接口的定义信息。Class文件中只有两种数据类型:无符号数和表。无...

2019-11-05 21:21:31 511

原创 Leetcode337 打家劫舍III

原题:https://leetcode-cn.com/problems/house-robber-iii/submissions/在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连...

2019-11-03 22:40:47 107

原创 Java内存区域划分

Java内存区域Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来运行数据区域程序计数器:当前线程所执行的字节码的行号指示器,为线程私有,程序计数器是唯一一个不会出现 OutOfMemoryError 的内存区域Java虚拟机栈:线程私有,生命周期与线程相同。每个java方法运行时都会创建一个栈帧,每个栈帧中会用于存放局部变...

2019-11-03 21:11:28 233

原创 Java核心技术笔记——集合

集合Java的集合类也是将接口与实现分离,比如有一个队列接口,都有入队和出队的操作,但是具体的实现可以是链表也可以是数组Java集合框架Collection框架:在Java类库中,集合类的基本接口是Collection接口,有两个基本方法,其中实现了iterator方法便可以返回一个Iterator接口对象,利用该对象可以实现for each遍历public interface Col...

2019-11-03 14:18:02 109

原创 Java核心技术笔记——接口、lambda表达式与内部类

接口、lambda表达式与内部类接口接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义接口中的所有方法自动地属于public,不能含有实例域Arrays类中的sort方法承诺对对象数组进行排序,但是对象所属的类必须实现了Comparable接口public inerface Comparable{ int compareTo(Object other...

2019-11-03 14:06:46 144

原创 Java核心技术笔记——对象与类

对象与类类之间的关系依赖(uses-a)聚合(has-a)继承(is-a)类的一些基本概念类中数据称为实例域更改器方法和访问器方法:更改器方法会修改调用者,访问器方法则不会源文件中,文件名必须与public类的名字相匹配。在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类。java编译器内置了make工具将实例域设为私有,然后为其添加一个公有的域访问器,一个公有...

2019-11-03 14:04:52 111

原创 Java核心技术笔记——Java的基本程序设计结构

java的基本程序设计结构常量用final来表示这个变量只能被赋值一次,常量名一般全部使用大写字母。如果希望某个常量可以在一个类的多个方法中使用,使用static final设置一个类常量如果一个常量被声明为public则其他类的方法也可以使用字符串子串:substring不包含末尾数字String greeting="Hello!";String s=greeting.s...

2019-11-03 14:03:40 125

原创 matlab封装DLL动态链接库 再用VS2010调用(matlab VS混合编程)

一,设置操作系统的环境变量。系统变量增加D:\R2011a\bin\win32;D:\R2011a\bin和E:\Microsoft Visual Studio 10.0\VC\bin,这个分别是我的机器上matlab和VS安装目录下的路径。系统变量设置完毕后需要重新启动计算机方能生效。二,设置matlab的编译环境在matlab中输入命令mex -setup,选择Microsof...

2018-04-13 10:02:47 6168

原创 main传地址参数问题

编译原理TINY编译器,代码如下。argc 是 argument count的缩写,表示传入main函数的参数个数;argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc-1个需要传参,右击项目—>属性—>配置属性...

2018-04-12 11:21:23 401

原创 《Qt学习之路2》学习笔记(8)

1.Qt 使用QAction类作为动作使用一个QAction类,抽象出公共的动作2.QAction包含了图标、菜单文字、快捷键、状态栏文字、浮动帮助等信息。当把一个QAction对象添加到程序中时,Qt 自己选择使用哪个属性来显示,无需我们关心// !!! Qt 5// ========== mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW...

2018-04-10 16:59:39 121

空空如也

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

TA关注的人

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