自己写的代码,6个月不看也是别人的代码,自己学的知识也同样如此,学完的知识如果不使用或者不常常回顾,那么还不是自己的知识。要认识java线程安全,必须了解两个主要的点:java的内存模型,java的线程同步机制。特别是内存模型,java的线程同步机制很大程度上都是基于内存模型而设定的。浅谈java内...
分类:
编程语言 时间:
2015-07-03 00:02:32
阅读次数:
179
作为java程序员,因为有虚拟机的自动内存管理,所以不需要再向C和C++程序员那样灾区写delete和free方法,但是java中是不是就不存在内存泄露问题呢,答案是否定的,java中一样存在内存泄漏的问题。所以我们需要了解虚拟机是怎样使用内存的。Java虚拟机在执行Java程序的过程中会将管理的内...
分类:
编程语言 时间:
2015-07-02 20:48:54
阅读次数:
140
JVM调优总结(一) 一些概念数据类型Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,sh...
分类:
其他好文 时间:
2015-07-02 17:18:40
阅读次数:
131
SUN的JDK从1.3.1开始使用HotSpot虚拟机技术,主要使用C++实现,JNI接口部分用C实现.
JAVA原先是把源代码编译为字节码在虚拟机执行,这样执行速度较慢.而HotSpot编译器将常用的部分代码编译为本地(native)代码,这样显著高了性能.
HotSpot包括一个解释器和两个编译器,解释与编译混合执行模式,默认启动解释执行。
编译器:java源代码被编译器编译成class...
分类:
其他好文 时间:
2015-07-02 10:19:41
阅读次数:
124
JVM常用调试用参数:
–verbose:gc在虚拟机发生内存回收时在输出设备显示信息
-Xloggc:filename把GC相关日志信息记录到文件以便分析
-XX:-HeapDumpOnOutOfMemoryError当首次遭遇OOM时导出此时堆中相关信息
-XX:OnError=";" 出现致命ERROR之后运行自定义命令
-XX:-PrintClassHistogram遇到Ctrl...
分类:
其他好文 时间:
2015-07-02 10:18:12
阅读次数:
146
JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述:
每个ClassLoader加载Class的过程是:
1.检测此Class是否载入过(即在cache中是否有此Class),如果有到8,如果没有到2
2.如果parent classloader不存在(没有parent,那parent一定是bootstrap),到4
3.请求parent c...
分类:
其他好文 时间:
2015-07-02 10:18:07
阅读次数:
244
1) Method Area
2) Heap
3) Java Stacks
4) PC Registers
5) Native Method Stacks
JAVA的JVM的内存模型大致可分为3个区:
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放...
分类:
其他好文 时间:
2015-07-02 10:18:05
阅读次数:
112
跟踪收集算法:
复制(copying):
将堆内分成两个相同空间,从根(ThreadLocal的对象,静态对象)开始访问每一个关联的活跃对象,将空间A的活跃对象全部复制到空间B,然后一次性回收整个空间A。因为只访问活跃对象,将所有活动对象复制走之后就清空整个空间,不用去访问死对象,不需要标记骤,所以遍历空间的成本较小,但需要巨大的复制成本和较多的内存。
标记清除(mark-sweep):
...
分类:
其他好文 时间:
2015-07-02 10:17:13
阅读次数:
263
业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分,仔细研究下jdk的工具...
分类:
编程语言 时间:
2015-07-01 20:46:06
阅读次数:
156
引言
在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m。从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用了),如下图所示。同时,由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了?
...
分类:
系统相关 时间:
2015-07-01 10:09:29
阅读次数:
157