array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 358+JVM高频知识点,Java面试中不用担心,阿里大佬全面详解文档! - 爱码网

一、JVM 内存区域划分

  • 程序计数器(线程私有)

程序计数器(Program Counter Register),也有称作为 PC 寄存器。保存的是程序当

前执行的指令的地址(也可以说保存下一条指令的所在存储单元的地址),当 CPU 需要执

行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根据得

到的地址获取到指令,在得到指令之后,程序计数器便自动加 1 或者根据转移指针得到下

一条指令的地址,如此循环,直至执行完所有的指令。也就是说是用来指示执行哪条指令的

由于在 JVM 中,多线程是通过线程轮流切换来获得 CPU 执行时间的,因此,在任一

具体时刻,一个 CPU 的内核只会执行一条线程中的指令,因此,为了能够使得每个线程都

在线程切换后能够恢复在切换之前的程序执行位置,每个线程都需要有自己独立的程序计数

器,并且不能互相被干扰,否则就会影响到程序的正常执行次序。因此,可以这么说,程序

计数器是每个线程所私有的。

在 JVM 规范中规定,如果线程执行的是非 native 方法,则程序计数器中保存的是当前

需要执行的指令的地址;如果线程执行的是 native 方法,则程序计数器中的值是 undefined。

由于程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变,因此,对

于程序计数器是不会发生内存溢出现象(OutOfMemory)的。

  • 本地方法栈(线程私有)

358+JVM高频知识点,Java面试中不用担心,阿里大佬全面详解文档!

  • 方法区
  • 直接内存

358+JVM高频知识点,Java面试中不用担心,阿里大佬全面详解文档!

2.JVM 执行子系统

  • Class 类文件结构
  • 字节码指令

358+JVM高频知识点,Java面试中不用担心,阿里大佬全面详解文档!

 

  • 类加载机制
  • 类加载器
  • Tomcat 类加载机制
  • 方法调用详解

358+JVM高频知识点,Java面试中不用担心,阿里大佬全面详解文档!

3.垃圾回收器和内存分配策略

  • Java 中是值传递还是引用传递?

358+JVM高频知识点,Java面试中不用担心,阿里大佬全面详解文档!

  • 引用类型
  • 基本垃圾回收算法
  • 分代处理垃圾
  • JAVA 中垃圾回收 GC 的类型

358+JVM高频知识点,Java面试中不用担心,阿里大佬全面详解文档!

编写高效优雅 Java 程序

  • 面向对象

358+JVM高频知识点,Java面试中不用担心,阿里大佬全面详解文档!

  • 方法

1 可变参数要谨慎使用

可变参数是允许传 0 个参数的

如果是参数个数在 1~多个之间的时候,要做单独的业务控制。

看代码

2 返回零长度的数组或集合,不要返回 null

方法的结果返回 null,会导致调用方的要单独处理为 null 的情况。返回零长度,调用方可以

统一处理,如使用 foreach 即可。

JDK 中也为我们提供了 Collections.EMPTY_LIST 这样的零长度集合

3 优先使用标准的异常

要尽量追求代码的重用,同时减少类加载的数目,提高类装载的性能。

常用的异常:

IlegalAraumentException -- 调用者传递的参数不合适

lllegalStateException – 接收的对象状态不对,

NullPoint

UnsupportedOperationException –不支持的操作

  • 通用程序设计

1 用枚举代替 int 常量

声明的一个枚举本质就是一个类,每个具体的枚举值就是这个枚举类的实例。

枚举更多作用,看代码。

2 将局部变量的作用域最小化

1. 在第一次使用的地方进行声明

 

2. 局部变量都是要自行初始化,初始化条件不满足,就不要声明

最小化的好处,减小局部变量表的大小,提示性能;同时避免局部变量过早声明导致不正确

的使用。

3 精确计算,避免使用 float 和 double

可以使用 int 或者 long 以及 BigDecimal

4 当心字符串连接的性能

参考代码 com.xiangxue.ch04.StringUnion15.Test。

在存在大量字符串拼接或者大型字符串拼接的时候,尽量使用 StringBuilder 和 StringBuffer

性能优化

  • 常用的性能评价/测试指标

358+JVM高频知识点,Java面试中不用担心,阿里大佬全面详解文档!

  • 常用的性能优化手段
  • 应用服务性能优化
  • 异步

358+JVM高频知识点,Java面试中不用担心,阿里大佬全面详解文档!

  • 集群
  • 应用相关

总结:

jvm与性能优化知识点整理,文中给大家展示了一部分,一键三连,扫码即可~

358+JVM高频知识点,Java面试中不用担心,阿里大佬全面详解文档!

相关文章: