<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bug_come的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/bug_come</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bug_come]]></copyright><item><title><![CDATA[方法调用的底层实现]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/107809882</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/107809882</guid><author>bug_come</author><pubDate>Wed, 17 Mar 2021 11:53:12 +0800</pubDate><description><![CDATA[方法调用的字节码指令
关于方法的调用，Java 字节码 共提供了 5 个指令，来调用不同类型的方法：
invokestatic 用来调用静态方法；
invokespecial 用于调用私有实例方法、构造器及 super 关键字等；
invokevirtual 用于调用非私有实例方法，比如 public 和 protected，大多数方法调用属于这一种；
invokeinterface 和上面这条指令类似，不过作用于接口类；
invokedynamic 用于调用动态方法。
以上字节码可以通过代码实现再用jcl]]></description><category></category></item><item><title><![CDATA[直接内存泄漏与JVM源码分析]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/108101879</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/108101879</guid><author>bug_come</author><pubDate>Tue, 25 Aug 2020 22:44:23 +0800</pubDate><description><![CDATA[直接内存（堆外内存）

直接内存(堆外内存)指的是 Java 应用程序通过直接方式从操作系统中申请的内存。这个差别与之前的堆、栈、方法区，那些内存都是经过了虚拟化。所以严格来说，这里是指直接内存。
直接内存有哪些？
 使用了 Java 的 Unsafe 类，做了一些本地内存的操作；
 Netty 的直接内存（Direct Memory），底层会调用操作系统的 malloc 函数。
 JNI 或者 JNA 程序，直接操纵了本地内存，比如一些加密库；
JNI 是 Java Native Interface]]></description><category></category></item><item><title><![CDATA[利用MAT工具分析内存泄漏]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/108072376</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/108072376</guid><author>bug_come</author><pubDate>Sat, 22 Aug 2020 14:00:21 +0800</pubDate><description><![CDATA[我们可以使用 jmap –histo 这种命令去分析哪些对象占据着我们的堆空间。但是那是比较容易分析的问题，如果是遇到内存情况比较复杂
的情况，命令的方式是看不出来的，这个时候我们必须要借助一下工具。当然前提是通过 jmap 命令把整个堆内存的数据 dump 下来。包括jdk自带的内存分析工具VisualVM，分析的数据非常有限。
MAT 简介
MAT 工具是基于 Eclipse 平台开发的，本身是一个 Java 程序，是一款很好的内存分析工具，所以如果你的堆快照比较大的话，则需要一台内存比较大的分析机器，]]></description><category></category></item><item><title><![CDATA[JVM调优与问题排查]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/108012774</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/108012774</guid><author>bug_come</author><pubDate>Tue, 18 Aug 2020 10:54:08 +0800</pubDate><description><![CDATA[JVM 调优分类
调优是一个很大的概念，简单说就是把系统进行优化，但是站在系统的角度，我们一般把jvm条又分为三部分：
1.JVM预调优
2.调优JVM	运行环境（慢、卡顿等）
3.解决JVM中的问题（OOM、CPU飙升等）
调优中，现象最明显的是 OOM，因为有异常抛出，当然它也只是作为调优的一部分。预调优和优化运行环境估计很多人做的就是服务器重启而已。前一篇文章调优就是JVM内存结构调优的一种方式。
JVM 预调优
业务场景设定
调优是要分场景的，所以一定要明显你调优项目的场景设定，像现在大家都是微服务]]></description><category></category></item><item><title><![CDATA[JVM性能调优之内存调优与GC优化]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/107981087</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/107981087</guid><author>bug_come</author><pubDate>Fri, 14 Aug 2020 15:20:50 +0800</pubDate><description><![CDATA[JVM 性能调优之内存优化与 GC 优化
JVM 调优是一个系统而又复杂的过程，但我们知道，在大多数情况下，我们基本不用去调整 JVM 内存分配，因为一些初始化的参数已经可以保证应用服务正常稳定地工作了。
在应用服务的特定场景下，JVM 内存分配不合理带来的性能表现并不会像内存溢出问题这么突出。一般你没有深入到各项性能指标中去，是很难发现其中隐藏的性能损耗。
压测工具 AB
Ab(ApacheBench) 测试工具是 Apache 提供的一款测试工具，具有简单易上手的特点，在测试 Web 服务时非常实用。
]]></description><category></category></item><item><title><![CDATA[GC调优基础知识与工具]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/107855311</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/107855311</guid><author>bug_come</author><pubDate>Sun, 09 Aug 2020 12:02:06 +0800</pubDate><description><![CDATA[JDK 为我们提供的工具
在windows上，我们安装jdk之后，jdk安装包的bin目录下自带很多exe文件。
在 linux 中，一般自带了 OpenJdk， 一般情况下 JPS 等命令不能用，要么选择去安装 JPS 等插件，要么把 OpenJdk 卸载，去重新安装 Oracle 的 JDK，我推荐后者。
标题
命令行工具

jps
列出当前机器上正在运行的虚拟机进程，JPS 从操作系统的临时目录上去找（所以有一些信息可能显示不全）。类似于linux下的pid查询

/**
 * @author 
 *]]></description><category></category></item><item><title><![CDATA[虚拟机类加载机制]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/107760730</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/107760730</guid><author>bug_come</author><pubDate>Wed, 05 Aug 2020 10:43:45 +0800</pubDate><description><![CDATA[深入 JVM 即时编译器 JIT
解释执行与 JIT
Java 程序在运行的时候，主要就是执行字节码指令，一般这些指令会按照顺序解释执行，这种就是解释执行，解释执行的方式是非常低效的，它需要把字节码先翻译成机器码，才能往下执行。另外，字节码是 Java 编译器做的一次初级优化，许多代码可以满足语法分析，其实还有很大的优化空间。所以，为了提高热点代码的执行效率，在运行时，虚拟机将会把这些代码编译成与本地平台相关的机器码，并进行各种层次的优化。完成这个任务的编译器，就称为即时编译器（Just In Time C]]></description><category></category></item><item><title><![CDATA[Class文件结构及字节码指令]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/107758169</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/107758169</guid><author>bug_come</author><pubDate>Mon, 03 Aug 2020 11:42:29 +0800</pubDate><description><![CDATA[JVM 的无关性
与平台无关性是建立在操作系统上，虚拟机厂商提供了许多可以运行在各种不同平台的虚拟机，它们都可以载入和执行字节码，从而实现程序的“一次编写，到处运行”
各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码（ByteCode）是构成平台无关性的基石，也是语言无关性的基础。Java 虚拟机不和包括 Java 在内的任何语言绑定，它只与“Class 文件”这种特定的二进制文件格式所关联，Class 文件中包含了 Java 虚拟机指令集和符号表以及若干其他辅助信息。

Class 类文件]]></description><category></category></item><item><title><![CDATA[垃圾回收器及 HostSpot 的细节实现]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/107711290</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/107711290</guid><author>bug_come</author><pubDate>Sat, 01 Aug 2020 09:04:58 +0800</pubDate><description><![CDATA[并发标记与三色标记
三色标记
在三色标记法之前有一个算法叫 Mark-And-Sweep（标记清除）。这个算法会设置一个标志位来记录对象是否被使用。最开始所有的标记位都是 0，如果发现对象是可达的就会置为 1，一步步下去就会呈现一个类似树状的结果。等标记的步骤完成后，会将未被标记的对象统一清理，再次把所有的标记位设置成 0 方便下次清理。这个算法最大的问题是 GC 执行期间需要把整个程序完全暂停，不能异步进行 GC 操作。因为在不同阶段标记清扫法的标志位 0 和 1 有不同的含义，那么新增的对象无论标记为什]]></description><category></category></item><item><title><![CDATA[垃圾回收及回收器]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/107665083</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/107665083</guid><author>bug_come</author><pubDate>Thu, 30 Jul 2020 10:32:39 +0800</pubDate><description><![CDATA[垃圾回收基础知识
什么是GC？
Java 与 C++等语言最大的技术区别：自动化的垃圾回收机制（GC）
如果某个对象到GC Roots间没有任何引用链相连，或者用图论的话来说就是从GC Roots到这个对象不可达时，则证明此对象是不可能再被使用的

分代回收理论
1、 绝大部分的对象都是朝生夕死。
2、 熬过多次垃圾回收的对象就越难回收。
根据以上两个理论，朝生夕死的对象放一个区域，难回收的对象放另外一个区域，这个就构成了 新生代和 老年代

GC分类
1、 新生代回收（Minor GC/Young GC）]]></description><category></category></item><item><title><![CDATA[JVM中的对象]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/107509808</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/107509808</guid><author>bug_come</author><pubDate>Wed, 22 Jul 2020 13:01:46 +0800</pubDate><description><![CDATA[JVM中的对象

本文参考深入理解JAVA虚拟机第二版和第三版，如有问题，麻烦指出。
JAVA创建对象，遇到一条new指令是如何执行的？

虚拟机遇到一条 new 指令时，首先检查是否被类加载器加载，如果没有，那必须先执行相应的类加载过程。
类加载就是把 class 加载到 JVM 的运行时数据区的过程。
1 ）检查加载
首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用（ 符号引用 ：符号引用以一组符号来描述所引用的目标 ），并且检查类是否已经被加载、解析和初始化过。
2 ）分配内存
接下来虚拟]]></description><category></category></item><item><title><![CDATA[深入理解JVM内存结构]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/107509413</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/107509413</guid><author>bug_come</author><pubDate>Wed, 22 Jul 2020 11:35:16 +0800</pubDate><description><![CDATA[深入理解JVM内存结构（二）

JVM 向操作系统申请内存：
JVM 第一步就是通过配置参数或者默认配置参数向操作系统申请内存空间，根据内存大小找到具体的内存分配表，然后把内存段的起始地址和终止地址分配给 JVM，接下来 JVM 就进行内部分配。
JVM 获得内存空间后，会根据配置参数分配堆、栈以及方法区的内存大小
-Xms30m -Xmx30m -Xss1m -XX:MaxMetaspaceSize=30m
类加载（类加载的细节后续章节会讲）：这里主要是把 class 放入方法区、还有 class 中的静]]></description><category></category></item><item><title><![CDATA[JVM 基础知识]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/107430902</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/107430902</guid><author>bug_come</author><pubDate>Sat, 18 Jul 2020 16:31:03 +0800</pubDate><description><![CDATA[JVM 基础知识
JVM 从编译到执行

Java 程序的执行过程
一个java程序，首先经过javac编译成.class文件，然后JVM 将其加载到方法区，执行引擎将会执行这些字节码。执行时，会翻译成操作系统相关的函数。JVM 作为 .class 文件的翻译存在，输入字节码，调用操作系统函数。
过程如下：Java 文件-&gt;编译器&gt;字节码-&gt;JVM-&gt;机器码
JVM 全称 Java Virtual Machine，也就是我们耳熟能详的 Java 虚拟机。它能识别 .class 后缀的]]></description><category></category></item><item><title><![CDATA[linux笔记]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/80945747</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/80945747</guid><author>bug_come</author><pubDate>Fri, 06 Jul 2018 20:28:31 +0800</pubDate><description><![CDATA[1.1.1.1 虚拟机网络模式介绍1. 桥接模式相当于将虚拟机直接接入局域网中,这时会自己独占IP地址.可以与本机通过局域网通信.特点:所有的在局域网中的IP都可以访问虚拟机.2. NAT模式相当于在网络环境中会开辟一块全新的网络空间.只有主机能够访问.特点:NAT模式只有主机访问,其他人通过IP地址禁止访问.2.linux安装jdk我用的是xshell远程连接工具ssh+ipcd ../调转到根...]]></description><category></category></item><item><title><![CDATA[Nginx简介]]></title><link>https://blog.youkuaiyun.com/bug_come/article/details/80945463</link><guid>https://blog.youkuaiyun.com/bug_come/article/details/80945463</guid><author>bug_come</author><pubDate>Fri, 06 Jul 2018 19:42:48 +0800</pubDate><description><![CDATA[    1. Nginx是一个高性能的http和反向代理服务器，也是一个IMAP/POP3/SMTP服务器，由老毛子发布其将源代码以类BSD许可证的形式发布，因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。     Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件代理服务器主要特点：占有内存少，并发能力强。并发量：能够支持50000次的并发链接下载地址：http:/...]]></description><category></category></item></channel></rss>