- 浏览: 330055 次
- 性别:
- 来自: 南京
最新评论
文章列表
sun.misc.Cleaner
- 博客分类:
- java基础
java NIO包是通过sun.misc.Cleaner和PhantomReference来实现堆外内存的自动释放的。现在来学习下Cleaner的使用
sun.misc.Cleaner是JDK内部提供的用来释放堆外内存的API
package com.cq.myproject.cleaner;
import java.lang.reflect.Field;
import sun.misc.Un ...
原文:http://lovestblog.cn/blog/2015/05/12/direct-buffer/
这里只截取自己要的
广义的堆外内存:新生代、老生代、持久代之外的内存,包括jvm本身在运行过程中分配的内存,jni里分配的内存,以及下面提到的DirectByteBuffer分配的内存等等
狭义的堆外内存:主要指java.nio.DirectByteBuffer在创建时分配的内存,本文也指的是狭义的堆外内存
System.gc
堆外内存不会对gc造成什么影响(System.gc除外),堆外内存的回收其实依赖于我们的gc机制。首先在java层面和这块堆外内存 ...
总的来说,java安全应该包括两个方面,一是java平台(即运行环境)的安全性;二是以java语言开发的应用程序的安全性。我们只考虑第二块,一般我们可以通过安全管理机制来完善安全性,安全管理器是安全的实施者,可对此类进行扩展,它提供了加在应用程序上的安全措施,通过配置安全策略文件达到对网络、本地文件和程序其他部分的访问限制的效果
java从应用层给我们提供了安全管理机制--安全管理器,每个java应用都可以拥有自己的安全管理器,他会在运行阶段检查需要保护的资源的访问权限及其他规定的操作权限,保护系统免受恶意操作攻击,达到系统的安全策略。当运行java程序时,安全管理器会根据policy ...
vbox增强遇到的问题
- 博客分类:
- linux
在安装vbox增强后,设置共享文件夹并挂载(mount -t vboxsf share /mnt/shareV)出现错误:
mount: wrong sf type ,bad option ,bad superblock balabala。。。
打开/sbin 看到mount.vboxsf是红色的(估计是坏了、、)
rm mount.vboxsf
ln -s /opt/VboxGuestAddition-x.x.xx/lib/VBoxGuestAdditions/mount.vboxsf(添加一个软连接)
解决了
这里用sudo命令时遇到一个问题 moon is not i ...
文件结构是存放在磁盘等存储设备上的文件的组织方法。主要体现在文件和目录的组织上。目录提供了管理文件的一个方便有效的途径。
linux的文件结构:linux使用标准的目录结构,安装时,已经为用户创建了文件系统和完整而固定的目录组成形式,并制定每个目录的作用和其中的文件类型。
linux采用树形结构。最上层是根目录,其他所有目录都是从根目录出发而生成的。微软的DOS和windows也是树形结构,但他们结构的根是磁盘分区的盘符,有几个分区就有几个树形结构,它们之间的关系是并列的。在linux中,无论操作系统管理几个磁盘分区,这样的目录树只有一个。从结构上讲,各个磁盘分区上的树形目录不一定是 ...
垃圾回收器判断对象是否存活
- 博客分类:
- java基础
转载自:http://blog.csdn.net/ochangwen/article/details/51406779
本文是基于周志明的《深入理解Java虚拟机》
堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆回收之前,第一件事情就是要确定这些对象哪些还“存活”着,哪些对象已经“死去”(即不可能再被任何途径使用的对象)
1、引用计数算法(Reference Counting)
很多教科书判断对象是否存活的算法是这样的:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器减1;任何时刻计数器都为0的对象就是不可 ...
shutdown hook
- 博客分类:
- java基础
转载自:http://www.cnblogs.com/zhuawang/p/4523503.html
java的关闭钩子(Shutdown Hook)
Runtime.getRuntime().addShutdownHook(shutdownHook);
这个方法的含义说明:
这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。
用途
1应用程序 ...
JDK1.7的发布已经介绍了一些有用的特征,尽管大部分都是一些语法糖,但仍然极大地提高了代码的可读性和质量。其中的一个特征是介绍字面常量数字的下划线。从Java7开始,你就可以在你的Java代码里把长整型数字比如10000000000 ...
WeakReference的理解和使用
- 博客分类:
- java基础
引用自:http://blog.csdn.net/zmx729618/article/details/54093532
看到篇帖子, 国外一个技术面试官在面试senior java developer的时候, 问到一个weak reference相关的问题. 他没有期望有人能够完整解释清楚weak reference是什么, 怎么用, 只是期望有人能够提到这个concept和java的GC相关. 很可惜的是, 20多个拥有5年以上java开发经验的面试者中, 只有两人知道weak reference的存在, 而其中只有一人实际用到过他. 无疑, 在interviewer眼中, 对于 ...
1.反射机制是什么
反射机制是指在运行状态中,对于任意一个类,都能知道他的所有属性和方法;对于任意一个对象,都能调用它任意方法和属性(经验证也是受作用域的限制); 这种动态获取信息以及动态调用对象方法的功 ...
语法
java中,assert关键字是从java se 1.4引入的,java默认是不启动断言检查的(这个时候所有的断言语句都被忽略),想要开启则需输入启动参数-ea 或-enableassertions
它的语法很简单
1.assert<boolean表达式>
如果表达式为true,则程序继续执行
如果为false则抛出AssertionError,并终止执行(或者可以捕获这个error)
2.assert<boolean表达式>:<错误信息表达式>
如果表达式为true,则程序继续执行
如果为false,则抛出AssertionError ...
转载自:http://blog.csdn.net/zhangerqing/article/details/43057799
Atomic简介
Atomic包是Java.util.concurrent下的另一个专门为线程安全设计的Java包,包含多个原子操作类。这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。实际上是借助硬件的相关指 ...
集合的fail-fast 转载
- 博客分类:
- java基础
在JDK的Collection中我们时常会看到类似于这样的话:
例如,ArrayList:
注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。
HashMap中:
注意,迭代器的快速失败行为不能得到保证,一般来说,存在非同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器 ...
Callable接口
- 博客分类:
- java基础
Callable接口与Runnable接口类似,都是用于在另一个线程执行任务。
他俩的区别是:
Callable有返回值,抛出异常,Runnable反之。
可以用线程池submit方法运行Callable对象(call方法),会返回一个Future对象。Future代表call方法的异步计算结果。它提供检测计算是否完成方法isDone。以及获取结果的get方法,如果结果还没返回则线程阻塞直到得到结果。
调用Callable有两种方式:
1.线程池的submit方法
2.FutureTask<V> task = new FutureTask<V>( ...
缓存I/O又被称作标准I/O,大多数文件系统默认的I/O操作都是缓存I/O。在linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存(page cache)中,也就是说,数据会被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。
缓存I/O有一下有点:
1.在一定程度上分离了应用程序空间和实际物理设备
2.可以减少读盘的次数,从而提高性能
当应用程序尝试读取某块数据时,如果这块数据已经存放在了页缓存中,那它就能立即返回给应用程序,而不用物理读盘操作。当然如果没有,那么就需先将数据从磁盘读到页缓存中。对于写机制,程序也会将数据先写 ...