自定义博客皮肤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)
  • 收藏
  • 关注

原创 深入理解JVM(三)--------------------------虚拟机类加载机制

写这篇博客的目的是为了对已学过的知识做一下笔记总结,如果想要从这篇文章中得到一些与众不同的理解,那么可能要让各位失望了。类从被加载进虚拟机内存中开始,到卸载出内存为止,他的整个生命周期包括:加载----验证----准备----解析-----初始化----使用-----卸载1、加载阶段加载阶段有三件事情:1)通过一个类的全限定名来获取定义此类的二进制字节流2)将这个字节流...

2019-03-26 00:36:10 223

原创 Java 接口与抽象类的区别

接口 interface(1)接口中可以不声明任何方法和成员变量。(2)接口中成员变量默认被修饰为public static final常量(3)接口中的方法默认被修饰为public abstract类型(默认为公开抽象的方法)(4)接口修饰符默认为public(5)接口没有构造方法抽象类(1)抽象类可以不包含抽象方法,但有抽象方法的类一定要声明为抽象类(2)抽象类...

2019-03-20 14:38:39 128

原创 JVM(五)----------------线程安全之锁机制

锁机制是JAVA虚拟机实现线程安全的方法之一。在这里介绍几个锁优化锁优化技术(HotSpot虚拟机而言)包括适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁等。这些技术都是为了在线程之间更高效地共享数据以及解决竞争问题,从而提高程序效率。1.自旋锁与自适应自旋为什么选择自旋去消耗CPU而不直接等待?互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成...

2018-09-21 20:48:12 159

原创 JVM(五)----------------线程安全之同步机制

我觉得对知识的理解不仅是你看懂了书本的内容,还要在面试时能将你的理解完整地表述出来。我看了线程安全的知识,然后自问自己能否将它表述,结果失望地发现我连意思都表述不清。为此写这篇博客什么是线程安全:我看过对线程安全的一个通俗的解释是:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一...

2018-09-21 10:18:42 160

原创 JVM(五)----------------并发的 三个特性和先行发生原则

 Java内存模型是围绕着并发过程中如何处理原子性、可见性、有序性这三个特征来建立的,下面是这三个特性的实现原理:1.原子性(Atomicity)   由Java内存模型来直接保证的原子性变量操作包括read、load、use、assign、store和write六个,大致可以认为基础数据类型的访问和读写是具备原子性的。如果应用场景需要一个更大范围的原子性保证,Java内存模型还提供了lock...

2018-09-15 19:47:21 433

原创 JVM(五)----------------volatile关键字

volatile关键字有两个语义,第一个是保证可见性,第二个是禁止指令重排序。volatile的可见性:(1)synchronized与volatile的区别:volatile是线程同步的轻量级实现,只用于修饰变量,synchronized用于修饰方法和语句块;多线程访问volatile不会发生阻塞,但是synchronized会发生阻塞;volatile保证数据的可见性,...

2018-09-15 08:55:24 140

转载 进程(二)-----------------进程的同步与通信和线程的同步与通信两两之间的区别

因为一直对操作系统的进程同步通信有所混淆,所有在网上看了几篇博客。下面这篇博客属于转载,转载自 https://blog.csdn.net/jfkidear/article/details/52561976------------------------------------------------------分割线--------------------------------------...

2018-09-13 10:05:02 317

原创 JVM(五)-----------------Java内存模型

        Java内存模型(Java Memory Model)本身是一个抽象概念,并不真实存在,它描述的是一种规范,Java内存模型的主要目标是通过这组规范去定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样底层细节。此处的变量与Java编程时所说的变量不一样,指包括了实例字段、静态字段和构成数组对象的元素(实例字段,静态字段和构成数组对象的元素主要存储于方法...

2018-09-12 16:31:47 123

原创 并发(二)--------------死锁

并发处理中通常需要解决的两个问题:死锁和饥饿产生死锁的原因主要是系统资源不足。 进程运行推进的顺序不合适。 资源分配不当等。死锁的条件 死锁有三个必要条件:·1.互斥。一次只有一个进程可以使用一个资源。2.·占有且等待。当一个进程等待其他进程时,继续占有已经分配的资源。·3.不可抢占。不能强行抢占进程已占有的资源。前三个条件都只是死锁存在的必要条件,但不是充分...

2018-09-12 13:01:17 130

原创 进程(二)------------进程与线程

线程的优点:·(1)在一个已有进程中创建一个新线程比创建一个全新进程所需的时间少很多。·(2)终止一个线程比终止一个进程花费的时间少。·(3)同一进程内线程间切换比进程间切换花费的时间少。·(4)线程提高了不同的执行程序间通信的效率。用户级线程有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。·优点:0线程切换不需要内核态特权;0调度可以是...

2018-09-12 10:34:04 784

原创 进程(一)----------进程描述和控制

一.进程和进程控制块·进程定义0一个正在执行中的程序。0一个正在计算机上执行的程序实例。0能分配给处理器并由处理器执行的实体。0一个具有以下特征的活动单元:一组指令序列的执行、一个当前状态和相关的系统资源集。可以把进程视为由一组元素组成的实体,进程的两个基本元素是程序代码(program code,可能被执行相同程序的其他进程共享)和代码相关联的数据集(set of d...

2018-09-11 20:53:38 490

原创 贝壳秋招笔试

这是楼主参加的笔试,主要是为了提醒自己的短处,所以内容不会很详尽选择题:1.数据库的自然连接2.MySQL语法,drop database删除表记录和表结构?3.括号匹配4.有一个容量size为50的循环队列,头指针front=40(指向队头元素),尾指针rear=10(指向队尾下一个位置),问该循环队列有几个元素5.前缀表达式和后缀表达式6.KMP算法7.利用回溯...

2018-09-09 16:19:53 943 2

原创 虎牙秋招笔试选择题

刚参加虎牙笔试,编程题简单,选择题对我这种菜鸡困难,将选择题记录一下提醒自己1.哪个http状态码表示永久重定向2.哪些属于redis持久化模式3.为数据表创建索引的目的4.unique唯一索引的作用5.数据库修改列的指令是什么6.MySQL在RR事务隔离级别下,更新条件为索引字段,并非唯一索引(包括主键索引)时,会通过Next-key lock解决幻读问题。7.spr...

2018-09-09 12:02:15 2044

原创 二叉树前序,中序,后序遍历的非递归实现

两天前遇到一道二叉树非递归前序遍历的题目,结果没做出来,很受打击,在这里记录一下。题目:有一个String数组,存储了一棵二叉树,现在请以非递归实现二叉树的前序遍历。数组直接给出:String[] a={"A","B","J","F","C","#","M"}; 解:首先我们知道String数组是棵二叉树,它在数组中是以层次遍历的形式表示的。由此可知

2018-09-09 11:19:05 213

原创 深入理解JVM(三)------再谈引用与finalize()方法

Java对象的引用无论是通过引用算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判断对象是否存活都与引用有关。垃圾回收的机制主要是看对象是否有引用指向该对象在Java中类型可分为两大类:值类型与引用类型。值类型就是基本数据类型(如int ,double 等),而引用类型,是指除了基本的变量类型之外的所有类型(如通过 class 定义的类型)。所有的类型在内存中都会分...

2018-08-26 12:08:38 528

原创 深入理解JVM(三)------垃圾收集器与内存分配策略(1)

在了解垃圾收集之前,我们得先知道哪些内存需要回收,哪些不需要JVM运行时数据区如上图,其中,程序计数器,虚拟机栈,本地方法栈3个区域随线程而生,随线程而灭,而JAVA堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才能知道创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的就是这部分内存。...

2018-08-26 10:40:28 139

原创 九大经典排序算法简单概要

时间复杂度为O(n^2)的算法:插入排序:插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。可以想到,该算...

2018-08-24 23:35:07 164

转载 虚拟机栈的两种异常

在Java虚拟机规范中,对虚拟机栈规定了两种异常状况:StackOverflowError和OutOfMemoryError。这两种异常的发生场景与具体区别在下面这篇博文链接讲的不错,粘贴过来:http://www.cnblogs.com/manayi/p/9293302.html说一下本地方法栈,本地方法栈的功能和特点类似于虚拟机栈,均具有线程隔离的特点以及都能抛出StackOverfl...

2018-08-18 10:54:24 777

转载 本地方法栈与Native方法

刚开始看《深入理解Java虚拟机》,在里面看到一句话,不是很理解:本地方法栈与虚拟机栈所发挥的作用时非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的的Native方法服务。在这里转载一篇帖子介绍什么是Native方法。http://blog.csdn.net/wike163/article/details/6635321-...

2018-08-18 10:07:38 2295

原创 阿里云Linux Ubuntu 16.04/Linux Ubuntu 14.04下编译OpenJDK8

最近在看深入理解虚拟机,涉及到要编译openjdk8,在下选择是阿里云Linux Ubuntu 16.04.搭建环境。如何下载OpenJDK8的源码以及安装BootstrapJDK1.7就不在这里讲了。这里主要将编译过程及配置。首先得声明,博主在Linux Ubuntu 16.04下编译open JDK1.8,当配置到最后一步执行./java -version时会报错,错误如下:这个错误不...

2018-08-16 18:42:42 422

原创 阿里云Ubuntu16.04下 安装openjdk-7

刚开始看深入理解虚拟机这本书,需要搭建环境编译openjdk,楼主是选择在阿里云上搭建。首先是将JDK8的源码放在了阿里云上,然后还要用到Bootstrap JDK1.7,于是又将Linux自带的jdk1.8卸载重新安装openjdk1.7. 在网上看到说,Ubuntu16.04已经将openjdk7的源移除了,需要自己添加源,要用到下面三行命令 1.sudo add-apt-rep...

2018-08-16 10:54:20 658

空空如也

空空如也

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

TA关注的人

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