`

从一个例子看JVM启动过程(1)

 
阅读更多
开题从一个例子说起:
public class NativeMemoryGC
{
    @SuppressWarnings("restriction")
    public static void main(String[] args) throws SecurityException, NoSuchFieldException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InterruptedException
    {
     System.out.println("maxMemoryValue:"+sun.misc.VM.maxDirectMemory());
        
        Class c = Class.forName("java.nio.Bits");
        Field maxMemory = c.getDeclaredField("maxMemory");
        maxMemory.setAccessible(true);
        synchronized (c) {
            Long maxMemoryValue = (Long)maxMemory.get(null);
            System.out.println("maxMemoryValue:"+maxMemoryValue);
        } 
    }
}


Bits.java
   
private static volatile long maxMemory = VM.maxDirectMemory();

执行结果:
maxMemoryValue:259522560
maxMemoryValue:67108864

从源代码来看2者皆是调用的VM类的静态方法maxDirectMemory(),为什么2者会有不一样的结果呢??
------内网字数限制,需要分篇解析-----
分享到:
评论

相关推荐

    深入JVM内核 - 原理、诊断与优化

    介绍了Java堆的分析方法,以一个实例为基础,展示对堆的分析过程。 第九课 锁 baise锁 轻量级锁 自旋锁 介绍JVM中对多线程锁的实现。 第十课 class文件结构 ASM库介绍 介绍JVM规范中的最重要的内容——Class文件...

    新版Android开发教程.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...

    net学习笔记及其他代码应用

    答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 40.接口是否可...

    APACHE 2.2.9+TOMCAT6.0.18配置负载均衡

    注:本例程以一台机器为例子,即同一台机器上装一个apache和4个Tomcat。 一、 前期准备工作:安装用的程序(前提保证已安装了JDK1.5以上的版本) jdk1.6.0_18下载: http://java.sun.com/javase/downloads/index.jsp...

    Java项目开发与毕业设计指导

    首先进入bin目录,在bin目录下有一个build.xml文件,然后执行如下命令: ant 在aglets平台安装时,我们可以看到当前Aglet版本的信息。像其他的Java应用程序一样,Aglet平台需要通过Java policy文件(通常是....

    java线程池概念.txt

    如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了防止资源不足,服务器应用程序需要采取一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建和销毁线程...

    JAVA上百实例源码以及开源项目

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    JAVA上百实例源码以及开源项目源代码

    数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...

    Spring3.x企业应用开发实战(完整版) part1

    7.3.2 一个简单的例子 7.3.3 如何通过配置使用@AspectJ切面 7.4 @AspectJ语法基础 7.4.1 切点表达式函数 7.4.2 在函数入参中使用通配符 7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 ...

    jocky 混肴编译rar包(ant和插件俩个版本)

    而Jocky与其它混淆编译器最大的不同之处在于:它是直接从源码上做文章,也就是说编译过程本身就是一个混淆过程。 1.3 Jocky是如何工作的? Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,...

    java 混淆工具,不可逆 jocky 也许是最好的了

    而Jocky与其它混淆编译器最大的不同之处在于:它是直接从源码上做文章,也就是说编译过程本身就是一个混淆过程。 1.3 Jocky是如何工作的? Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,...

    Spring.3.x企业应用开发实战(完整版).part2

    7.3.2 一个简单的例子 7.3.3 如何通过配置使用@AspectJ切面 7.4 @AspectJ语法基础 7.4.1 切点表达式函数 7.4.2 在函数入参中使用通配符 7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 ...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段05讲、一个解释volatile关键字作用最好的例子.mp4 │ 高并发编程第二阶段06讲、Java内存模型以及CPU缓存不一致问题的引入.mp4 │ 高并发编程第二阶段07讲、CPU以及CPU缓存的结构,解决高速...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段05讲、一个解释volatile关键字作用最好的例子.mp4 │ 高并发编程第二阶段06讲、Java内存模型以及CPU缓存不一致问题的引入.mp4 │ 高并发编程第二阶段07讲、CPU以及CPU缓存的结构,解决高速...

    joc eclipse plugin

    而Jocky与其它混淆编译器最大的不同之处在于:它是直接从源码上做文章,也就是说编译过程本身就是一个混淆过程。 1.3 Jocky是如何工作的? Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,...

    测试培训教材

    一个好的测试管理工具应该能把以上几个阶段都管理起来。 测试人员每时每刻都在度量别人的工作成果,而测试人员的工作成果又由谁来度量呢?度量的标准和依据是什么呢?软件测试的度量是测试管理必须仔细思考的问题。...

    Hadoop权威指南(中文版)2015上传.rar

    一个导入的例子 生成代码 其他序列化系统 深入了解数据库导入 导入控制 导入和一致性 直接模式导入 使用导入的数据 导入的数据与Hive 导入大对象 执行导出 深入了解导出 导出与事务 导出和SequenceFile 第16章 实例...

    Hadoop权威指南 第二版(中文版)

     一个导入的例子  生成代码  其他序列化系统  深入了解数据库导入  导入控制  导入和一致性  直接模式导入  使用导入的数据  导入的数据与Hive  导入大对象  执行导出  深入了解导出  导出与事务  ...

Global site tag (gtag.js) - Google Analytics