JDK6中提供了java.io.Console类专用来访问基于字符的控制台设备. 你的程序如果要与Windows下的cmd或者Linux下的Terminal交互,就可以用Console类代劳.(类似System.in和System.out) 但我们不总是能得到可用的Console, 一个JVM是否有可用的Console依赖于底层平台和JVM如何被调用. 如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的Console实例。 Console类还有个特色就是,专门对密码等安全字符,进行了处理。专门提供 ...
2008-03-07

java 线程的一点心得

关键字: java threads
1, 为什么wait与notify之前必须要加synchronized?答案其实很简单,也是为了防止等待-通知机制出现race condition为什么会出现race condition ?答: 对象在被wait之前已经被另一线程notify , 之后的wait 会永久停止,并导致deadlock(死锁)理想情况:1, 第一个线程判断该对象是否要wait2, 第一个线程将对象wait3, 第二个线程再将对象notify实际情况1, 第一个线程判断该对象是否要wait2, 第二个线程将对象notify3, 第一个线程将对象wait为了防止这些情况,才需要在wait与not ...
1, 保证线程安全的三种方法:    a, 不要跨线程访问共享变量    b, 使共享变量是final类型的    c, 将共享变量的操作加上同步2, 一开始就将类设计成线程安全的, 比在后期重新修复它,更容易.3, 编写多线程程序, 首先保证它是正确的, 其次再考虑性能.4, 无状态或只读对象永远是线程安全的.5, 不要将一个共享变量裸露在多线程环境下(无同步或不可变性保护)6, 多线程环境下的延迟加载需要同步的保护, 因为延迟加载会造成对象重复实例化7, 对于volatile ...
1、升级到jboss 4.2.2后频繁出现OutOfMemoryError 解决方法:在启动的参数中增加: -XX:PermSize=64M -XX:MaxPermSize=256M 原因分析:查阅文档得知是因为jboss会把一些常用的java的package做缓存,而默认的缓存是很小的,所以会经常抛出 OutOfMemoryError。 2、位于JMSSession Thread中的BeanFactory初始化失败 原因分析:跟踪代码后发现commons-logging相关类报出ClassCastException,根据这个分析可能是jboss使用的 commons-lo ...
操作 代码 耗时(单位时间) 本地赋值 i=n; 1.0 实例赋值 this.i=n; 1.2 int ...
2007-10-31

重温java之bootstrap类加载原理(scsl2.3+jdk1.5)

关键字: bootstrap classloader jvm
让我们一起跟随ClassLoader里的本地方法 findBootstrapClass(), 进入jvm执行启动类加载器加载类的内部实现。 java 代码   private Class findBootstrapClass0(String name)       throws ClassNotFoundException       {     ...
AbstractQueuedSynchronizer 是jdk1.5并发包的锁, 屏障, 信号量实现基础, 理解该类的实现原理, 将帮助你更好的扩展java的线程. 待发布.
2007-10-29

重温java之classloader体系结构(含hotswap)

关键字: inside jvm classLoader
jvm classLoader architecture: a, Bootstrap ClassLoader/启动类加载器        主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作. b, Extension ClassLoader/扩展类加载器        主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作 c, System ...
volatile, 用更低的代价替代同步 为什么 使用volatile比同步代价更低? 同步的代价, 主要由其覆盖范围决定, 如果可以降低同步的覆盖范围, 则可以大幅提升程序性能.  而volatile的覆盖范围仅仅变量级别的. 因此它的同步代价很低. volatile原理是什么? volatile的语义, 其实是告诉处理器, 不要将我放入工作内存, 请直接在主存操作我.(工作内存详见java内存模型) 因此, 当多核或多线程在访问该变量时, 都将直接 操作 主存, 这从本质上, 做到了变量共享. ...
2007-08-04

多核线程笔记-java内存模型详解

关键字: java jmm 并发 多线程
内存模型 (memory model) 内存模型描述的是程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节. 不同平台间的处理器架构将直接影响内存模型的结构. 在C或C++中, 可以利用不同操作平台下的内存模型来编写并发程序. 但是, 这带给开发人员的是, 更高的学习成本. 相比之下, java利用了自身虚拟机的优势, 使内存模型不束缚于具体的处理器架构, 真正实现了跨平台. (针对hotspot jvm, jrockit等不同的jvm, 内存模型也会不相同) 内存模型的特征: a, Visibi ...
galaxystar
搜索本博客
存档
最新评论