一:虚拟机内存图解 JAVA程序运行与虚拟机之上,运行时需要内存空间.虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理. 虚拟机管理内存数据区域划分如下图: 数据区域分类: 方法区            (Method Area) 虚拟机栈         (VM Stack) 本地方法栈     (Native Method Stack) 堆                   (Heap) 程序计数器    (Program Counter Register) 直接…
一:虚拟机内存图解 JAVA程序运行与虚拟机之上,运行时需要内存空间.虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理. 虚拟机管理内存数据区域划分如下图: 数据区域分类: 方法区            (Method Area) 虚拟机栈         (VM Stack) 本地方法栈     (Native Method Stack) 堆                   (Heap) 程序计数器    (Program Counter Register) 直接…
看完这篇文章你还敢说你懂JVM吗? 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m. http://virtual.51cto.com/art/201901/591418.htm 感觉挺好 还没看完 复制一下 晚上看. 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Li…
扩展阅读:JVM从入门开始深入每一个底层细节 六.内存模型 6.1.内存模型与运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同数据区域. Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节. 这里所讲的主内存.工作内存与Java内存区域中的Java堆.栈.方法区等并不是同一层次的内存划分,这两者基本上是没有关系的.如果两者一定要勉强对应起来,从变量.主内存.工作内存的定义看,主内存主要对应于…
前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据. 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap. HashMap 众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍有不同. Base 1.7 1.7 中的数据结构图: 先来看看 1.7 中的实现. 这是 HashM…
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟.醍醐灌顶的感觉. 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便.我就想为什么家里人不让上网,我的同学 xxx 家里有网,每次一提这个就落一通批评:xxx上xxx什xxxx么xxxx网xxxx看xxxx你xxxx考xxxx的…
下面我们来一起学习一下 HTTPS ,首先问你一个问题,为什么有了 HTTP 之后,还需要有 HTTPS ?我突然有个想法,为什么我们面试的时候需要回答标准答案呢?为什么我们不说出我们自己的想法和见解,却要记住一些所谓的标准回答呢?技术还有正确与否吗? HTTPS 为什么会出现 一个新技术的出现必定是为了解决某种问题的,那么 HTTPS 解决了 HTTP 的什么问题呢? HTTPS 解决了什么问题 一个简单的回答可能会是 HTTP 它不安全.由于 HTTP 天生明文传输的特性,在 HTTP 的传…
我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star https://github.com/crisxuan/bestJavaer 已提交此篇文章 final 是 Java 中的关键字,它也是 Java 中很重要的一个关键字,final 修饰的类.方法.变量有不同的含义:finally 也是一个关键字,不过我们可以使用 finally 和其他关键字结合做一些组合操作: finalize 是一个不让人待见的方法,它是对象祖宗 Object 中的一个方法,finalize 机制现在已…
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. 之前的7000 字说清楚 HashMap已经详细介绍了 HashMap 的原理和实现,本次再来说说他的同胞兄弟 HashSet,这两兄弟经常被拿出来一起说,面试的时候,也经常是两者结合着考察.难道它们两个的实现方式很类似吗,不然为什么总是放在一起比较. 实际上并不是因为它俩相似,从根本上来说…
前言 CPU 是时分的,操作系统里面有很多线程,每个线程的运行时间由CPU决定,CPU会分给每一个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,就是100%,我们应该意识到,CPU运行速度很快(主频非常高),除非是密集型耗费CPU的运算,其他类型的任务都会在小于时间片的时间内结束. 内存过高一般有两种情况:内存溢出和内存泄露 内存溢出: 程序分配的内存超过物理机的内存大小,导致无法继续分配内存,出现OOM报错 内存泄露: 不再使用的对象一直占据着内存不释放,导致这块内…
前言 ​ 本章节属于Java进阶系列,前面关于设计模式讲解完了,有兴趣的童鞋可以翻看之前的博文,后面会讲解JVM的优化,整个系列会完整的讲解整个java体系与生态相关的中间件知识.本次将对jvm有更深入的学习,我们不仅要让程序能跑起来,而且是可以跑的更快!可以分析解决在生产环境中所遇到的各种"棘手"的问题,比如运行的应用卡住了,日志不输出,程序没有反应,CPU负载突然升高,多线程应用下,如何分配线程数量等. JVM介绍 什么是JVM ​ 作为java工程师,对于jvm肯定不陌生.JVM…
前言 ​ 本章节属于Java进阶系列,前面关于设计模式讲解完了,有兴趣的童鞋可以翻看之前的博文,后面会讲解JVM的优化,整个系列会完整的讲解整个java体系与生态相关的中间件知识.本次将对jvm有更深入的学习,我们不仅要让程序能跑起来,而且是可以跑的更快!可以分析解决在生产环境中所遇到的各种"棘手"的问题,比如运行的应用卡住了,日志不输出,程序没有反应,CPU负载突然升高,多线程应用下,如何分配线程数量等. JVM介绍 什么是JVM ​ 作为java工程师,对于jvm肯定不陌生.JVM…
前言 ​ 上次讲解了JVM内存相关知识,今天继续JVM专题. JVM垃圾回收算法 什么是垃圾回收 ​ 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内存溢出,所以对内存资源的管理是非常重要了. 什么样的对象需要回收 引用计数法 ​ 引用计数是历史最悠久的一种算法,最早George E. Collins在1960的时候首次提出,50年后的今天,该算法依然被很多编程语言使用. 原理 ​ 假设有一个对象A,任何一个对象对A的引用,那么对象A的引用计数器+1…
最近,网上流传一组<人工智能实验教材>的图片,照片火起来的原因是教材是为幼儿园的小朋友们设计的! Python被列入小学.初高中教材已不是新鲜事,现在又成功“入侵”了幼儿园,对此有网友调侃称:看来Python将会从幼儿园一直陪你到考大学! 由此可见,如果不学Python就很有可能会成为新时代的“文盲”.特别是对大学生来讲,掌握Python能成为求职时的加分项. 曾有麦肯锡牛人在网上发帖,如果能回答Python的相关问题,将很乐意提供内推. 在刚过去的2019年三大语言榜单中,Python也早就…
前言 对于Redis而言,很多小伙伴只关注其关键的五大基础类型:string.hash.list.set.sorted set(有序集合),其实还有三种特殊类型在很多应用场景也比较适合使用,分别是:bitmap.geospatial.hyperloglog:上一篇(跟我一起学Redis之五种基本类型及其应用场景举例(干了6个小时))对五种类型进行分享,接下来结合应用场景来说说三种特殊类型的使用方式: 正文 geospatial(地理空间) 该类型在Redis3.2.0版本中加入,其本质是将经纬度…
Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性. Session 是什么 客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是 Session 对象,存储结构为 ConcurrentHashMap.Session 弥补了 HTTP 无状态特性,服务器可以利用 Session 存储客户端在同一个会…
在 Java 中的基本理念是 结构不佳的代码不能运行,发现错误的理想时期是在编译期间,因为你不用运行程序,只是凭借着对 Java 基本理念的理解就能发现问题.但是编译期并不能找出所有的问题,有一些 NullPointerException 和 ClassNotFoundException 在编译期找不到,这些异常是 RuntimeException 运行时异常,这些异常往往在运行时才能被发现. 我们写 Java 程序经常会出现两种问题,一种是 java.lang.Exception ,一种是 j…
HashMap 概述 如果你没有时间细抠本文,可以直接看 HashMap 概述,能让你对 HashMap 有个大致的了解. HashMap 是 Map 接口的实现,HashMap 允许空的 key-value 键值对,HashMap 被认为是 Hashtable 的增强版,HashMap 是一个非线程安全的容器,如果想构造线程安全的 Map 考虑使用 ConcurrentHashMap.HashMap 是无序的,因为 HashMap 无法保证内部存储的键值对的有序性. HashMap 的底层数据…
工作中,经常遇到这样的问题,我明明在MySQL表上面加了索引,为什么执行SQL查询的时候却没有用到索引? 同一条SQL有时候查询用到了索引,有时候却没用到索引,这是咋回事? 原因可能是索引失效了,失效的原因有以下几种,看你有没有踩过类似的坑? 1. 数据准备: 有这么一张用户表,在name字段上建个索引: CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(255) DEFAULT…
目录 1.什么是类的加载(类初始化) 2.类的生命周期 3.接口的加载过程 4.解开开篇的面试题 5.理解首次主动使用 6.类加载器 7.关于命名空间 8.JVM类加载机制 9.双亲委派模型 10.ClassLoader源码分析 11.自定义类加载器 12.加载类的三种方式 13.总结 14.特别注意 @ 前言 你是否真的理解java的类加载机制?点进文章的盆友不如先来做一道非常常见的面试题,如果你能做出来,可能你早已掌握并理解了java的类加载机制,若结果出乎你的意料,那就很有必要来了解了解j…
JVM 真的很难学么?不.只是你"不敢学"而已        许多招聘的信息上面都说,要了解jvm.多线程什么的对于 java 程序员来说,这是工作好多年的程序员都不一定能掌握的东西,但是面试就会问啊,你不掌握咋整你说? 为什么面试会问呢?        因为面试时间就那么一个小时半个小时的,问不出什么东西,所以许多面试官都会问什么是类加载.jvm的结构.垃圾回收算法啊什么的,网上有很多的理论知识,我们背一背和面试官聊一聊就完事了,或者有的面试管技术实力很强问的很细节这时候如果掌握的不…
概述 工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题,长长可以到达事半功倍的效果来. jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,以exe的形式直接点击就可以使用,其中包含分析工具已经很强大,几乎涉及了方方面面,但是我们最常使用的只有两款:jconsole.exe和…
WCF难学吗? 是啊,这问题估计很多人都会问,也包括阿拉在内,也有此深刻而严重的凝问. 也有人说:“如何某项技术可以化繁为简,学起来轻松一点就好了.”也许,人类开生就摆脱不了一种习性——懒惰:不过,也有人认为,很多时候,人们是不是总喜欢把简单的事情复杂化,那么,很多人都觉得很复杂的WCF算不算被人们“神话”了呢? 这个问题,我不作回答,现在我们要做一件事,一起来跟着我的步骤,写一个程序再说. 这个解决方案中包含两个项目,一个叫Server,另一个叫Client,天生一对. 1.启动VS 2010…
php实现把数组排成最小的数(核心是排序)(看别人的代码其实也没那么难)(把php代码也看一下)(implode("",$numbers);)(usort) 一.总结 核心是排序 看别人的代码其实也没那么难 把php代码也看一下 implode:return implode("",$numbers); //2.类似于join,将数组转化为字符串 usort:自定义排序规则 二.php实现把数组排成最小的数 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一…
[学霸]深圳-鑫 2017/7/11 13:54:07只是学习怎么用QT的话,不用看源码.看帮助文档就很好要学习编码风格与思路,就看看源码 [学神]武汉-朝菌 2017/7/11 13:54:39没必要看源码..把文档学通就已经牛逼了 [学霸]西安-火边的冰块呵呵,好习惯,不过我不建议你挖的太深.Qt有太多的东西需要了解和学习,先拓宽知识面,再深入下去,如果一开始就深入下去,你会失去兴趣的.Qt类有几百个还是几千个?自带的例子有几百个?这些如果都过一遍,基本上就没有实现不了的了,就看怎么实现了.…
前一篇跟大家聊了聊指针的概念,可是就算了解了指针是什么,为什么依然感觉难学?我试着从几个点切入,聊聊指针难学之处. 文末会给大家推荐几本书,有需要的朋友可以看看! 难点1. 讨厌的星号 定义指针变量p时,都会加个*号.在用到指针变量p时,也会加个*号.比如以下代码: int main() { int *p; p = malloc(sizeof(int)); *p = 1; return 0; } 程序定义了一个指针变量p,前面有个*号:后面给指针p指向的内存区域赋值1,又有个*号,这两个*号有啥…
如今这个世道,作为一个有几年工作经验的前端,不学点框架源码都感觉要被抛弃了,react或vue要能吹吹牛吧,最好能造个轮子,听说vue3源码好学点,那么学学vue3,但是学起来还是那么费劲,感觉快放弃了,就在这个时候出现了petite-vue,害,这家伙比vue简单啊,拿它来重拾学习源码的信心岂不更好,能自己写一个petite-vue再学习vue3岂不是事半功倍.说了这么多,今天就开始迈出第一步吧.注意,本文是学习petite-vue源码系列的第一篇文章,先打个广告,github项目地址,欢迎点…
前言 用过spring的人都知道,spring简单的通过注解就可以完成很多事情,但这些东西是如何实现的呢以及如何应用到我们自己的代码中?接下来,让我们一起开启注解的旅程. 1. @Controller 标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象. @Controller public class TestController { @RequestMapping("/test") public String test(Map<St…
本文已经收录自 JavaGuide (59k+ Star):[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识. 1. 面向对象和面向过程的区别 面向过程 :面向过程性能比面向对象高. 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机.嵌入式开发.Linux/Unix等一般采用面向过程开发.但是,面向过程没有面向对象易维护.易复用.易扩展. 面向对象 :面向对象易维护.易复用.易扩展. 因为面向对象有封装.继承.多态性的特…
看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术架构师韩凯(社区ID:Chris_Han0015),主要负责大数据和云计算领域.在美国取得系统工程硕士学位后,服务于华尔街主要银行与金融机构.从事流程再造与创新与商务智能方案设计实施. IT名人堂栏目对微软技术中心技术架构师韩凯进行了独家访谈,揭秘了SQL Server 2014不可不知的那些事儿.…