![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 93
码农随笔
这个作者很懒,什么都没留下…
展开
-
浅析Java中的资源关闭
内存是计算机很宝贵的资源,我们在使用资源时如果不关闭打开的资源,就有可能导致内存泄露的风险,下面浅析下Java中几种常见的资源关闭方案先定义一个资源类表示需要关闭的资源public class MyResource implements Closeable { @Override public void close() throws IOException { System.out.println("MyResource的close方法被调用!"); }}原创 2021-04-16 14:18:30 · 2088 阅读 · 4 评论 -
Java单例模式详解
单例模式可以说是设计模式中最简单和最基础的一种设计模式了,但是想写对单例模式真的很难,下面看下单例模式的几种写法及其存在的问题分析。饿汉式饿汉式是最常见也是最不需要考虑太多的单例模式,因为本就是线程安全的,饿汉式也就是在类被加载的时候就创建实例对象,饿汉式的代码如下:public class Singleton { private static Singleton singleton = new Singleton(); /** * 私有构造函数 */原创 2021-02-20 20:49:18 · 192 阅读 · 0 评论 -
Java switch支持类型详解
switch支持哪些类型?(1)最早时,只支持int、char、byte、short这样的整型的基本类型或对应的包装类型Integer、Character、Byte、Short常量,包装类型最终也会经过拆箱为基本类型,本质上还是只支持基本类型(2)JDK1.5开始支持enum,原理是给枚举值进行了内部的编号,进行编号和枚举值的映射(3)1.7开始支持String,但不允许为null,原理是借助 hashcode( ) 来实现。我们首先看下Jdk的官方文档。官方文档中对于switch有如下描述。原创 2021-01-27 19:49:04 · 4289 阅读 · 1 评论 -
Java switch及tableswitch、lookupswitch介绍
在Java中switch的形式:switch(key){ case num1: //可以加入自己的业务逻辑 break; case num2: //可以加入自己的业务逻辑 break; default: //可以加入自己的业务逻辑 break;}上述代码中switch(key)中的key可以是什么类型?(1)最早时,只支持int、char、byte、short这样的整型原创 2021-01-26 23:36:28 · 1293 阅读 · 1 评论 -
Class.forName和ClassLoader
Java类加载过程装载:通过累的全限定名获取二进制字节流,将二进制字节流转换成方法区中的运行时数据结构,在内存中生成Java.lang.class对象链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的; 校验:检查导入类或接口的二进制数据的正确性;(文件格式验证,元数据验证,字节码验证,符号引用验证) 准备:给类的静态变量分配并初始化存储空间; 解析:将常量池中的符号引用转成直接...原创 2020-12-09 12:16:40 · 259 阅读 · 0 评论 -
JDK源码阅读-Reference
Java最初只有普通的强引用,只有对象存在引用,则对象就不会被回收,即使内存不足,也是如此,JVM会爆出OOME,也不会去回收存在引用的对象。如果只提供强引用,我们就很难写出“这个对象不是很重要,如果内存不足GC回收掉也是可以的”这种语义的代码。Java在1.2版本中完善了引用体系,提供了4中引用类型:强引用,软引用,弱引用,虚引用。使用这些引用类型,我们不但可以控制垃圾回收器对对象的回收策略,同时还能在对象被回收后得到通知,进行相应的后续操作。引用与可达性分类Java目前有4中引用类型:转载 2020-12-08 22:36:27 · 140 阅读 · 0 评论 -
JVM源码分析之堆外内存完全解读
广义的堆外内存说到堆外内存,那大家肯定想到堆内内存,这也是我们大家接触最多的,我们在jvm参数里通常设置-Xmx来指定我们的堆的最大值,不过这还不是我们理解的Java堆,-Xmx的值是新生代和老生代的和的最大值,我们在jvm参数里通常还会加一个参数-XX:MaxPermSize来指定持久代的最大值,那么我们认识的Java堆的最大值其实是-Xmx和-XX:MaxPermSize的总和,在分代算法下,新生代,老生代和持久代是连续的虚拟地址,因为它们是一起分配的,那么剩下的都可以认为是堆外内存(广义的)了,这转载 2020-12-08 21:47:16 · 240 阅读 · 0 评论 -
Thread类源码解读
本文源码基于jdk1.8 。一、创建线程有哪几种方式(实现Runnable接口和继承Thread类)Runnable接口我们看Thread类的定义知道,它实现了Runable接口public class Thread implements Runnable { ...}而Runnable接口的定义如下:@FunctionalInterfacepublic interface Runnable { public abstract void run();}.原创 2020-06-11 18:55:41 · 692 阅读 · 0 评论 -
ThreadLocal探究
ThreadLocal为Java并发提供了一个新的思路, 它用来存储Thread的局部变量, 从而达到各个Thread之间的隔离运行。它被广泛应用于框架之间的用户资源隔离、事务隔离等。但是用不好会导致内存泄漏, 本文重点用于对它的使用过程的疑难解答, 相信仔细阅读完后的朋友可以随心所欲的安全使用它。一、内存泄漏原因探索ThreadLocal操作不当会引发内存泄露,最主要的原因在于它的内...转载 2019-12-02 10:29:57 · 378 阅读 · 0 评论 -
【JDK1.8】Future<V>
一、方法如下: 二、方法解释boolean cancel(boolean mayInterruptIfRunning);1、试图取消此任务的执行,如果这个任务已经完成、已经被取消或者由于其他原因导致该任务不能取消,会执行失败(返回false)。如果任务已经2、被成功取消,没有开始执行的任务不再被执行。如果这个任务已经开始,然后参数 mayInterruptIfRu...原创 2019-12-03 20:14:11 · 444 阅读 · 0 评论 -
【Java】ArrayList
一、ArrayList类图二、ArrayList主要的成员变量(1)private static final int DEFAULT_CAPACITY = 10;默认容量。(2)private static final Object[] EMPTY_ELEMENTDATA = {}; Shared empty array instance used for em...原创 2019-11-05 20:00:28 · 215 阅读 · 0 评论 -
JVM命令之jstat深入讲解
作用JVM statistics Monitoring,用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。使用依旧先看一下使用帮助~ ᐅ jstat -helpUsage: jstat -help|-options jstat -<option> [-t] [-h<lines&...转载 2019-09-14 10:24:26 · 513 阅读 · 0 评论 -
Jps命令—使用详解
jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。非常简单实用。 命令格式:jps [options ] [ hostid ] [options]选项:-q:仅输出VM标识符,不包括classname,jar name,arguments in main me...转载 2019-09-14 10:10:54 · 318 阅读 · 0 评论