
JVM知识
文章平均质量分 60
benjaminlee1
对技术充满好奇的一个人
展开
-
JVM运行时数据区域
Java虚拟机内存主要包括程序计数器,虚拟机栈,本地方法栈,方法区,堆,如下图 下面针对每个数据区存储的内容以及作用分别进行说明程序计数器这个是线程私有的区域,即每个线程都有自己的程序计数器。是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令(当然,实际的虚拟机会采取更加高效的方式去实现) 如果线程原创 2016-10-26 21:04:42 · 450 阅读 · 1 评论 -
javac常用参数
javacjavac是用来将java源代码编译为二进制字节码的编译程序,eclipse使用的编译也是javac,使用javac -help能看到所有的参数说明,下面将会介绍几个常用的参数-encoding用于指定java源文件所使用的字符编码。如下:javac -encoding UTF-8 Hello.java指定Hello.java文件的字符是用utf-8进行编码的。-source和-targe原创 2016-11-09 19:32:10 · 1519 阅读 · 0 评论 -
JVM内存分配与回收策略
对象的内存分配,基本上就是指在堆上分配,对象主要分配在新生代的Eden区。 堆一般分为新生代和老年代,新生代一般包括Eden,两个Survivor区,Eden:Survivor=8:1。如果启用了本地线程分配缓冲,将线程优先在TLAB上分配。少数情况也可能直接将对象分配在老年代中。这些分配细节取决于使用的垃圾收集器组合,还有虚拟机中与内存相关的参数设置接下来介绍的几条普遍的内存分配规则,针对S原创 2016-11-16 20:10:31 · 369 阅读 · 0 评论 -
Java中forName和loadClass的区别
问题描述在JDBC编程中,经常会看到Class.forName(“com.mysql.jdbc.Driver”),加载数据库驱动类,当时在java中还有一种加载类的方法即getClass.getClassLoader().loadClass(“com.mysql.jdbc.Driver”),但是当我使用此方法加载数据库驱动类时,发现无法成功加载。因此觉得这两个方法应该是有些区别的。这里就比较一下二者原创 2017-04-30 22:12:06 · 739 阅读 · 0 评论 -
Java中几种常量池的区分
转载来源Java中几种常量池的区分在java的内存分配中,经常听到很多关于常量池的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上说法都有问题,笔者尝试着来区分一下这几个概念。1.全局字符串池(string pool也有叫做string literal pool)全局字符串池里的内容是在类加载完成,经过验证,准备阶段之后在堆中生成字转载 2017-05-03 15:51:52 · 1269 阅读 · 0 评论