<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[marshalljian的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/marshalljian</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; marshalljian]]></copyright><item><title><![CDATA[深入理解Java虚拟机之第3章-3.6内存分配与回收策略]]></title><link>https://blog.youkuaiyun.com/marshalljian/article/details/81711295</link><guid>https://blog.youkuaiyun.com/marshalljian/article/details/81711295</guid><author>marshalljian</author><pubDate>Thu, 16 Aug 2018 01:21:08 +0800</pubDate><description><![CDATA[内存分配与回收策略

对象的内存分配，往大方向讲，就是在堆上分配（但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配），对象主要分配在新生代的Eden区上，如果启动了本地线程分配缓冲，将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中，分配的规则并不是百分之百固定的，其细节取决于当前使用的是哪一种垃圾收集器组合，还有虚拟机中与内存相关的参数的设置。
1、对象优先在Eden分配...]]></description><category></category></item><item><title><![CDATA[深入理解Java虚拟机之第3章-3.5垃圾收集器]]></title><link>https://blog.youkuaiyun.com/marshalljian/article/details/81704251</link><guid>https://blog.youkuaiyun.com/marshalljian/article/details/81704251</guid><author>marshalljian</author><pubDate>Wed, 15 Aug 2018 19:42:00 +0800</pubDate><description><![CDATA[垃圾收集器

Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定，因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别，并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。
	下图展示了7中作用于不同分代的收集器，如果两个收集器之间存在连线，就说明它们可以搭配使用。虚拟机所处的区域，则表示它是属于新生代收集器还是老年代收集器。


1、Seria...]]></description><category></category></item><item><title><![CDATA[深入理解Java虚拟机之第3章-3.4HotSpot的算法实现]]></title><link>https://blog.youkuaiyun.com/marshalljian/article/details/81702040</link><guid>https://blog.youkuaiyun.com/marshalljian/article/details/81702040</guid><author>marshalljian</author><pubDate>Wed, 15 Aug 2018 13:06:10 +0800</pubDate><description><![CDATA[HotSpot的算法实现

1、枚举根节点

可达性分析中可作为GC Roots的节点主要在全局性的引用（例如常量或类静态属性）与执行上下文（例如栈帧中的本地变量表）中，现在很多应用仅仅方法区就有数百兆，如果要逐个检查这里面的引用，那么必然会消耗很多时间。
	另外，为了保证可达性分析结果的准确性，要保证在整个可达性分析过程中对象引用关系不能出现变化的情况。所以，在GC进行时必须停顿所有Java线程...]]></description><category></category></item><item><title><![CDATA[深入理解Java虚拟机之第3章-3.3垃圾收集算法]]></title><link>https://blog.youkuaiyun.com/marshalljian/article/details/81609904</link><guid>https://blog.youkuaiyun.com/marshalljian/article/details/81609904</guid><author>marshalljian</author><pubDate>Sun, 12 Aug 2018 21:08:00 +0800</pubDate><description><![CDATA[垃圾收集算法

1、标记-清除算法

算法分为“标记”和“清除”两个阶段：首先标记出所有需要回收的对象，在标记完成后统一回收所有被标记的对象。后续的收集算法都是基于标记-清除算法思路并对其不足进行改进而得到的。
	标记-清除算法主要不足有两个：一个是效率问题，标记和清除两个过程的效率都不高；另一个是空间问题，标记清除之后会产生大量不连续的内存碎片，空间碎片太多可能会导致以后在程序运行过程中需要分配...]]></description><category></category></item><item><title><![CDATA[深入理解Java虚拟机之第3章-3.2对象已死吗]]></title><link>https://blog.youkuaiyun.com/marshalljian/article/details/81608166</link><guid>https://blog.youkuaiyun.com/marshalljian/article/details/81608166</guid><author>marshalljian</author><pubDate>Sun, 12 Aug 2018 19:02:33 +0800</pubDate><description><![CDATA[对象已死吗

1、引用计数算法

这种算法是这样判断对象是否存活的，给对象中添加一个引用计数器，每当有一个地方引用它时，计数器值就加1；当引用失效时，计数器值就减1；任何时刻计数器为0的对象就是不可能再被使用的。
2、可达性分析算法

在主流的商用程序语言的主流实现中，都是称通过可达性分析来判定对象是否存活的。这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点，从这些节点开...]]></description><category></category></item><item><title><![CDATA[深入理解Java虚拟机之第2章-2.4实战：OutOfMemoryError异常]]></title><link>https://blog.youkuaiyun.com/marshalljian/article/details/81590143</link><guid>https://blog.youkuaiyun.com/marshalljian/article/details/81590143</guid><author>marshalljian</author><pubDate>Sat, 11 Aug 2018 21:59:30 +0800</pubDate><description><![CDATA[深入理解Java虚拟机之第2章-2.4实战：OutOfMemoryError异常

1、Java堆溢出

Java堆用于存储对象实例，只要不断地创建对象，并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象，那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。下面的代码限制Java堆的大小为20MB，不可扩展（将堆的最小值-Xms参数与最大值-Xmx参数设置为一样即可避...]]></description><category></category></item><item><title><![CDATA[深入理解Java虚拟机之第2章-2.3Java虚拟机对象探秘]]></title><link>https://blog.youkuaiyun.com/marshalljian/article/details/81587331</link><guid>https://blog.youkuaiyun.com/marshalljian/article/details/81587331</guid><author>marshalljian</author><pubDate>Sat, 11 Aug 2018 16:39:21 +0800</pubDate><description><![CDATA[2.3Java虚拟机对象探秘

1、对象的创建

在Java程序运行过程中无时无刻都有对象被创建出来。虚拟机遇到一天new指令时，首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用，并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有，那必须先执行相应的类加载过程。
	在类加载检查通过后，虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可以完全确定，为对象...]]></description><category></category></item><item><title><![CDATA[深入理解Java虚拟机之第2章-2.2Java内存区域与内存溢出异常]]></title><link>https://blog.youkuaiyun.com/marshalljian/article/details/81585531</link><guid>https://blog.youkuaiyun.com/marshalljian/article/details/81585531</guid><author>marshalljian</author><pubDate>Sat, 11 Aug 2018 14:11:51 +0800</pubDate><description><![CDATA[Java内存区域与内存溢出异常

1、运行时数据区域。Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些运行时数据区域有的会随着进程启动而存在，有的则依赖线程的启动和结束而建立和销毁。这些运行时数据区域包括程序计数器、虚拟机栈、本地方法栈、方法区、堆。

2、程序计数器。程序计数器是线程私有的内存，这个计数器记录的是正在执行的虚拟机字节码指令的地址；如果正在...]]></description><category></category></item><item><title><![CDATA[Java IO字节流原理]]></title><link>https://blog.youkuaiyun.com/marshalljian/article/details/80860925</link><guid>https://blog.youkuaiyun.com/marshalljian/article/details/80860925</guid><author>marshalljian</author><pubDate>Fri, 29 Jun 2018 23:18:42 +0800</pubDate><description><![CDATA[以前自己对java IO这块一直处于看似懂了，但是每当要用的时候，却总是无法下手。以前总是纠结编码、乱码问题。最近发现自己水平有所提高，所以趁着这个机会重新看了下IO方面的知识，趁着自己还记得，把收获记录在这。这篇文章主要讲通过字节流的方式操作文件。IO流讲的无非就是将数据从一个地方传输到另一个地方。当我的程序需要某些数据时，就会从缓存或者内存或者硬盘或者网络上读入数据到程序。当我的程序要发送或保...]]></description><category></category></item><item><title><![CDATA[Oracle常用操作集合]]></title><link>https://blog.youkuaiyun.com/marshalljian/article/details/80817445</link><guid>https://blog.youkuaiyun.com/marshalljian/article/details/80817445</guid><author>marshalljian</author><pubDate>Tue, 26 Jun 2018 16:45:38 +0800</pubDate><description><![CDATA[2018-06-26一、oracle建立sequence和触发器1、建表create table a_user
(
  id       INTEGER not null primary key,
  username VARCHAR2(64) not null,
  mobile   VARCHAR2(16) not null
);2、建立sequencecreate sequence user...]]></description><category></category></item></channel></rss>