- 博客(21)
- 收藏
- 关注
转载 jvm篇 类加载器
类加载器类与类加载器判断类是否“相等”任意一个类,都由加载它的类加载器和这个类本身一同确立其在 Java 虚拟机中的唯一性,每一个类加载器,都有一个独立的类名称空间。因此,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个 Class 文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那么这两个类就必定不相等。这里的“相等”,包括代表类的 Class 对象的 equals() 方法、isInstance() 方法的返回结果,也包括使用
2020-06-02 17:17:02
221
转载 jvm篇 类加载的过程
类加载的过程类加载过程包括 5 个阶段:加载、验证、准备、解析和初始化。加载加载的过程“加载”是“类加载”过程的一个阶段,不能混淆这两个名词。在加载阶段,虚拟机需要完成 3 件事:通过类的全限定名获取该类的二进制字节流。将二进制字节流所代表的静态结构转化为方法区的运行时数据结构。在内存中创建一个代表该类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口。获取二进制字节流对于 Class 文件,虚拟机没有指明要从哪里获取、怎样获取。除了直接从编译好的 .cla
2020-06-02 17:16:41
181
转载 jvm篇 类加载的时机
类加载的时机类的生命周期类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括以下 7 个阶段:加载验证准备解析初始化使用卸载验证、准备、解析 3 个阶段统称为连接。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FSFPXtU0-1591088476985)(./images/loadclass.png)]加载、验证、准备、初始化和卸载这 5 个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始(注意是“开始”,而不是“进行
2020-06-02 17:16:21
200
转载 jvm篇 类文件结构
类文件结构JVM 的“无关性”谈论 JVM 的无关性,主要有以下两个:平台无关性:任何操作系统都能运行 Java 代码语言无关性: JVM 能运行除 Java 以外的其他代码Java 源代码首先需要使用 Javac 编译器编译成 .class 文件,然后由 JVM 执行 .class 文件,从而程序开始运行。JVM 只认识 .class 文件,它不关心是何种语言生成了 .class 文件,只要 .class 文件符合 JVM 的规范就能运行。 目前已经有 JRuby、Jython、Scala
2020-06-02 17:16:01
222
转载 jvm篇 jvm性能调优
JVM 性能调优在高性能硬件上部署程序,目前主要有两种方式:通过 64 位 JDK 来使用大内存;使用若干个 32 位虚拟机建立逻辑集群来利用硬件资源。使用 64 位 JDK 管理大内存堆内存变大后,虽然垃圾收集的频率减少了,但每次垃圾回收的时间变长。 如果堆内存为14 G,那么每次 Full GC 将长达数十秒。如果 Full GC 频繁发生,那么对于一个网站来说是无法忍受的。对于用户交互性强、对停顿时间敏感的系统,可以给 Java 虚拟机分配超大堆的前提是有把握把应用程序的 Full G
2020-06-02 17:15:38
159
转载 jvm篇 内存分配与回收策略
内存分配与回收策略对象的内存分配,就是在堆上分配(也可能经过 JIT 编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的 Eden 区上,少数情况下可能直接分配在老年代,分配规则不固定,取决于当前使用的垃圾收集器组合以及相关的参数配置。以下列举几条最普遍的内存分配规则,供大家学习。对象优先在 Eden 分配大多数情况下,对象在新生代 Eden 区中分配。当 Eden 区没有足够空间进行分配时,虚拟机将发起一次 Minor GC。????Minor GC vs Major GC/Ful
2020-06-02 17:15:01
222
转载 jvm篇 HotSpot垃圾收集器
HotSpot 垃圾收集器HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。新生代垃圾收集器Serial 垃圾收集器(单线程)只开启一条 GC 线程进行垃圾回收,并且在垃圾收集过程中停止一切用户线程(Stop The World)。一般客户端应用所需内存较小,不会创建太多对象,而且堆内存不大,因此垃圾收集器回收时间短,即使在这段时间停止一切用户线程,也不会感觉明显卡顿。因此
2020-06-02 17:14:14
132
转载 jvm篇 垃圾收集策略与算法
垃圾收集策略与算法程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而对于 Java 堆和方法区,我们只有在程序运行期间才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的正是这部分内存。判定对象是否存活若一个对象不被任何对象或变量引用,那么它就是无效对象,需要被回收。引用计数法在对象头
2020-06-02 17:13:51
127
转载 jvm篇 HotSpot虚拟机对象探秘
HotSpot 虚拟机对象探秘对象的内存布局在 HotSpot 虚拟机中,对象的内存布局分为以下 3 块区域:对象头(Header)实例数据(Instance Data)对齐填充(Padding)对象头对象头记录了对象在运行过程中所需要使用的一些数据:哈希码GC 分代年龄锁状态标志线程持有的锁偏向线程 ID偏向时间戳对象头可能包含类型指针,通过该指针能确定对象属于哪个类。如果对象是一个数组,那么对象头还会包括数组长度。实例数据实例数据部分就是成员变量的值,其中包括父
2020-06-02 17:13:20
331
转载 jvm篇 jvm内存结构
JVM 内存结构Java 虚拟机的内存空间分为 5 个部分:程序计数器Java 虚拟机栈本地方法栈堆方法区JDK 1.8 同 JDK 1.7 比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对 JVM 规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。程序计数器(PC 寄存器)程序计数器的定义程序计数器是一块较小的内存空间,是当前线程正在执行的那条字节码指令的地址。若当前线程正在执行的是一个本地方法,那么此
2020-06-02 17:12:32
134
原创 Apache虚拟主机的实现方式
Apache虚拟主机的实现方式有3种。基于IP的虚拟主机基于端口的虚拟主机基于域名的虚拟主机配置环境系统:CentOS7.5工具:XShell6**配置准备**1.安装httpdyum install httpd -y2.查看安装了内容 rpm -ql httpd | less3、配置Selinux文件,SELINUX=disabled。4、关闭防火墙s...
2019-04-07 22:47:40
2803
原创 前端篇 HTML基本元素
、 --加粗、–斜体–下划线 也可删除,但不推荐–删除线 也可删除,但不推荐--预格式(代码保持原状)colspan (td)合并列valign 垂直位置align 水平位置无序列表 DOTALOL有序列表 地卜师卡尔 第一个div 第二个div 第一个span 第二个span效果 第一个div第二个...
2019-03-06 12:25:20
276
转载 Java学习高级篇 Java 集合框架
Java 集合框架早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。集合框架被设计成要满足以下几个目标。该框架必须是高性能...
2019-03-04 21:15:34
374
转载 Java学习高级篇 网络编程Socket/Client
Java 网络编程网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。java.net 包中提供了两种常见的网络协议的支持:TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协...
2019-03-04 21:15:09
2374
转载 Java学习高级篇 Java 泛型
Java 泛型Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?答案是可以使用 Java 泛型。使用 Java ...
2019-03-04 11:56:36
532
转载 Java学习高级篇 多线程编程
Java 多线程编程Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有...
2019-03-04 11:55:35
385
转载 Java学习 第四章 Scanner控制台输入
Java Scanner 类java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。下面是创建 Scanner 对象的基本语法:Scanner s = new Scanner(System.in);接下来我们演示一个最简单的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我...
2019-03-04 11:53:36
650
转载 Java学习 第三章 Steam输入输出流
Java 流(Stream)、文件(File)和IOJava.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络...
2019-03-04 11:53:11
1000
转载 Java学习 第一章 安装与配置
Java学习之路 第一章#window系统配置安装java下载JDK首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html,点击如下下载按钮:在下载页面中你需要选择接受许可,并根据自己的系统选择对应的版本,本文以 Window 64位系统为例:下载后JDK的安...
2019-03-04 11:52:28
475
转载 Java学习 第二章 Date显示与格式
Java 日期时间java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。Date(long millisec)Date对象创建以后,可以调用下面的方法。序号 方法和描述1 boolea...
2019-03-04 11:52:12
847
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅