java
文章平均质量分 64
java那点儿事
世人皆说官人好,没关系,当不了。
常加班,起不早,挣的不够去搓澡。
bug,code知多少只是屏幕显人老。
展开
-
你还是把依赖倒置、依赖注入和控制反转傻傻分不清楚嘛?
依赖倒置啥是依赖倒置?依赖倒置是SOLID原则之一,词的字面意思就是将依赖关系的倒置。其实依赖倒置大家早就会了,这个实际上就是面向接口编程。举个例子,现在电子产品更新换代快,可能没过多久咱们就想换一台电脑玩玩。即使电脑的品牌不同,但我们还是可以正常使用,总不会换个牌子就不会用了吧。所以如果用代码表示的话,我们用接口IPC来代替具体的类,然后各个类去实现它的programming方法。Copypublic interface IPC{ void programming(); } .原创 2020-07-27 13:56:08 · 218 阅读 · 0 评论 -
break;怎么跳出外部循环
学习就是为了不断的看到自己的知识盲点,然后改正,以前知道如何使用break来跳出循环,突然学习到可以用break跳出外部的循环(以前只知道怎么调本次的循环)。上正题代码如下:break跳出本次循环:public static void main(String[] args) { for (int i = 0; i < 10; i++) { for (int j = 0; j <=10; j++) { Sy.原创 2020-07-27 13:48:12 · 1204 阅读 · 0 评论 -
内置异常和Throwable核心方法
Java内置异常可查异常(必须要在方法里面捕获或者抛出)ClassNoFoundException 应⽤程序试图加载类,找不到对应的类IllegalAccessException 拒绝访问⼀个类的时候NoSuchFieldExcetion 请求的变量不存在NoSuchMethodException ⽅法不存在不可查异常ArrayIndexOutOfBoundsException 数组索引越界ClassCastException 强制失败抛出异常NullPointerException原创 2020-07-27 13:45:29 · 132 阅读 · 0 评论 -
让我们一起拥抱 Java 8 并行流吧,速度飞起!
前言在 Java7 之前,如果想要并行处理一个集合,我们需要以下几步: 手动分成几部分 为每部分创建线程 在适当的时候合并。并且还需要关注多个线程之间共享变量的修改问题。 而Java8为我们提供了并行流,可以一键开启并行模式。是不是很酷呢?让我们来看看吧并行流认识和开启并行流什么是并行流:并行流就是将一个流的内容分成多个数据块,并用不同的线程分别处理每个不同数据块的流。例如有这么一个需求:有一个 List 集合,而 list 中每个 apple 对象只...原创 2020-07-25 13:27:18 · 88 阅读 · 0 评论 -
这一千个不用 Null 的理由,你知道了嘛?
港真,Null 貌似在哪里都是个头疼的问题,比如 Java 里让人头疼的 NullPointerException,为了避免猝不及防的空指针异常,千百年来程序猿们不得不在代码里小心翼翼的各种 if 判断,麻烦而又臃肿,为此 java8 引入了 Optional 来避免这一问题。下面咱们要聊的是 MySQL 里的 null,在大量的 MySQL 优化文章和书籍里都提到了字段尽可能用NOT NULL,而不是NULL,除非特殊情况。但却都只给结论不说明原因,犹如鸡汤不给勺子一样,让不少初学者对这个结论半信半疑原创 2020-07-25 13:25:30 · 112 阅读 · 0 评论 -
你该知道的springboot2配置文件定义${user.name}内容失效问题探究
前言在朋友的项目有个自定义配置文件user.yml,其内容如下user: userId: 1 name: 张三 email: zhangsan@qq.com其映射实体内容为如下@Data@AllArgsConstructor@NoArgsConstructor@Builder@PropertySource(value = "user.yml",encoding = "utf-8",factory = CustomYmlPropertySourceFactory.cl原创 2020-07-25 13:23:05 · 298 阅读 · 1 评论 -
学会Java中的线程池,这一篇也许就够了!
线程池原理思维导图.png前言Java中的线程池已经不是什么神秘的技术了,相信在看的读者在项目中也都有使用过。关于线程池的文章也是数不胜数,我们站在巨人的肩膀上来再次梳理一下。本文还是保持原有的风格,图文解析,尽量做到多画图!全文共20000+字,建议收藏后细细品读,阅读期间搭配源码食用效果更佳!读完此文你将学到: ThreadPoolExecutor中常用参数有哪些? ThreadPoolExecutor中线程池状态和线程数量如何存储的? ThreadPool..原创 2020-07-24 13:42:36 · 254 阅读 · 0 评论 -
spring oauth2+JWT后端自动刷新access_token
这段时间在学习搭建基于spring boot的spring oauth2 和jwt整合。说实话挺折腾的。使用jwt做用户鉴权,难点在于token的刷新和注销。当然注销的难度更大,网上的一些方案也没有很出色的。这个功能基本让我放弃了jwt(滑稽笑~)。所以今天我单纯的先记录jwt token的刷新。Token刷新jwt token刷新方案可以分为两种:一种是校验token前刷新,第二种是校验失败后刷新。我们先来说说第二种方案验证失效后,Oauth2框架会把异常信息发送到OAuth2原创 2020-07-24 13:40:31 · 1584 阅读 · 0 评论 -
让我来教你自己动手作图深入理解二叉树、满二叉树及完全二叉树
一、背景二叉树是数据结构中的重点,也是难点。二叉树是一种非线性结构,比数组、栈、队列等线性结构相比复杂度更高,想要做到心中有“树”,需要自己动手画图、观察、思考,才能领会其真谛。该文将会结合图形,深入理解二叉树、满二叉树及完全二叉树的概念。二、基本概念2.1 结点结点是组成二叉树的最小单元。 -- 用图形表示 -- 用代码表示 // 结点 class Node<E> { E e; Node left, right; No原创 2020-07-24 13:38:48 · 315 阅读 · 0 评论 -
Spring当中循环依赖很少有人讲,今天让我们来看看吧
网上关于Spring循环依赖的博客太多了,有很多都分析的很深入,写的很用心,甚至还画了时序图、流程图帮助读者理解,我看了后,感觉自己是懂了,但是闭上眼睛,总觉得还没有完全理解,总觉得还有一两个坎过不去,对我这种有点笨的人来说,真的好难。当时,我就在想,如果哪一天,我理解了Spring循环依赖,一定要用自己的方式写篇博客,帮助大家更好的理解,等我理解后,一直在构思,到底怎么应该写,才能更通俗易懂,就在前几天,我想通了,这么写应该更通俗易懂。在写本篇博客之前,我翻阅了好多关于Spring循环依赖的博客,网上应该原创 2020-07-23 13:23:13 · 101 阅读 · 0 评论 -
有这么一款直击痛点的优秀http框架,让我超高效率完成了和第三方接口的对接
1.背景因为业务关系,要和许多不同第三方公司进行对接。这些服务商都提供基于http的api。但是每家公司提供api具体细节差别很大。有的基于RESTFUL规范,有的基于传统的http规范;有的需要在header里放置签名,有的需要SSL的双向认证,有的只需要SSL的单向认证;有的以JSON方式进行序列化,有的以XML方式进行序列化。类似于这样细节的差别太多了。不同的公司API规范不一样,这很正常。但是对于我来说,我如果想要代码变得优雅。我就必须解决一个痛点:不同服务商API那么多的差异点,如何.原创 2020-07-23 13:16:48 · 148 阅读 · 0 评论 -
让我来一步步教你用Prometheus搭建实时监控系统吧——上帝之火,普罗米修斯的崛起
上帝之火本系列讲述的是开源实时监控告警解决方案Prometheus,这个单词很牛逼。每次我都能联想到带来上帝之火的希腊之神,普罗米修斯。而这个开源的logo也是火,个人挺喜欢这个logo的设计。本系列着重介绍Prometheus以及如何用它和其周边的生态来搭建一套属于自己的实时监控告警平台。本系列受众对象为初次接触Prometheus的用户,大神勿喷,偏重于操作和实战,但是重要的概念也会精炼出提及下。系列主要分为以下几块Prometheus各个概念介绍和搭建,如何抓取数据(本次分享内容)原创 2020-07-23 13:11:49 · 423 阅读 · 0 评论 -
你该知道的springboot~nexus项目打包要注意的地方
一个使用maven制作框架包时,会有一个主项目,然后它有多个子项目框架组成,很少一个工具包一个工程,像springboot,springcloud都是这种结构,主项目用来管理一些依赖包的版本,这对于框架型项目来说是很必要的,而对于业务项目来说,因为目前都是推荐使用微服务的轻量方式,所以不建议用多项目绑定一个大项目的方式,而都是一个服务一个项目。主pom文件主项目的pom文件用来管理依赖包版本,一般在dependencyManagement节点去声明它们的版本号,这样在子项目里可以不声明相同包的版本信原创 2020-07-22 13:18:26 · 158 阅读 · 0 评论 -
23种设计模式之代理模式(动态代理)
一:什么是动态代理:利用反射机制在运行时创建代理类。接口、被代理类不变。二:动态代理和静态代理的不同:1、静态代理的代理类是程序员事先写好的2、动态代理的代理类是在程序运行时动态生成的三:动态代理分为两大类:1、基于接口的动态代理2、基于类的动态代理四:动态代理的三种实现方式:1、基于接口—>JDK动态代理 (JAVA原生的)(我们在这里使用)2、基于类—>cglib (自己查阅资料做了解)3、java字节码实现—> javassist (查资料了解)五:在使用动态原创 2020-07-22 13:12:46 · 144 阅读 · 0 评论 -
你该知道的接口默认方法
在接口中的方法前加上default关键字就可以在接口中写方法的默认实现。默认方法,接口的子类不需要实现,可以直接使用可以定义一个或多个默认方法以List接口为例,在Java8中新增了默认方法:Copypublic interface List extends Collection {default void sort(Comparator<? super E> c) {Collections.sort(this, c);}default void replaceAll(Unar原创 2020-07-22 13:08:16 · 130 阅读 · 0 评论 -
学习JAVA编程先做好哪些准备
万事开头难,相信这是很多刚入行学习Java的人的感受,Java语言的学习虽然相对其他的语言门槛稍高,很多初学者,在刚入门的时候之所以会觉得难、不好学,是因为在学习没有掌握好学习方法。那么,有人觉得Java难学,这其中的原因究竟有哪些呢?学习java编程先做好哪些准备第一是否下定决心要学习Java不能从全局、长远的角度考虑问题,是不能够处理好一时的事情的。所以,在学习Java开发前,不妨先冷静下来,问问自己对Java开发是否真的感兴趣,是否能够静下心来坚持不懈的学习。面对着Java开发相对复杂的知识体系,原创 2020-07-21 13:51:01 · 159 阅读 · 0 评论 -
超全!JAVA基础知识点总结
本文主要是我之前复习Java基础原理过程中写的Java基础知识点总结。Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其底层实现原理。纸上得来终觉浅,绝知此事要躬行。笔者之前对每部分的内容对做了比较深入的学习以及代码实现,基本上比较全面地讲述了每一个Java基础知识点,当然可能有些遗漏和错误,欢迎读者指正。Java基础知识点总结每部分内容会重点写一些常见知识点,方便复习和记忆,但并不是全部内容。面向对象三大特性继承:一般类只原创 2020-07-21 13:49:37 · 898 阅读 · 0 评论 -
终于搞懂Spring中Scope为Request和Session的Bean了
之前只是很模糊的知道其意思,在request scope中,每个request创建一个新的bean,在session scope中,同一session中的bean都是一样的但是不知道怎么用代码去验证它今天可找到验证它的代码了首先定义一个简单的类import lombok.Getter;import lombok.Setter;@Getter@Setterpublic class HelloMessageGenerator { private String message;原创 2020-07-21 13:46:35 · 640 阅读 · 0 评论 -
你该知道的基于Redis分布式锁的正确打开方式
分布式锁是在分布式环境下(多个JVM进程)控制多个客户端对某一资源的同步访问的一种实现,与之相对应的是线程锁,线程锁控制的是同一个JVM进程内多个线程之间的同步。分布式锁的一般实现方法是在应用服务器之外通过一个共享的存储服务器存储锁资源,同一时刻只有一个客户端能占有锁资源来完成。通常有基于Zookeeper,Redis,或数据库三种实现形式。本文介绍基于Redis的实现方案。要求基于Redis实现分布式锁需要满足如下几点要求:在分布式集群中,被分布式锁控制的方法或代码段同一时刻只能被一个客户端上面的一原创 2020-07-20 13:55:05 · 99 阅读 · 0 评论 -
快来看看深入浅出Semaphore源码解析
Semaphore通过permits的值来限制线程访问临界资源的总数,属于有限制次数的共享锁,不支持重入。前提条件在理解Semaphore时需要具备一些基本的知识:理解AQS的实现原理Semaphore源码解析Semaphore中有3个内部类,分别是Sync、NonfairSync和FairSync,Sync是NonfairSync和FairSync的抽象类,我们会从解读Semaphore实现的功能开始入手逐渐去解析Sync、NonfairSync和FairSync的源码public class原创 2020-07-20 13:45:33 · 113 阅读 · 0 评论 -
你还不会Linux下安装nginx?
一、安装Nginx前的准备1.1 请确认gcc g++开发类库是否装好。yum -y install gcc automake autoconf libtool make(安装make)yum install gcc gcc-c++(安装g++)1.2 下载Nginx和其组件cd /usr/local/src用yum方式安装openssl、pcre、zlibyum -y install openssl openssl-develyum -y install pcre pcre-devel原创 2020-07-20 13:22:39 · 70 阅读 · 0 评论 -
你该知道的JVM 总结
JVM GC 总结周志明大大的《深入理解Java虚拟机》出第三版了,早早的买了这本书,却一直没有花时间看。近来抽空温习了一下,感觉又有了新的收获。这里简单总结下。GC的由来由于堆的动态性,操作系统将堆交由给了开发者自己管理,手动申请,手动释放。对于C++,则是将这个权限继续交给了开发者,而对于Java,则是将这个过程自动化了。为什么要释放内存呢?最简单的原因就是操作系统一共给你了4G的内存空间,你需要的时候,就去借用。有借有还,再借不难,只借不还,最后4G内存空间被用完了,你就无法再申请新的内存了。内原创 2020-07-18 14:12:38 · 115 阅读 · 0 评论 -
对Java平台的理解。“Java是解释执行”对吗?
Java本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”,能够非常容易地获得跨平台能力;另外就是垃圾收集(GC),Java通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。对于“Java是解释执行”这句话,说法不太准确。我们开发的Java的源代码,首先通过Javac编译成为字节码(bytecode),然后,在运行时,通过Java虚拟机(JVM)内嵌的解释器将字节码解释执行,转换成为最终的机器码。但是原创 2020-07-18 13:53:59 · 137 阅读 · 0 评论 -
你该知道的架构师最常使用的5种架构模式及其适用场景分析
好莱坞电影中有多少情节?一些电影评论家说只有五个。您可以采用几种架构来实现应用程序?目前大多数程序都使用下面提到的五种架构之一。在本文中,我将五种软件架构模式的优缺点以及适合场景提炼出来作为快速参考。你可以在单个系统中使用多个架构模式,它们的组合既是计算机科学,也是一门艺术。一、分层架构这种方法可能是最常见的方法,因为它通常围绕数据库构建,并且业务中的许多应用程序自然会倾向于将信息存储在RDBMS的表中。许多比较大的软件框架(例如Java EE,Drupal和Express)都是在这种架构下实现的,因转载 2020-07-18 13:49:05 · 193 阅读 · 0 评论 -
你还不会Java 日期大小对比及日期转换?
声明1)该文章整理自网上的大牛和专家无私奉献的资料,具体引用的资料请看参考文献。2)本文仅供学术交流,非商用。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进添砖加瓦。Java 字符串型的日期对比大小```bash 1 /** 2 * @description: 两个String类型,按照日期格式对比 3原创 2020-07-17 13:57:34 · 116 阅读 · 0 评论 -
还不知道java程序员如何进阶?这些技术问题你都掌握就已经步入大神之路了
一、数据结构与算法基础说一下几种常见的排序算法和分别的复杂度。用Java写一个冒泡排序算法描述一下链式存储结构。如何遍历一棵二叉树?倒排一个LinkedList。用Java写一个递归遍历目录下面的所有文件。二、Java基础接口与抽象类的区别?Java中的异常有哪几类?分别怎么使用?常用的集合类有哪些?比如List如何排序?ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和优缺点?内存溢出是怎么回事?请举一个例子?==和equals的区别?hashCo原创 2020-07-17 13:43:07 · 129 阅读 · 0 评论 -
使用ZipInputStream解析zip类文件(jar、docx)的范例
一、缘由现在zip类的文件越来越多了,例如jar、docx。有时我们需批量处理这些文件中的数据,若都是手工操作的话就太麻烦了。于是考虑编程自动处理。Java提供了ZipInputStream等zip的操作类。但是有些内容比较抽象,没有代码范例的话有点难以理解。例如zip中的目录究竟是什么。于是我做个个Demo来演示如何用它来解析zip文件,输出信息。二、源码import java.io.*;import java.util.zip.ZipEntry;import java.util.zip.原创 2020-07-17 13:40:52 · 303 阅读 · 0 评论 -
变量的四种引用
强引用 只要引用存在,垃圾回收器永远不会回收,在 Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到 JVM 也不会回收。因此强引用是造成 Java 内存泄漏的主要原因之一。Object obj = new Object();User user=new User();可直接通过obj取得对应的对象 如 obj.equels(new Object());原创 2020-07-16 13:59:18 · 466 阅读 · 0 评论 -
Disruptor 高性能并发框架二次封装
Disruptor是一款java高性能无锁并发处理框架。和JDK中的BlockingQueue有相似处,但是它的处理速度非常快!!!号称“一个线程一秒钟可以处理600W个订单”(反正渣渣电脑是没体会到)。Disruptor功能十分强大,比如消费者阻塞等待;生产者-消费者一对一、一对多、多对一、多对多;构建消费者串/并行处理链等等。具体的概念模型可以参考:https://www.cnblogs.com/haiq/p/4112689.html下面是我基于Disruptor框架封装的工具。采用fluent编原创 2020-07-16 13:55:34 · 614 阅读 · 0 评论 -
你该知道的7种单例模式
七种单例模式:懒汉式(线程不安全)//不推荐public class Singleton{private static Singleton instance;private Singleton(); public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return this.instance原创 2020-07-16 13:47:35 · 130 阅读 · 0 评论 -
你可知3年工作经验的Java程序员应该具备的技能?
每个程序员、或者说每个工作者都应该有自己的职业规划,如果你不是富二代,不是官二代,也没有职业规划,希望你可以思考一下自己的将来。今天给大家分享的是一篇来自阿里Java工程师对3年工作经验程序员的职业建议,希望对你有启发。程序员的三个阶段第一阶段-——三年我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人。这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本上的内容迈向真正的企业级开发。我们知道如何团队协作、如何使用项目管理工具、项目版本如何控制、我们写的代码如何测试如原创 2020-07-16 13:45:45 · 483 阅读 · 0 评论 -
这10 个牛逼的单行代码编程技巧,你学会了吗?
1、对列表/数组中的每个元素都乘以2 // Range是半开区间 int [] ia = range(1, 10).map(i -> i * 2).toArray(); List<Integer> result = range(1, 10).map(i -> i * 2).boxed().collect(toList()); 2、计算集合/数组中的数字之和 range(1, 1000).sum(); range(1, 1000).reduce(0, In原创 2020-07-15 13:45:39 · 144 阅读 · 0 评论 -
这些java基础编程练习题你都会了吗?
很多人在自学java的时候看一遍视频,感觉就会了,课后并没有大量的练习来巩固当前所学的知识点,今天给大家整理了一些非常具有代表意义的题。Java基础类型题1、反转一个只有3位数的整数。从控制台输入321,输出1232、将一个字符由小写字母转换为大写字母。从控制台输入 a ,输出A3、从控制台输入一个字符串,由字母组成,转换成大写后输出。如果输入的是小写,就转换成大写。如果输入的是大写,就转换成小写例如输入:abCd ,控制台输入 ABcD4、输入三个整数x,y,z,请把这三个数由小到大输原创 2020-07-15 13:34:37 · 1107 阅读 · 1 评论 -
你该知道的JVM吞吐量收集器
在实践中我们发现对于大多数的应用领域,评估一个垃圾收集(GC)算法如何根据如下两个标准:吞吐量越高算法越好暂停时间越短算法越好首先让我们来明确垃圾收集(GC)中的两个术语:吞吐量(throughput)和暂停时间(pause times)。JVM在专门的线程(GC threads)中执行GC。只要GC线程是活动的,它们将与应用程序线程(application threads)争用当前可用CPU的时钟周期。简单点来说,吞吐量是指应用程序线程用时占程序总用时的比例。例如,吞吐量99/100意味着100秒的原创 2020-07-14 13:54:05 · 183 阅读 · 0 评论 -
你该知道的内存调优
理想的情况下,一个Java程序使用JVM的默认设置也可以运行得很好,所以一般来说,没有必要设置任何JVM参数。然而,由于一些性能问题(很不幸的是,这些问题经常出现),一些相关的JVM参数知识会是我们工作中得好伙伴。在这篇文章中,我们将介绍一些关于JVM内存管理的参数。知道并理解这些参数,将对开发者和运维人员很有帮助。所有已制定的HotSpot内存管理和垃圾回收算法都基于一个相同的堆内存划分:新生代(young generation)里存储着新分配的和较年轻的对象,老年代(old generation)里存原创 2020-07-14 13:51:56 · 141 阅读 · 0 评论 -
你该知道的JAVA打印所有XX参数及值
本篇文章基于Java 6(update 21oder 21之后)版本, HotSpot JVM 提供给了两个新的参数,在JVM启动后,在命令行中可以输出所有XX参数和值。-XX:+PrintFlagsFinal and -XX:+PrintFlagsInitial让我们现在就了解一下新参数的输出。以 -client 作为参数的 -XX:+PrintFlagsFinal 的结果是一个按字母排序的590个参数表格(注意,每个release版本参数的数量会不一样)$ java -client -XX:+原创 2020-07-14 13:50:30 · 1083 阅读 · 0 评论 -
你该知道的参数分类和即时(JIT)编译器诊断
在这个系列的第二部分,我来介绍一下HotSpot JVM提供的不同类别的参数。我同样会讨论一些关于JIT编译器诊断的有趣参数。JVM 参数分类HotSpot JVM 提供了三类参数。第一类包括了标准参数。顾名思义,标准参数中包括功能和输出的参数都是很稳定的,很可能在将来的JVM版本中不会改变。你可以用java命令(或者是用 java -help)检索出所有标准参数。我们在第一部分中已经见到过一些标准参数,例如:-server。第二类是X参数,非标准化的参数在将来的版本中可能会改变。所有的这类参数都以-原创 2020-07-13 13:44:51 · 208 阅读 · 0 评论 -
你该知道的JVM类型以及编译器模式
现在的JVM运行Java程序(和其它的兼容性语言)时在高效性和稳定性方面做的非常出色。自适应内存管理、垃圾收集、及时编译、动态类加载、锁优化——这里仅仅列举了某些场景下会发生的神奇的事情,但他们几乎不会直接与普通的程序员相关。在运行时,JVM会不断的计算并优化应用或者应用的某些部分。虽然有了这种程度的自动化(或者说有这么多自动化),但是JVM仍然提供了足够多的外部监控和手动调优工具。在有错误或低性能的情况下,JVM必须能够让专家调试。顺便说一句,除了这些隐藏在引擎中的神奇功能,允许大范围的手动调优也是现代原创 2020-07-13 13:42:18 · 165 阅读 · 0 评论 -
Java虚拟机学习4:对象内存分配与回收
对象优先在Eden上分配大多数情况下,对象优先在新生代Eden区域中分配。当Eden内存区域没有足够的空间进行分配时,虚拟机将触发一次 Minor GC(新生代GC)。Minor GC期间虚拟机将Eden区域的对象移动到其中一块Survivor区域。大对象直接进入老年代所谓大对象是指需要大量连续空间的对象。虚拟机提供了一个XX:PretenureSizeThreshold参数,令大于这个值的对象直接在老年代中分配。长期存活的对象将进入老年代虚拟机采用分代收集的思想管理内存,那内存回收时就必须能识别原创 2020-07-13 13:37:30 · 90 阅读 · 0 评论 -
你该知道的JAVA类加载机制
JVM和类当我们调用 Java 命令运行某个 Java 程序时,该命令将会启动一条 Java 虚拟机进程,不管该 Java 程序有多么复杂,该程序启动了多少个线程,它们都处于该 Java 虚拟机进程里。同一个 JVM 的所有线程、所有变量都处于同一个进程里,它们都使用该 JVM 进程的内存区。当系统出现以下几种情况时, JVM 进程将被终止:程序运行到最后正常接收;程序运行到使用System.exit()或Runtime.getRuntime().exit()代码结束程序;程序运行中遇到未捕获的异常原创 2020-07-11 14:31:18 · 108 阅读 · 0 评论