
JVM
文章平均质量分 87
Java小梁同学
这个作者很懒,什么都没留下…
展开
-
不要再死记硬背了,你试试这样理解JVM的这几代?
大家都知道,JVM中的堆,一般分为三个部分, 新生代、老年代和永久代。 这个是你第一天学JVM就知道的。但你可以先想想,为什么需要把堆分代? 不分代不能完成他所做的事情么?是这样,如果没有分代,那我们所有的对象都在一块,GC 的时候就要先找到哪些对象没用,怎么找呢?没分代就得对堆的所有区域进行扫描。但你知道,很多Java对象都是朝生夕死的,如果分代的话,我们可以 把新创建的对象放到某一地方,GC的时候就可以迅速回收这块存“朝生夕死”对象的区域。所以,一句话总结, 分代的唯一理由就是优化 GC 性能原创 2021-06-16 16:12:40 · 147 阅读 · 0 评论 -
还没对象么?那就来了解Java创建对象详解
对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建Java虚拟机内存架构模型详解1.使用new创建对象使用new关键字创建对象应该是最常见的一种方式,但我们应该知道,使用new创建对象会增加耦合度。无论使用什么框架,都要减少new的使用以降低耦合度。public class Hello{ public void sayWorld() { System.out.原创 2021-06-03 14:15:38 · 85 阅读 · 0 评论 -
跳槽必问的 JVM 垃圾收集器,看这篇就够了!
前言hello,大家好。今天我们来聊聊jvm垃圾收集器,垃圾收集器是我们在面试中必然会被问到的。今天选取了我们非常常见的垃圾收集器,给大家进行详细解读。jvm垃圾收集器jvm垃圾收集器是jvm内存回收的具体实现。本次讨论hotspot虚拟机中的垃圾收集器。图中总共有7中垃圾收集器。两个收集器中连线则表示可以配合使用。 中间的横线代表新生代和老年代的分区。上面的是新生代的垃圾收集器,下面是老年代的垃圾收集器。serial收集器serial收集器是最早的收集器,是单线程的垃圾收集器,采用复制收集算原创 2021-06-03 13:39:26 · 108 阅读 · 1 评论 -
瞧一瞧,看一看啦~ 多线程编程总结:认识多线程本质
在当今计算机系统中,已经大量存在多核心CPU,或者是在多核心基础上有进一步的超线程技术将虚拟CPU数量翻倍。在计算机发展之初,我们的应用程序是按照一个CPU只做一件事情来应用,也就是顺序执行。随着时间的不断变化,我们的CPU计算能力越加强大,那么我们可以使用线程技术,让每个核心都去做一件事,或者使用时间切片(time slicing)技术,让我们的CPU在各个线程中切换以同时达到一种处理多个线程任务的目标。可以同时听歌,看文档,运行时钟,挂游戏。需要注意的是,对于时间分片技术,我们实际上是同一个核心将一原创 2021-06-02 14:10:57 · 92 阅读 · 1 评论 -
那些你还不知道的小知识:Docker学习——环境准备安装centos7
前言Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。本系列文章我们以linux作为我们的运行平台,首先先准备一台linux服务器,我们以centos7为例,不管是在windows ,mac 平台安装centos都很方便,网上可以找到很多资料,本文以mac安装为例,如何安装centos.Mac上的虚拟机软件有很多,可以自行选择,V原创 2021-05-31 15:35:55 · 160 阅读 · 0 评论 -
史上最详细的Java基础和常用框架面试题
前言最近学校也催着找工作了,于是刷了一些面试题,学习了几篇大佬优秀的博客,总结了一些自认为重要的知识点;听不少职场前辈说,对于应届毕业生,面试时只要能说到核心重要的点,围绕这个点说一些自己的看法,面试基本上就基本上能过了,实际开发时技术没什么问题就行这些概念性的东西,谁能全记住,大概差不多就行了嘛,程序员何必为难程序员下面进入正文,写的不对的地方,欢迎大家指正Java基础面向对象:封装、继承、多态封装:将对象的属性私有化,并提供外界访问的属性和方法继承:子类拥有父类所有的属性和方法,子类可在原创 2021-05-30 21:01:43 · 209 阅读 · 0 评论 -
JDK 16都发布了,为什么我们还要关心Java8呢?
前言在 JDK 版本的世界里,从来都是 Oracle 发他的新版本,我们继续用我们的老版本。JDK7 用了 很久一段时间后,终于升级到JDK8。自从升级没多久,JDK 就开始了半年发一个新版本的节奏,陆续发布了 9 、10、11、12、13…直到今年3月16日,甲骨文正式发布 Java 16。甲骨文表示,现在为所有开发人员和企业提供 Java 16。为什么更新这么快?随着kotlin,groovy,Scala等语言和Java 一样是在JVM上实现,且近年来发展迅速,在编程语言生态系统中已经在一些方面原创 2021-05-29 22:02:00 · 674 阅读 · 0 评论 -
面试官:你觉得Redis存储对象信息是用Hash还是String好?
Redis 内部使用一个 RedisObject 对象来表示所有的 key 和 value,RedisObject 中的 type,则是代表一个 value 对象具体是何种数据类型,它包含字符串(String)、链表(List)、哈希结构(Hash)、集合(Set)、有序集合(Sorted set)。【参考文献】日常工作中我们存储对象信息的时候,一般有两种做法,一种是用 Hash 存储,另一种是 String 存储。但好像并没有所谓的最佳实践,那么实际上到底用什么数据结构存储更好呢?首先简单回顾下,R原创 2021-05-28 21:21:58 · 939 阅读 · 0 评论 -
Redis 中 keys 命令带来的线上性能问题,怎么解决?
什么是keys命令?keys官方文档 www.redis.cn/commands/ke…KEYS pattern查找所有符合给定模式pattern(正则表达式)的 key 。时间复杂度为O(N),N为数据库里面key的数量。【参考文献】例如,Redis在一个有1百万个key的数据库里面执行一次查询需要的时间是40毫秒 。警告: KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 KEYS, 你最好还是用 Redis 的集合结构 SETS原创 2021-05-28 21:02:07 · 1037 阅读 · 0 评论 -
Java 多线程 : 带你认识不一样的锁!
一 . Lock 接口Lock 接口是一切的基础 , 它抽象类一种用于控制多个线程对共享资源的访问的工具 .提供了以下方法用于抽象整个业务 :void lock()void lockInterruptibly() throws InterruptedException : 打断锁boolean tryLock() : 非阻塞尝试获取一个锁boolean tryLock(long time, TimeUnit unit) throws InterruptedException : 带时间尝试原创 2021-05-25 15:12:43 · 193 阅读 · 1 评论 -
“免费激活”!手把手教你写一个Java Agent
前言相信很多人都“免费激活”过 IDEA吧,在IDEA 的vmoptions配置里,加行配置就行:或者是这样“拖到IDEA窗口中”的形式:再或者用过一些APM工具,在JVM启动脚本上增加了-javaagent:/path/to/apm-agent.jar,就可以自动进行追踪。再或者用过Arthas之类的JVM诊断工具,这些工具都是通过Java Agent的技术去实现的。比如上面说的“免费激活”,其实就是在运行时期修改了验证license的相关代码。JAVA 里 Agent 这么强大的功能,你难原创 2021-05-24 21:24:57 · 603 阅读 · 1 评论 -
理解Java Class文件,破解Class文件第一步!
CS 的世界里流行着这么一句话,“计算机科学领域的任何问题都可以通过增加一个中间层来解决”。对于 Java 来说,JVM 就是这么一个产物,“Write once, Run anywhere”之所以能实现,靠得就是 JVM,它能在不同的操作系统下运行同一份源代码编译后的 class 文件。Java 是跨平台的,JVM 作为中间层,自然要针对不同的操作系统提供不同的实现。拿 JDK 11 来说,它的实现就有上图中提到的这么多种。通过不同操作系统的 JVM,我们的源代码就可以不用根据不同的操作系统编译成原创 2021-05-24 14:15:41 · 411 阅读 · 3 评论 -
这么简单?看完这篇Linux基本的操作就会了!
内存分区对象Linux 会把进程虚拟内存空间划分为多个分区,在 Linux 内核中使用 vm_area_struct 对象来表示,其定义如下:1struct vm_area_struct {2 struct mm_struct *vm_mm; // 分区所属的内存管理对象34 unsigned long vm_start; // 分区的开始地址5 unsigned long vm_end; // 分区的结束地址67 struc原创 2021-05-22 15:06:13 · 103 阅读 · 3 评论 -
一篇文章带你弄懂【Spring Boot】自动扫描组件
使用@componentscan自动扫描组件案例准备1.创建一个配置类,在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:component-scan>。package io.mieux.config;import org.springframework.context.annotation.ComponentScan;@ComponentScanpublic class BeanConfig {}原创 2021-05-21 20:57:59 · 969 阅读 · 1 评论 -
全面解析!由浅入深的教你如何学习springboot中使用redis!
正文很多时候,我们会在springboot中配置redis,但是就那么几个配置就配好了,没办法知道为什么,这里就详细的讲解一下这里假设已经成功创建了一个springboot项目。redis连接工厂类第一步,需要加上springboot的redis jar包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter原创 2021-05-21 20:55:03 · 328 阅读 · 0 评论 -
如何偷天换日,在不重启JVM,替换掉已经加载的类
在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:“Debug一下吧。”“线上机器,没开Debug端口。”“看日志,看看请求值和返回值分别是什么?”“那段代码没打印日志。”“改代码,加日志,重新发布一次。”“怀疑是线程池的问题,重启会破坏现场。”长达几十秒的沉默之后:“据说,排查问题的最高境界,就是只通过Review代码来发现问题。”比几十秒长几十倍的沉默之后:“我轮询了那段代码一十七遍之后,终于得出一个结论。”原创 2021-05-20 14:09:54 · 190 阅读 · 0 评论 -
SpringCloud+SpringBoot b2b2c 分布式微服务商城电商之手机端首页模块设计分析
近期我参与了公司电子商务平台中“首页”模块设计, 电商平台首页功能大概分为几个区域,如下:一、导航区域:左上角定位入口搜索功能入口消息通知入口商品分类入口二、广告区域:Banner滚动广告,通过后台发布,可以连接:商品、外部H5连接、店铺、开店、其他活动等三、二级频道模块区域:平台设置了:特惠商品区、品质生活、9块9、校园专区、套餐体验、一县一特、生活神器、健康养生、女神诱惑、海哇吃货、萌娃专区、水果摊、服饰服装、酒店行业、海哇品茶、大清仓、便宜好货、旅游。功能截图如下:四、短视原创 2021-05-19 13:58:33 · 323 阅读 · 1 评论 -
从未有人把JVM原理讲的这么详细
JVM原理1.简述JVM是Java Virtual Machine(Java虚拟机)的缩写,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。JVM屏蔽了与操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可在多种平台上不加修改的运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。2.JRE、JDK和JVM的关系JRE( JavaRuntime原创 2021-05-19 13:36:12 · 142 阅读 · 4 评论