在前几篇博客中,我们探究了.class文件的本质,类的加载机制,JVM运行时的栈帧结构以及字节码执行时对应操作数栈以及局部变量表的变化。 如果你已经掌握了这些东西,你现在应该会有一种感觉,给你一个Java代码,你可以从JVM的层面上将这个类从javac编译成.class文件开始,到使用java命令运行这个Class文件,然后这个类的运行过程是怎么样的,你可以解释清楚。 但是等等,好像少了点什么?我们好像没有谈及JVM中对象的创建?也就是说,在Java代码中,你new一个对象,这时候都发生哪些事情,这就是今天我所要说的。 对象创建的时机 我们先不说对象创建的具体过程是啥,我们先来谈一谈什么时候JVM会创建对象。 以下5种方式,会使JVM帮助你创建一个对象: 使用new关键字创建对象 Student student = new Student(); 使用Class类的newInstance方法(反射机制) newInstance方法只能调用无参的构造器创建对象。 继续阅读 >>


董恒毅 17/12/12 11:40:51
这篇博客主要带你认识何谓静态链接、动态链接。并且会讲述JVM中分派的知识,让你对Java中的多态实现机制有一个浅显的认识。 前言 从接触Java语言的第一天起,往后,我相信你一定听过什么动态链接啊,动态扩展啊,静态链接啊,它和C++相比有哪些优缺点啊… …如果你只是听说而没有探究过他们,也许你现在仍没办法说出Java语言到底有什么优缺点。 我们知道class文件是源代码经过编译后得到的字节码,如果学过编译原理会知道,这个仅仅完成了一半的工作(词法分析、语法分析、语义分析、中间代码生成),接下来就是实际的运行了。而Java选择的是动态链接的方式,即用到某个类再加载进内存,而不是像C++那样使用静态链接:将所有类加载,不论是否使用到。当然了,孰优孰劣不好判断。静态链接优点在速度,动态链接优点在灵活。 静态链接 那么,首先,咱们先来聊聊静态链接。 如上面的概念所述,在C/C++中静态链接就是在编译期将所有类加载并找到他们的直接引用,不论是否使用到。而在Java中我们知道,编译Jav 继续阅读 >>


董恒毅 17/12/09 22:46:52
本篇博客信息量依旧庞大! 前言 在讨论本文的主题之前,我们先来思考一下:什么是虚拟机字节码执行引擎?它有什么作用? 在说明这个问题之前,我们先来想想之前我们已经学习过的class文件结构与类加载机制。 当一个Java程序写好之后,我们使用javac命令对其进行编译,产生的虚拟机字节码存储在class文件中,我在JVM–解析Class类文件结构一文中详细分析了class文件中字节码的存储格式及其组成。然后我们紧接着说明了JVM–详解类加载机制,你应该了解到—类加载机制就是将class文件中的字节码加载进JVM的方法区并生成这个类的class对象的过程(再次强调不是生成这个类的实例化对象的过程)。 虚拟机字节码执行引擎 那么,现在我们言归正传,解决上面的两个问题: 假设我们现在有这样一个类: public class Demo { public static void main(String[] args) { System.out.println 继续阅读 >>


董恒毅 17/12/08 23:55:35
由于系统重起了,当然本地的仓储和SSH生成的密钥就都没有了,这时如何在本地pull自己在GitHub上的仓储呢? 由于系统重装,~/.ssh文件肯定就没有了,这时候就需要重新生成公钥和密钥。 ssh-keygen -t rsa -C “your_email@example.com” Enter file in which to save the key (/home/XXX/.ssh/id_rsa): Created directory ‘/home/XXX/.ssh’. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/XXX/.ssh/id_rsa. Your public key has been saved in /home/XXX/.ssh/id_rsa.pub. The key fing 继续阅读 >>


董恒毅 17/12/07 00:01:23
原文链接:聊一聊 cookie 作者:championhengyi 发表于 2017/12/04 17:45:03 原文链接 http://blog.csdn.net/championhengyi/article/details/78712027 阅读:104 继续阅读 >>


董恒毅 17/12/04 17:45:03
原文链接:彻底理解js中this的指向 作者:championhengyi 发表于 2017/12/03 11:56:38 原文链接 https://blog.csdn.net/championhengyi/article/details/78700726 阅读:107 继续阅读 >>


董恒毅 17/12/03 11:56:38
原文链接:深入理解javascript中的立即执行函数(function(){…})() 作者:championhengyi 发表于 2017/12/01 22:20:09 原文链接 https://blog.csdn.net/championhengyi/article/details/78691672 阅读:123 继续阅读 >>


董恒毅 17/12/01 22:20:09
这篇博客—干货很多!!! Java虚拟机的体系结构 前面我们探讨了Class文件的结构,如果你还没有学习,将不利于这部分知识的吸收与掌握,所以请移步:JVM–Class类文件结构(一) 学习一个东西之前,我们务必要知道,这东西大概是干什么的,有什么作用。 为了更清楚的阐释类加载机制到底是干什么的,我先将JVM的结构图贴给大家: 如上图,我们要学的类加载机制就是要搞清楚类加载器是如何找到指定的Class文件以及怎样将Class文件装载进内存,以便执行引擎执行Class文件中存在的数据和指令,从而使你的Java程序跑起来。 上面的黑体字就是这玩意大概是干啥的,至于学习它有什么作用,有助于你了解Java源代码是怎么从一个普通的文件变成一个可以正在运行的程序这其中的过程。而且,学习了这部分知识,你再回过头看反射机制,会有一种醍醐灌顶的感觉。 类的生命周期 先来看一下类的生命周期吧: 结合上图,类加载机制主要学习加载、验证、准备、解析、初识化这些过程,然后就是需要了解真正 继续阅读 >>


董恒毅 17/12/01 15:56:09
耐着性子,花了半个下午看了这篇博客,觉得总结的实在不错,解决了我很大的疑惑,讲的很全面而且容易理解,因此决定将这篇博客的链接放给大家,也好以后复习的时候可以方便的找到:JAVA虚拟机体系结构 看了这篇博客后印象比较深刻的几个点: JVM的方法区中存储的都是哪些数据。 清晰的解释了什么是常量池解析。 关于Class这个对象的一点知识。 看了这篇博客,再结合之前关于.class文件的那点知识,相信你对类、对象在JVM中是怎么一回事应该有了一个比较深刻的理解。 作者:championhengyi 发表于2017/11/27 21:54:35 原文链接 阅读:34 评论:0 查看评论 继续阅读 >>


董恒毅 17/11/27 21:54:35
什么是主键、外键 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以学号和课程号的属性组是一个主键 成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键。 同理:成绩表中的课程号是课程表的外键。 定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 继续阅读 >>


董恒毅 17/11/18 20:24:39