
Java
Seas.Su
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java虚拟机 之 Class文件结构(魔数、class文件版本、常量池)[ 上 ]
魔数魔数存在于每个Class文件的前4个字节,其实在很多文件中都存在,像jpeg在文件头中都存在魔数,其目的是为了标识文件类型。可知虚拟机区分文件类型并不是通过区分文件扩展名,而是通过魔数。Class文件中的魔数叫做 CAFEBABE 。做一个实验:将Hello.java的后缀名改成class,然后去执行这个class文件,看jvm是否能识别出来。他说与class文件...原创 2019-10-18 00:05:08 · 268 阅读 · 0 评论 -
Java虚拟机 之 Class文件(初识)
说在前面当我们编写好一个.java文件,可以通过命令行用javac的命令来进行编译,javac是jdk自带的一个java的编译工具,像这样:javac Hello.java这是候就会生成一个名为 Hello.class 的文件,这个class文件就是我们现在要关注的。Class文件是为了保证运行的效率和安全性,我们把人所能看懂的代码,翻译成机器所能看懂的字节码。因为我们电...原创 2019-10-12 00:30:58 · 260 阅读 · 0 评论 -
回顾:《深入理解Java虚拟机》前半部分
该篇回顾的前半部分为“走近java”和“自动内存管理机制”部分,具体章节包括1~5章节。1. 原理Java虚拟机的运行时区域(详细链接)运行时区域主要分为两块:线程独占区、线程共享区。线程独占区包括:虚拟机栈、程序计数器、本地方法栈。虚拟机栈中有栈针和局部变量表;程序计数器是Java虚拟机规范中唯一没有被定义OutOfMemoryError的区域;本地方法栈是对于本地...原创 2019-10-10 23:25:15 · 129 阅读 · 0 评论 -
Java虚拟机 之 可视化虚拟机工具 JConsole
1. JConsole内存监控我们先来启动它,在命令行中输入jconsole,然后回车。如果是window电脑,需要装jdk,并且把环境变量配置完毕。打开界面是这样的:可以看到有一个本地进程,也就是JConsole本身的进程,我们试着连接它。这就可以很清楚的看到了JConsole本身内存的信息,线程的信息,类的信息和CPU的信息。一般我们查看内存泄露什么的还是得...原创 2019-10-10 00:04:24 · 370 阅读 · 0 评论 -
Java虚拟机 之 虚拟机工具
1. jps(Java Process Status)故名思义,就是Java进程的状态,就像是把j(java)去掉,就是ps命令,是Linux中查看进程状态的一样。这个就是在命令行中输入jps。现在两个进程,下面的PID685是jps,这个jps本身就是一个java进程;上面的332是eclipse,在活动监视器中可以看到332到底是什么。不过,这个332也叫做本地虚拟...原创 2019-09-30 00:48:29 · 213 阅读 · 0 评论 -
Java 关键字 之 final
概述final关键字算是与static都比较常用的一个关键字,它可以作用于属性、方法、参数和类。声明后,属性 -> 不可变;方法 -> 不可覆盖;形参 -> 不可变;类 -> 不可继承。Final属性(常量)在概述中已经提到,被final关键字修饰的属性是不可变的。在这个例子中我重新对str赋值,然后报了个语法错误,他说str不...原创 2019-08-28 00:18:08 · 179 阅读 · 0 评论 -
Java 关键字 之 static
概述本文围绕静态的变量、方法、代码块、导入展开,内部类先不做介绍,内部类需要单独出一篇去解释。静态方法静态方法最大的特点就是可以不依赖于任何对象就可以被进行访问,所以没有this方法。就像例子中有一个静态方法print2(),它在main方法中可以像普通方法一样直接被调用输出。public class StaticDemo { private static S...原创 2019-08-22 00:30:29 · 293 阅读 · 0 评论 -
Java 中 == , equals 与 hashCode 的区别与联系
引言关于 “==”、equals 和 hashCode,有时候不知道应该用哪个,感觉很多结果都是一样的,甚至乱用。为了以后不至于写错都不知到怎么错的,做一个笔记。简述==:比较两者之间的关系,这个关系在基本数据类型和引用类型变量中的比较有所差异。equals:比较两对象的内容。hashCode:比较对象在hash表中的位置。"=="1. 在基本数据类型(...原创 2019-05-30 01:02:13 · 526 阅读 · 0 评论 -
Java 中 String、StringBuffer 和 StringBuilder 的区别与联系
引言 这题应该是最最经典的一轮必问了,三个亲兄弟问的多了,网上自然而然被整理的也很多。我觉得我自己也应该整理一篇,以加深自己的印象,不至于假如真的有哪一天被问到了,答不出个所以然来。String源码位置(Android O):/libcore/ojluni/src/main/java/java/lang/String.java1. String对象非基本数据类型,存储在堆中;...原创 2019-06-04 22:02:07 · 238 阅读 · 0 评论 -
Java虚拟机 之 虚拟机发展史
在1991年4月,由James Gosling领导的一项以能够在各种消费性电子产品上运行的程序架构为目的的计划开始启动,此项计划的产品为Oak。1995年5月23日,Oak语言改名Java,并在SunWorld大会发布,并提出了“Write Once,Run Anywhere”的口号。从此拉开了Java的序幕……下面将大致介绍几款Java虚拟机,仅作了解,为将来的学习做一些铺垫。...原创 2019-05-15 00:10:33 · 327 阅读 · 1 评论 -
Java虚拟机 之 内存区域
引言上一篇介绍了JVM的发展史,那只是简单的看了JVM,只是知道有这么一个东西,是干什么用的;从这一篇到未来,将一点点慢慢了解它,为的是为以后的学习打下基础和浇灭面试官的狂气 :)。简介下面是我画的一个草图,可以表示出大致的结构图,但不是详细的。那我们平时所说的堆内存和栈内存到底是什么呢?堆内存:就是指的Java堆;栈内存:虚拟机栈中的局部变量表。线程独...原创 2019-05-27 23:25:27 · 230 阅读 · 0 评论 -
Java虚拟机 之 对象
引言本篇主要围绕对象的创建、内存分配、结构、访问定位来说的,对有些规则不理解的可以先查看上篇JVM内存区域。对象的创建过程通过new创建的对象,这个对象就存储在堆中。具体步骤如下:如何给对象分配内存?分配内存有两种方式,分别是指针碰撞和空闲列表。1. 指针碰撞前提是假设内存是规整的,用过的内存放在一边,空闲的内存放在一边,而中间拿一个指针作为分界点指示器...原创 2019-06-02 01:00:25 · 261 阅读 · 0 评论 -
Java虚拟机 之 垃圾收集算法
引言垃圾收集的学习的内容还算不少,放在一篇显得有点多,放两篇里感觉内容又都不算多,内容也无法界定成两部分,很纠结呐。但考虑到读两篇的感觉比一篇好的多,最起码是心理上,那就干脆分成两篇吧。此篇为垃圾收集的第一篇。如何判断对象为垃圾对象?1. 引用计数法引用计数器就是在对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器的值就加1;当引用失效(对象被置为空)的时候...原创 2019-06-08 16:23:48 · 285 阅读 · 0 评论 -
Java虚拟机 之 垃圾回收器
引言此篇是接着上一篇《垃圾回收算法》,也算是GC的下篇。上一篇将 如何判定对象为垃圾的两种算法 和 垃圾回收的四种算法整理完毕了。由于适用的场景不同,垃圾收集器也是多种多样,这一篇准备介绍常用的几种垃圾回收器。Serial 收集器1. 首先,Serial收集器是最基本的、发展最悠久的垃圾收集器。2. 它还是一个单线程垃圾收集器。假如有很多个线程正在运行,当需要垃圾回收的时...原创 2019-06-09 19:00:42 · 258 阅读 · 0 评论 -
Java 构造方法
1. 什么是构造方法public class Son { private String name; private int age; Son(String name,int age){ this.name = name; this.age = age; }}上面的用法并不少见,他就是平时所述的构造函数(方法)。...原创 2019-04-11 20:49:11 · 812 阅读 · 0 评论 -
Java 对象 的 生命周期 与 可达级别
对象的生命周期还好理解,就像是人的一生,从出生、少年、青年、中年、老年、死亡;关于对象,可达性可以理解为根据引用类型的不同而被分成了不同的可达等级。该篇只是对生命周期和可达级别做一个了解,目的是为了在以后读其他有关于JVM、对象、引用等类型的文章更容易理解。该篇与四种引用方式连接较为紧密。生命周期1. 创建阶段分配存储空间;构造对象;从超类对子类、对sta...原创 2019-07-11 00:19:09 · 343 阅读 · 0 评论 -
Java 设计模式 之 单例模式
简述单例模式应该算是最简单的、代码量最少的模式了。单例模式,英译“独生子”,其目的就是保证该对象在此应用中的唯一性。目的在简述中说的对象的唯一性可能还有些模糊,而如果一个对象在应用中使用次数非常多,在每一次的使用中,该对象被一次又一次地创建,这样是完全没有必要的操作,因为既浪费了资源,又增大了系统的开销。单例模式的存在,正是解决这样的困惑。大致流程1. 私有...原创 2019-05-10 00:10:23 · 185 阅读 · 0 评论 -
Java虚拟机 之 内存分配
概述JVM的内存分配的原则有对象优先在Eden分配、大对象直接进入老年代、长期存活的对象进入老年代、空间分配担保、逃逸分析与栈上分配等。下面就一一详细介绍。对象优先在Eden分配关于这项策略,我们首先要先清楚的:Eden是属于新生代内存的一块区域。JVM打印GC详细信息的参数:-verbose:gc -XX:+PrintGCDetails选用...原创 2019-07-25 00:02:28 · 345 阅读 · 0 评论 -
Java 中的 强引用、软引用、弱引用 和 虚引用
引言Java中的强引用、软引用、弱引用和虚引用统称为Java四种引用方式。了解四种引用方式是用代码的方式去控制Java对象的生命周期,以达到节省资源等目的。强引用(StrongReference)强引用是最最普遍的一种引用了,也是最不容易被回收的一种对象。Object obj = new Object();只要这个对象还存在强引用,垃圾收集器就永远不会回收掉被引用的...原创 2019-07-09 23:55:17 · 504 阅读 · 0 评论