# HG changeset patch # User minqi # Date 1444835553 25200 # Node ID 43d7a2139756cf913246761bba5e06b3fb35bac5 # Parent da8c3575c0767e46fbd7c70b84cb654c8fdb7696 8135284: Remove Method::_method_size field Summary: Remove Method::_method_size to improve memory footprint after JDK-8135085,which increased 4 bytes for 32 platform. Also removed related unused code in SA. Reviewed-by: coleenp, hseigel diff -r da8c3575c076 -r 43d7a2139756 hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java Tue Oct 13 17:34:28 2015 +0200 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java Wed Oct 14 08:12:33 2015 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,21 +52,19 @@ } private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("Method"); + type = db.lookupType("Method"); constMethod = type.getAddressField("_constMethod"); methodData = type.getAddressField("_method_data"); methodCounters = type.getAddressField("_method_counters"); - methodSize = new CIntField(type.getCIntegerField("_method_size"), 0); accessFlags = new CIntField(type.getCIntegerField("_access_flags"), 0); code = type.getAddressField("_code"); vtableIndex = new CIntField(type.getCIntegerField("_vtable_index"), 0); - bytecodeOffset = type.getSize(); /* - interpreterEntry = type.getAddressField("_interpreter_entry"); fromCompiledCodeEntryPoint = type.getAddressField("_from_compiled_code_entry_point"); + interpreterEntry = type.getAddressField("_from_interpreted_entry"); + */ - */ objectInitializerName = null; classInitializerName = null; } @@ -77,16 +75,22 @@ public boolean isMethod() { return true; } + // Not a Method field, used to keep type. + private static Type type; + // Fields private static AddressField constMethod; private static AddressField methodData; private static AddressField methodCounters; - private static CIntField methodSize; private static CIntField accessFlags; private static CIntField vtableIndex; - private static long bytecodeOffset; private static AddressField code; + /* + private static AddressCField fromCompiledCodeEntryPoint; + private static AddressField interpreterEntry; + */ + // constant method names - , // Initialized lazily to avoid initialization ordering dependencies between Method and SymbolTable @@ -106,11 +110,6 @@ } - /* - private static AddressCField interpreterEntry; - private static AddressCField fromCompiledCodeEntryPoint; - */ - // Accessors for declared fields public ConstMethod getConstMethod() { Address addr = constMethod.getValue(getAddress()); @@ -128,7 +127,6 @@ return (MethodCounters) VMObjectFactory.newObject(MethodCounters.class, addr); } /** WARNING: this is in words, not useful in this system; use getObjectSize() instead */ - public long getMethodSize() { return methodSize.getValue(this); } public long getMaxStack() { return getConstMethod().getMaxStack(); } public long getMaxLocals() { return getConstMethod().getMaxLocals(); } public long getSizeOfParameters() { return getConstMethod().getSizeOfParameters(); } @@ -265,7 +263,7 @@ } public long getSize() { - return getMethodSize(); + return type.getSize() + (isNative() ? 2: 0); } public void printValueOn(PrintStream tty) { @@ -273,7 +271,6 @@ } public void iterateFields(MetadataVisitor visitor) { - visitor.doCInt(methodSize, true); visitor.doCInt(accessFlags, true); } diff -r da8c3575c076 -r 43d7a2139756 hotspot/src/share/vm/oops/method.cpp --- a/hotspot/src/share/vm/oops/method.cpp Tue Oct 13 17:34:28 2015 +0200 +++ b/hotspot/src/share/vm/oops/method.cpp Wed Oct 14 08:12:33 2015 -0700 @@ -72,17 +72,14 @@ sizes, method_type, CHECK_NULL); - int size = Method::size(access_flags.is_native()); - - return new (loader_data, size, false, MetaspaceObj::MethodType, THREAD) Method(cm, access_flags, size); + return new (loader_data, size, false, MetaspaceObj::MethodType, THREAD) Method(cm, access_flags); } -Method::Method(ConstMethod* xconst, AccessFlags access_flags, int size) { +Method::Method(ConstMethod* xconst, AccessFlags access_flags) { No_Safepoint_Verifier no_safepoint; set_constMethod(xconst); set_access_flags(access_flags); - set_method_size(size); #ifdef CC_INTERP set_result_index(T_VOID); #endif @@ -1227,7 +1224,6 @@ m->method_type(), CHECK_(methodHandle())); methodHandle newm (THREAD, newm_oop); - int new_method_size = newm->method_size(); // Create a shallow copy of Method part, but be careful to preserve the new ConstMethod* ConstMethod* newcm = newm->constMethod(); @@ -1242,7 +1238,6 @@ newm->set_constMethod(newcm); newm->constMethod()->set_code_size(new_code_length); newm->constMethod()->set_constMethod_size(new_const_method_size); - newm->set_method_size(new_method_size); assert(newm->code_size() == new_code_length, "check"); assert(newm->method_parameters_length() == method_parameters_len, "check"); assert(newm->checked_exceptions_length() == checked_exceptions_len, "check"); diff -r da8c3575c076 -r 43d7a2139756 hotspot/src/share/vm/oops/method.hpp --- a/hotspot/src/share/vm/oops/method.hpp Tue Oct 13 17:34:28 2015 +0200 +++ b/hotspot/src/share/vm/oops/method.hpp Wed Oct 14 08:12:33 2015 -0700 @@ -71,7 +71,6 @@ #ifdef CC_INTERP int _result_index; // C++ interpreter needs for converting results to/from stack #endif - u2 _method_size; // size of this object u2 _intrinsic_id; // vmSymbols::intrinsic_id (0 == _none) // Flags @@ -106,7 +105,7 @@ volatile address _from_interpreted_entry; // Cache of _code ? _adapter->i2c_entry() : _i2i_entry // Constructor - Method(ConstMethod* xconst, AccessFlags access_flags, int size); + Method(ConstMethod* xconst, AccessFlags access_flags); public: static Method* allocate(ClassLoaderData* loader_data, @@ -241,12 +240,8 @@ // code size int code_size() const { return constMethod()->code_size(); } - // method size - int method_size() const { return _method_size; } - void set_method_size(int size) { - assert(0 <= size && size < (1 << 16), "invalid method size"); - _method_size = size; - } + // method size in words + int method_size() const { return sizeof(Method)/wordSize + is_native() ? 2 : 0; } // constant pool for Klass* holding this method ConstantPool* constants() const { return constMethod()->constants(); } diff -r da8c3575c076 -r 43d7a2139756 hotspot/src/share/vm/runtime/vmStructs.cpp --- a/hotspot/src/share/vm/runtime/vmStructs.cpp Tue Oct 13 17:34:28 2015 +0200 +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp Wed Oct 14 08:12:33 2015 -0700 @@ -381,7 +381,6 @@ nonstatic_field(Method, _method_counters, MethodCounters*) \ nonstatic_field(Method, _access_flags, AccessFlags) \ nonstatic_field(Method, _vtable_index, int) \ - nonstatic_field(Method, _method_size, u2) \ nonstatic_field(Method, _intrinsic_id, u2) \ nonproduct_nonstatic_field(Method, _compiled_invocation_count, int) \ volatile_nonstatic_field(Method, _code, nmethod*) \